Merge branch 'feature/files' into feature/media-viewer

This commit is contained in:
NikolayRechkin 2020-05-19 00:30:31 +03:00
commit ea02ee9313
29 changed files with 333 additions and 220 deletions

View File

@ -13,7 +13,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.4" />
</ItemGroup>
<ItemGroup>

View File

@ -38,17 +38,17 @@ namespace ASC.Api.Core
{
public class ApiContext : ICloneable
{
public HttpContext HttpContext { get; set; }
public IHttpContextAccessor HttpContextAccessor { get; set; }
private Tenant tenant;
public Tenant Tenant { get { return tenant ?? (tenant = TenantManager.GetCurrentTenant(HttpContext)); } }
public Tenant Tenant { get { return tenant ?? (tenant = TenantManager.GetCurrentTenant(HttpContextAccessor.HttpContext)); } }
public ApiContext(IHttpContextAccessor httpContextAccessor, SecurityContext securityContext, TenantManager tenantManager)
{
if (httpContextAccessor == null || httpContextAccessor.HttpContext == null) return;
HttpContext = httpContextAccessor.HttpContext;
HttpContextAccessor = httpContextAccessor;
Count = 0;
var query = HttpContext.Request.Query;
var query = HttpContextAccessor.HttpContext.Request.Query;
//Try parse values
var count = query.GetRequestValue("count");
if (!string.IsNullOrEmpty(count) && ulong.TryParse(count, out var countParsed))
@ -188,13 +188,13 @@ namespace ASC.Api.Core
{
set
{
if (HttpContext.Items.ContainsKey(nameof(TotalCount)))
if (HttpContextAccessor.HttpContext.Items.ContainsKey(nameof(TotalCount)))
{
HttpContext.Items[nameof(TotalCount)] = value;
HttpContextAccessor.HttpContext.Items[nameof(TotalCount)] = value;
}
else
{
HttpContext.Items.Add(nameof(TotalCount), value);
HttpContextAccessor.HttpContext.Items.Add(nameof(TotalCount), value);
}
}
}
@ -204,7 +204,7 @@ namespace ASC.Api.Core
public ApiContext SetCount(int count)
{
HttpContext.Items[nameof(Count)] = count;
HttpContextAccessor.HttpContext.Items[nameof(Count)] = count;
return this;
}
@ -221,7 +221,7 @@ namespace ASC.Api.Core
public void AuthByClaim()
{
var id = HttpContext.User.Claims.FirstOrDefault(r => r.Type == ClaimTypes.Sid);
var id = HttpContextAccessor.HttpContext.User.Claims.FirstOrDefault(r => r.Type == ClaimTypes.Sid);
if (Guid.TryParse(id?.Value, out var userId))
{
_ = SecurityContext.AuthenticateMe(userId);

View File

@ -28,7 +28,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="ARSoft.Tools.NetStandard.DXSdata" Version="1.0.0" />
<PackageReference Include="Autofac" Version="5.1.2" />
<PackageReference Include="Autofac" Version="5.2.0" />
<PackageReference Include="Autofac.Configuration" Version="5.1.0" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="6.0.0" />
<PackageReference Include="Confluent.Kafka" Version="1.3.0" />
@ -42,11 +42,11 @@
<PackageReference Include="log4net" Version="2.0.8" />
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.2" />
<PackageReference Include="Microsoft.AspNetCore.Http.Extensions" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Http.Features" Version="3.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Http.Features" Version="3.1.4" />
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.4" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="3.1.4" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.4" />
<PackageReference Include="Microsoft.Windows.Compatibility" Version="3.1.0" />
<!-- <PackageReference Include="Microsoft.CodeQuality.Analyzers" Version="2.9.4">
<PrivateAssets>all</PrivateAssets>
@ -56,10 +56,10 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> -->
<PackageReference Include="MySql.Data" Version="8.0.19" />
<PackageReference Include="MySql.Data" Version="8.0.20" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="NLog" Version="4.6.8" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.9.0" />
<PackageReference Include="NLog" Version="4.7.1" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.9.2" />
<PackageReference Include="NUnit" Version="3.12.0" />
<PackageReference Include="NVelocity" Version="1.2.0" />
<PackageReference Include="System.Runtime.Loader" Version="4.3.0" />

View File

@ -43,19 +43,19 @@
<None Remove="protos\UserPhotoCacheItem.proto" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="AWSSDK.CloudFront" Version="3.3.101.101" />
<PackageReference Include="AWSSDK.Core" Version="3.3.104.27" />
<PackageReference Include="AWSSDK.S3" Version="3.3.110.25" />
<PackageReference Include="AWSSDK.SimpleEmail" Version="3.3.101.105" />
<PackageReference Include="AWSSDK.CloudFront" Version="3.3.101.146" />
<PackageReference Include="AWSSDK.Core" Version="3.3.106.24" />
<PackageReference Include="AWSSDK.S3" Version="3.3.110.70" />
<PackageReference Include="AWSSDK.SimpleEmail" Version="3.3.101.150" />
<PackageReference Include="Grpc.Tools" Version="2.27.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="MailKit" Version="2.5.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.4" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.1.1" />
<PackageReference Include="System.Text.Json" Version="4.7.1" />
<PackageReference Include="System.Text.Json" Version="4.7.2" />
</ItemGroup>
<ItemGroup>
<Protobuf Include="protos\NotifyMessage.proto" />

View File

@ -36,8 +36,6 @@ using ASC.Common.Web;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
using HttpContext = Microsoft.AspNetCore.Http.HttpContext;
namespace ASC.Core.Common
{
public class CommonLinkUtilitySettings
@ -53,7 +51,7 @@ namespace ASC.Core.Common
private UriBuilder _serverRoot;
private string _vpath;
public HttpContext HttpContext { get; set; }
public IHttpContextAccessor HttpContextAccessor { get; set; }
public BaseCommonLinkUtility(
CoreBaseSettings coreBaseSettings,
@ -85,11 +83,11 @@ namespace ASC.Core.Common
{
try
{
HttpContext = httpContextAccessor?.HttpContext;
HttpContextAccessor = httpContextAccessor;
var uriBuilder = new UriBuilder(Uri.UriSchemeHttp, LOCALHOST);
if (HttpContext?.Request != null)
if (HttpContextAccessor?.HttpContext?.Request != null)
{
var u = HttpContext.Request.GetUrlRewriter();
var u = HttpContextAccessor?.HttpContext.Request.GetUrlRewriter();
uriBuilder = new UriBuilder(u.Scheme, LOCALHOST, u.Port);
}
_serverRoot = uriBuilder;
@ -122,9 +120,9 @@ namespace ASC.Core.Common
if (!string.IsNullOrEmpty(serverRootPath)) return serverRootPath;
UriBuilder result;
// first, take from current request
if (HttpContext?.Request != null)
if (HttpContextAccessor?.HttpContext?.Request != null)
{
var u = HttpContext.Request.GetUrlRewriter();
var u = HttpContextAccessor?.HttpContext?.Request.GetUrlRewriter();
result = new UriBuilder(u.Scheme, u.Host, u.Port);
if (CoreBaseSettings.Standalone && !result.Uri.IsLoopback)

View File

@ -79,7 +79,7 @@ namespace ASC.Core
public void Configure(TenantManager options)
{
options.HttpContext = HttpContextAccessor?.HttpContext;
options.HttpContextAccessor = HttpContextAccessor;
options.CoreBaseSettings = CoreBaseSettings;
options.CoreSettings = CoreSettings;
@ -98,7 +98,7 @@ namespace ASC.Core
private static List<string> thisCompAddresses = new List<string>();
internal HttpContext HttpContext { get; set; }
internal IHttpContextAccessor HttpContextAccessor { get; set; }
internal CoreBaseSettings CoreBaseSettings { get; set; }
internal CoreSettings CoreSettings { get; set; }
@ -146,7 +146,7 @@ namespace ASC.Core
CoreBaseSettings coreBaseSettings,
CoreSettings coreSettings) : this(tenantService, quotaService, tariffService, coreBaseSettings, coreSettings)
{
HttpContext = httpContextAccessor?.HttpContext;
HttpContextAccessor = httpContextAccessor;
}
@ -247,7 +247,7 @@ namespace ASC.Core
if (tenant == null && throwIfNotFound)
{
throw new Exception("Could not resolve current tenant :-(.");
}
}
return tenant;
}
@ -258,7 +258,7 @@ namespace ASC.Core
public Tenant GetCurrentTenant(bool throwIfNotFound)
{
return GetCurrentTenant(throwIfNotFound, HttpContext);
return GetCurrentTenant(throwIfNotFound, HttpContextAccessor.HttpContext);
}
public void SetCurrentTenant(Tenant tenant)
@ -266,9 +266,9 @@ namespace ASC.Core
if (tenant != null)
{
CurrentTenant = tenant;
if (HttpContext != null)
if (HttpContextAccessor?.HttpContext != null)
{
HttpContext.Items[CURRENT_TENANT] = tenant;
HttpContextAccessor.HttpContext.Items[CURRENT_TENANT] = tenant;
}
Thread.CurrentThread.CurrentCulture = tenant.GetCulture();
Thread.CurrentThread.CurrentUICulture = tenant.GetCulture();

View File

@ -13,9 +13,9 @@
<ItemGroup>
<PackageReference Include="CommandLineParser" Version="2.7.82" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.4" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.4" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.4" />
</ItemGroup>

View File

@ -162,7 +162,11 @@ class PureArticleMainButtonContent extends React.Component {
isLatestFile,
indexOfFile
)
);
)
.catch((err) => {
this.props.setProgressVisible(false, 0);
toastr.error(err);
});
};
onFileChange = (e) => {

View File

@ -18,38 +18,10 @@ const DownloadContent = (props) => {
onRowSelect,
getItemIcon,
titleFormat,
getTitleLabel,
type
} = props;
const getTitleLabel = (format) => {
switch (format) {
case 0:
return t("OriginalFormat");
case 1:
return ".txt";
case 2:
return ".docx";
case 3:
return ".odt";
case 4:
return ".ods";
case 5:
return ".odp";
case 6:
return ".pdf";
case 7:
return ".rtf";
case 8:
return ".xlsx";
case 9:
return ".pptx";
case 10:
return t("CustomFormat");
default:
return "";
}
};
const getFormats = item => {
const documentFormats = [

View File

@ -14,7 +14,7 @@ import {
import { ReactSVG } from "react-svg";
import { withTranslation } from "react-i18next";
import i18n from "./i18n";
import { utils } from "asc-web-common";
import { utils, api } from "asc-web-common";
import {
getFileIcon,
getFolderIcon,
@ -92,35 +92,87 @@ class DownloadDialogComponent extends React.Component {
};
}
onDownload = () => {
getTitleLabel = (format) => {
switch (format) {
case 0:
return this.props.t("OriginalFormat");
case 1:
return ".txt";
case 2:
return ".docx";
case 3:
return ".odt";
case 4:
return ".ods";
case 5:
return ".odp";
case 6:
return ".pdf";
case 7:
return ".rtf";
case 8:
return ".xlsx";
case 9:
return ".pptx";
case 10:
return this.props.t("CustomFormat");
default:
return "";
}
};
getDownloadItems = () => {
const { documents, spreadsheets, presentations, other } = this.state;
const folderIds = [];
const fileIds = [];
const items = [];
const folders = [];
for (let item of documents) {
if (item.checked) {
fileIds.push(item.id);
const format = item.format === 0 ? item.fileExst : this.getTitleLabel(item.format);
items.push({key: item.id, value: format});
}
}
for (let item of spreadsheets) {
if (item.checked) {
fileIds.push(item.id);
const format = item.format === 0 ? item.fileExst : this.getTitleLabel(item.format);
items.push({key: item.id, value: format});
}
}
for (let item of presentations) {
if (item.checked) {
fileIds.push(item.id);
const format = item.format === 0 ? item.fileExst : this.getTitleLabel(item.format);
items.push({key: item.id, value: format});
}
}
for (let item of other) {
if (item.checked) {
folderIds.push(item.id);
if(item.fileExst) {
const format = item.format === 0 ? item.fileExst : this.getTitleLabel(item.format);
items.push({key: item.id, value: format});
} else {
folders.push(item.id);
}
}
}
toastr.success("onDownload click");
return [items, folders];
}
onDownload = () => {
const { startUploadSession, closeUploadSession, onDownloadProgress, onClose } = this.props;
const downloadItems = this.getDownloadItems();
const fileConvertIds = downloadItems[0];
const folderIds = downloadItems[1];
startUploadSession();
api.files
.downloadFormatFiles(fileConvertIds, folderIds)
.then(() => { onClose(); onDownloadProgress(false); })
.catch(err => closeUploadSession(err));
};
getItemIcon = (item) => {
@ -411,6 +463,7 @@ class DownloadDialogComponent extends React.Component {
onSelectFormat={this.onSelectFormat}
onRowSelect={this.onRowSelect}
getItemIcon={this.getItemIcon}
getTitleLabel={this.getTitleLabel}
titleFormat={documentsTitleFormat}
type="document"
/>
@ -426,6 +479,7 @@ class DownloadDialogComponent extends React.Component {
onSelectFormat={this.onSelectFormat}
onRowSelect={this.onRowSelect}
getItemIcon={this.getItemIcon}
getTitleLabel={this.getTitleLabel}
titleFormat={spreadsheetsTitleFormat}
type="spreadsheet"
/>
@ -441,6 +495,7 @@ class DownloadDialogComponent extends React.Component {
onSelectFormat={this.onSelectFormat}
onRowSelect={this.onRowSelect}
getItemIcon={this.getItemIcon}
getTitleLabel={this.getTitleLabel}
titleFormat={presentationsTitleFormat}
type="presentation"
/>

View File

@ -84,7 +84,13 @@ class SectionBodyContent extends React.Component {
} */
shouldComponentUpdate(nextProps, nextStates) {
return !isEqual(this.props, nextProps) || !isEqual(this.state.mediaViewerVisible, nextStates.mediaViewerVisible);
if(this.state.showSharingPanel !== nextState.showSharingPanel) {
return true;
}
if(!isEqual(this.props, nextProps) || !isEqual(this.state.mediaViewerVisible, nextStates.mediaViewerVisible)) {
return true;
}
return false;
}
onClickRename = (item) => {
@ -194,7 +200,7 @@ class SectionBodyContent extends React.Component {
key: "sharing-settings",
label: "Sharing settings",
onClick: this.onClickShare.bind(this, item),
disabled: item.access !== 1
disabled: item.access !== 1 && item.access !== 0
},
isFile
? {

View File

@ -1,7 +1,7 @@
import React from "react";
import styled, { css } from "styled-components";
import { withRouter } from "react-router";
import { constants, Headline, store } from "asc-web-common";
import { constants, Headline, store, api } from "asc-web-common";
import { connect } from "react-redux";
import { withTranslation } from "react-i18next";
import {
@ -166,7 +166,56 @@ class SectionHeaderContent extends React.Component {
copyAction = () => toastr.info("copyAction click");
downloadAction = () => toastr.info("downloadAction click");
startUploadSession = () => {
const { onLoading, t, setProgressLabel, setProgressVisible} = this.props;
onLoading(true);
setProgressLabel(t("ArchivingData"));
setProgressVisible(true);
}
closeUploadSession = (err) => {
const timeout = err ? 0 : null;
err && toastr.error(err);
this.props.onLoading(false);
this.props.setProgressVisible(false, timeout);
}
loop = url => {
api.files.getProgress().then(res => {
if(!url) {
this.props.setProgressValue(res[0].progress);
setTimeout(() => this.loop(res[0].url), 1000);
} else {
this.closeUploadSession();
return window.open(url, "_blank");
}
}).catch((err) => this.closeUploadSession(err));
}
downloadAction = () => {
const fileIds = [];
const folderIds = [];
const items = [];
for(let item of this.props.selection) {
if(item.fileExst) {
fileIds.push(item.id);
items.push({id: item.id, fileExst: item.fileExst});
} else {
folderIds.push(item.id);
items.push({id: item.id});
}
}
this.startUploadSession();
api.files
.downloadFiles(fileIds, folderIds)
.then(res => {
this.loop(res[0].url);
})
.catch((err) => this.closeUploadSession(err));
}
downloadAsAction = () => this.setState({ showDownloadDialog: !this.state.showDownloadDialog });
@ -441,6 +490,9 @@ class SectionHeaderContent extends React.Component {
<DownloadDialog
visible={showDownloadDialog}
onClose={this.downloadAsAction}
startUploadSession={this.startUploadSession}
closeUploadSession={this.closeUploadSession}
onDownloadProgress={this.loop}
/>
)}
</StyledContainer>

View File

@ -100,9 +100,10 @@ class PureHome extends React.Component {
this.setState({ isLoading: status });
};
setProgressVisible = visible => {
setProgressVisible = (visible, timeout) => {
const newTimeout = timeout ? timeout : 10000;
if(visible) {this.setState({ showProgressBar: visible })}
else { setTimeout(() => this.setState({ showProgressBar: visible, progressBarValue: 0 }), 10000)};
else { setTimeout(() => this.setState({ showProgressBar: visible, progressBarValue: 0 }), newTimeout)};
};
setProgressValue = value => this.setState({ progressBarValue: value });
setProgressLabel = label => this.setState({ progressBarLabel: label });
@ -171,7 +172,6 @@ class PureHome extends React.Component {
onLoading={this.onLoading}
setProgressVisible={this.setProgressVisible}
setProgressValue={this.setProgressValue}
setProgressContent={this.setProgressContent}
setProgressLabel={this.setProgressLabel}
/>}
articleBodyContent={<ArticleBodyContent onLoading={this.onLoading} isLoading={isLoading} />}
@ -184,6 +184,9 @@ class PureHome extends React.Component {
onSelect={this.onSectionHeaderContentSelect}
onClose={this.onClose}
onLoading={this.onLoading}
setProgressVisible={this.setProgressVisible}
setProgressValue={this.setProgressValue}
setProgressLabel={this.setProgressLabel}
/>
}
sectionFilterContent={<SectionFilterContent onLoading={this.onLoading} />}

View File

@ -71,5 +71,6 @@
"Filter": "Filter",
"OverwriteSetting": "Overwrite existing file with the same name",
"UploadOriginalFormatSetting": "Upload the documents in original format as well",
"HideWindowSetting": "Show this window minimized"
"HideWindowSetting": "Show this window minimized",
"ArchivingData": "Archiving data"
}

View File

@ -71,5 +71,6 @@
"Filter": "Фильтр",
"OverwriteSetting": "Перезаписывать существующий файл с таким же именем",
"UploadOriginalFormatSetting": "Сохранять также копию файла в исходном формате",
"HideWindowSetting": "Показывать это окно минимизированным"
"HideWindowSetting": "Показывать это окно минимизированным",
"ArchivingData": "Архивирование данных"
}

View File

@ -20,11 +20,7 @@ import { withRouter } from "react-router";
import { withTranslation } from "react-i18next";
import { utils as commonUtils, constants, api } from "asc-web-common";
import i18n from "./i18n";
import {
setSharedFolders,
setSharedFiles,
getShareUsers
} from "../../../store/files/actions";
import { getShareUsers, setShareFiles } from "../../../store/files/actions";
import { getAccessOption } from '../../../store/files/selectors';
import {
StyledSharingPanel,
@ -80,43 +76,54 @@ class SharingPanelComponent extends React.Component {
//onKeyClick = () => console.log("onKeyClick");
onSaveClick = () => {
toastr.success("onSaveClick");
const { baseShareData, isNotifyUsers, message } = this.state;
const { shareDataItems, selectedItems, onClose } = this.props;
const {
baseShareData,
isNotifyUsers,
message,
shareDataItems,
} = this.state;
const { selectedItems, onClose } = this.props;
const folderIds = [];
const fileIds = [];
const shareTo = [];
const access = [];
const share = [];
for (let item of shareDataItems) {
const baseItem = baseShareData.find((x) => x.id === item.id);
if (
(baseItem && baseItem.rights.rights !== item.rights.rights) ||
!baseItem
) {
shareTo.push(item.id);
access.push(item.rights.accessNumber);
share.push({ shareTo: item.id, access: item.rights.accessNumber });
}
}
const notify = isNotifyUsers;
for (let item of selectedItems) {
if (item.fileExst) {
fileIds.push(item.id);
for (let item of baseShareData) {
const baseItem = shareDataItems.find((x) => x.id === item.id);
if (!baseItem) {
share.push({ shareTo: item.id, access: 0});
}
}
if (!selectedItems.length) {
if (selectedItems.fileExst) {
fileIds.push(selectedItems.id);
} else {
folderIds.push(item.id);
folderIds.push(selectedItems.id);
}
} else {
for (let item of selectedItems) {
if (item.fileExst) {
fileIds.push(item.id);
} else {
folderIds.push(item.id);
}
}
}
/*folderIds.length > 0 &&
setSharedFolders(folderIds, shareTo, access, notify, message);
fileIds.length > 0 &&
setSharedFiles(fileIds, shareTo, access, notify, message);*/
onClose();
setShareFiles(folderIds, fileIds, share, isNotifyUsers, message)
.catch((err) => toastr.error(err))
.finally(() => onClose());
};
onFullAccessClick = () => {

View File

@ -306,20 +306,17 @@ export function deleteFolder(folderId, deleteAfter, immediately) {
}
}
export function setSharedFolders(folderIds, shareTo, access, notify, sharingMessage) {
const requests = folderIds.map((id) =>
files.setShareFolder(id, shareTo, access, notify, sharingMessage)
export function setShareFiles(folderIds, fileIds, share, notify, sharingMessage) {
const foldersRequests = folderIds.map((id) =>
files.setShareFolder(id, share, notify, sharingMessage)
);
return axios.all(requests).then((res) => res);
}
export function setSharedFiles(fileId, shareTo, access, notify, sharingMessage) {
const requests = fileId.map((id) =>
files.setShareFiles(id, shareTo, access, notify, sharingMessage)
const filesRequests = fileIds.map((id) =>
files.setShareFiles(id, share, notify, sharingMessage)
);
return axios.all(requests).then((res) => res);
const requests = [...foldersRequests, ...filesRequests];
return axios.all(requests);
}
export function getShareUsers(folderIds, fileIds) {

View File

@ -28,7 +28,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Box.V2.Core" Version="3.22.0" />
<PackageReference Include="DocuSign.eSign.dll" Version="4.1.1" />
<PackageReference Include="DocuSign.eSign.dll" Version="4.3.0" />
<PackageReference Include="DotNetZip" Version="1.13.7" />
<PackageReference Include="Dropbox.Api" Version="4.9.4" />
<PackageReference Include="Google.Apis.Drive.v3" Version="1.44.1.1876" />
@ -39,8 +39,8 @@
<PackageReference Include="Microsoft.AspNet.WebApi.Core" Version="5.2.7" />
<PackageReference Include="Microsoft.OneDriveSDK" Version="2.0.7" />
<PackageReference Include="Microsoft.SharePoint.Client" Version="14.0.4762.1000" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.1" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.7.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.2" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.7.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\common\ASC.Api.Core\ASC.Api.Core.csproj" />

View File

@ -50,6 +50,7 @@ using ASC.Web.Studio.Core;
using ASC.Web.Studio.UserControls.Statistics;
using ASC.Web.Studio.Utility;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
namespace ASC.Files.Core.Data
@ -119,14 +120,14 @@ namespace ASC.Files.Core.Data
public File<int> GetFile(int fileId)
{
var query = GetFileQuery(r => r.Id == fileId && r.CurrentVersion);
return FromQueryWithShared(query).SingleOrDefault();
var query = GetFileQuery(r => r.Id == fileId && r.CurrentVersion).AsNoTracking();
return ToFile(FromQueryWithShared(query).SingleOrDefault());
}
public File<int> GetFile(int fileId, int fileVersion)
{
var query = GetFileQuery(r => r.Id == fileId && r.Version == fileVersion);
return FromQueryWithShared(query).SingleOrDefault();
var query = GetFileQuery(r => r.Id == fileId && r.Version == fileVersion).AsNoTracking();
return ToFile(FromQueryWithShared(query).SingleOrDefault());
}
public File<int> GetFile(int parentId, string title)
@ -134,14 +135,16 @@ namespace ASC.Files.Core.Data
if (string.IsNullOrEmpty(title)) throw new ArgumentNullException(title);
var query = GetFileQuery(r => r.Title == title && r.CurrentVersion == true && r.FolderId == parentId)
.AsNoTracking()
.OrderBy(r => r.CreateOn);
return FromQueryWithShared(query).FirstOrDefault();
return ToFile(FromQueryWithShared(query).FirstOrDefault());
}
public File<int> GetFileStable(int fileId, int fileVersion = -1)
{
var query = GetFileQuery(r => r.Id == fileId && r.Forcesave == ForcesaveType.None);
var query = GetFileQuery(r => r.Id == fileId && r.Forcesave == ForcesaveType.None)
.AsNoTracking();
if (fileVersion >= 0)
{
@ -150,30 +153,31 @@ namespace ASC.Files.Core.Data
query = query.OrderByDescending(r => r.Version);
return FromQueryWithShared(query).SingleOrDefault();
return ToFile(FromQueryWithShared(query).SingleOrDefault());
}
public List<File<int>> GetFileHistory(int fileId)
{
var query = GetFileQuery(r => r.Id == fileId).OrderByDescending(r => r.Version);
var query = GetFileQuery(r => r.Id == fileId).OrderByDescending(r => r.Version).AsNoTracking();
return FromQueryWithShared(query);
return FromQueryWithShared(query).Select(ToFile).ToList();
}
public List<File<int>> GetFiles(int[] fileIds)
{
if (fileIds == null || fileIds.Length == 0) return new List<File<int>>();
var query = GetFileQuery(r => fileIds.Any(a => a == r.Id) && r.CurrentVersion);
var query = GetFileQuery(r => fileIds.Any(a => a == r.Id) && r.CurrentVersion)
.AsNoTracking();
return FromQueryWithShared(query);
return FromQueryWithShared(query).Select(ToFile).ToList();
}
public List<File<int>> GetFilesForShare(int[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
{
if (fileIds == null || fileIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List<File<int>>();
var query = GetFileQuery(r => fileIds.Any(a => a == r.Id) && r.CurrentVersion);
var query = GetFileQuery(r => fileIds.Any(a => a == r.Id) && r.CurrentVersion).AsNoTracking();
if (!string.IsNullOrEmpty(searchText))
{
@ -220,15 +224,18 @@ namespace ASC.Files.Core.Data
break;
}
return FromQuery(query);
return FromQuery(query).Select(ToFile).ToList();
}
public List<int> GetFiles(int parentId)
{
var query = GetFileQuery(r => r.FolderId == parentId && r.CurrentVersion).Select(r => r.Id);
var query = GetFileQuery(r => r.FolderId == parentId && r.CurrentVersion)
.AsNoTracking()
.Select(r => r.Id);
return Query(FilesDbContext.Files)
.AsNoTracking()
.Where(r => r.FolderId == parentId && r.CurrentVersion)
.Select(r => r.Id)
.ToList();
@ -240,12 +247,13 @@ namespace ASC.Files.Core.Data
if (orderBy == null) orderBy = new OrderBy(SortedByType.DateAndTime, false);
var q = GetFileQuery(r => r.FolderId == parentId && r.CurrentVersion);
var q = GetFileQuery(r => r.FolderId == parentId && r.CurrentVersion).AsNoTracking();
if (withSubfolders)
{
q = GetFileQuery(r => r.CurrentVersion)
.AsNoTracking()
.Join(FilesDbContext.Tree, r => r.FolderId, a => a.FolderId, (file, tree) => new { file, tree })
.Where(r => r.tree.ParentId == parentId)
.Select(r => r.file);
@ -320,7 +328,7 @@ namespace ASC.Files.Core.Data
break;
}
return FromQueryWithShared(q);
return FromQueryWithShared(q).Select(ToFile).ToList();
}
public Stream GetFileStream(File<int> file, long offset)
@ -394,7 +402,6 @@ namespace ASC.Files.Core.Data
if (file.CreateBy == default) file.CreateBy = AuthContext.CurrentAccount.ID;
if (file.CreateOn == default) file.CreateOn = TenantUtil.DateTimeNow();
var fileIdString = file.ID.ToString();
var toUpdate = FilesDbContext.Files
.Where(r => r.Id == file.ID && r.CurrentVersion && r.TenantId == TenantID)
.FirstOrDefault();
@ -694,6 +701,7 @@ namespace ASC.Files.Core.Data
public bool IsExist(string title, int folderId)
{
return Query(FilesDbContext.Files)
.AsNoTracking()
.Where(r => r.Title == title)
.Where(r => r.FolderId == folderId)
.Where(r => r.CurrentVersion)
@ -870,6 +878,7 @@ namespace ASC.Files.Core.Data
public void CompleteVersion(int fileId, int fileVersion)
{
var toUpdate = Query(FilesDbContext.Files)
.AsNoTracking()
.Where(r => r.Id == fileId)
.Where(r => r.Version >= fileVersion);
@ -886,6 +895,7 @@ namespace ASC.Files.Core.Data
using var tx = FilesDbContext.Database.BeginTransaction();
var versionGroup = Query(FilesDbContext.Files)
.AsNoTracking()
.Where(r => r.Id == fileId)
.Where(r => r.Version == fileVersion)
.Select(r => r.VersionGroup)
@ -1017,7 +1027,6 @@ namespace ASC.Files.Core.Data
public void ReassignFiles(int[] fileIds, Guid newOwnerId)
{
var fileIdsStrings = fileIds.Select(r => r.ToString()).ToList();
var toUpdate = Query(FilesDbContext.Files)
.Where(r => r.CurrentVersion)
.Where(r => fileIds.Any(a => a == r.Id));
@ -1034,8 +1043,8 @@ namespace ASC.Files.Core.Data
{
if (parentIds == null || parentIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List<File<int>>();
var parentIdsStrings = parentIds.Select(r => r.ToString()).ToList();
var q = GetFileQuery(r => r.CurrentVersion)
.AsNoTracking()
.Join(FilesDbContext.Tree, a => a.FolderId, t => t.FolderId, (file, tree) => new { file, tree })
.Where(r => parentIds.Any(a => a == r.tree.ParentId))
.Select(r => r.file);
@ -1085,15 +1094,15 @@ namespace ASC.Files.Core.Data
break;
}
return FromQueryWithShared(q);
return FromQueryWithShared(q).Select(ToFile).ToList();
}
public IEnumerable<File<int>> Search(string searchText, bool bunch)
{
if (FactoryIndexer.TrySelectIds(s => s.MatchAll(searchText), out var ids))
{
var query = GetFileQuery(r => r.CurrentVersion && ids.Any(i => i == r.Id));
return FromQueryWithShared(query)
var query = GetFileQuery(r => r.CurrentVersion && ids.Any(i => i == r.Id)).AsNoTracking();
return FromQueryWithShared(query).Select(ToFile)
.Where(
f =>
bunch
@ -1103,8 +1112,8 @@ namespace ASC.Files.Core.Data
}
else
{
var query = BuildSearch(GetFileQuery(r => r.CurrentVersion), searchText, SearhTypeEnum.Any);
return FromQueryWithShared(query)
var query = BuildSearch(GetFileQuery(r => r.CurrentVersion).AsNoTracking(), searchText, SearhTypeEnum.Any);
return FromQueryWithShared(query).Select(ToFile)
.Where(f =>
bunch
? f.RootFolderType == FolderType.BUNCH
@ -1268,7 +1277,7 @@ namespace ASC.Files.Core.Data
};
}
protected List<File<int>> FromQueryWithShared(IQueryable<DbFile> dbFiles)
protected IQueryable<DbFileQuery> FromQueryWithShared(IQueryable<DbFile> dbFiles)
{
return dbFiles
.Select(r => new DbFileQuery
@ -1287,13 +1296,10 @@ namespace ASC.Files.Core.Data
.Where(x => x.EntryType == FileEntryType.File)
.Where(x => x.EntryId == r.Id.ToString())
.Any()
})
.ToList()
.Select(ToFile)
.ToList();
});
}
protected List<File<int>> FromQuery(IQueryable<DbFile> dbFiles)
protected IQueryable<DbFileQuery> FromQuery(IQueryable<DbFile> dbFiles)
{
return dbFiles
.Select(r => new DbFileQuery
@ -1307,15 +1313,13 @@ namespace ASC.Files.Core.Data
.Select(r => r.folder)
.FirstOrDefault(),
shared = true
})
.ToList()
.Select(ToFile)
.ToList();
});
}
public File<int> ToFile(DbFileQuery r)
{
var file = ServiceProvider.GetService<File<int>>();
if (r == null) return null;
file.ID = r.file.Id;
file.Title = r.file.Title;
file.FolderID = r.file.FolderId;

View File

@ -45,6 +45,7 @@ using ASC.Web.Studio.Core;
using ASC.Web.Studio.UserControls.Statistics;
using ASC.Web.Studio.Utility;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.DependencyInjection;
@ -105,49 +106,49 @@ namespace ASC.Files.Core.Data
public Folder<int> GetFolder(int folderId)
{
var query = GetFolderQuery(r => r.Id == folderId);
return FromQueryWithShared(query).SingleOrDefault();
var query = GetFolderQuery(r => r.Id == folderId).AsNoTracking();
return ToFolder(FromQueryWithShared(query).SingleOrDefault());
}
public Folder<int> GetFolder(string title, int parentId)
{
if (string.IsNullOrEmpty(title)) throw new ArgumentNullException(title);
var query = GetFolderQuery(r => r.Title == title && r.ParentId == parentId)
var query = GetFolderQuery(r => r.Title == title && r.ParentId == parentId).AsNoTracking()
.OrderBy(r => r.CreateOn);
return FromQueryWithShared(query).FirstOrDefault();
return ToFolder(FromQueryWithShared(query).FirstOrDefault());
}
public Folder<int> GetRootFolder(int folderId)
{
var id = FilesDbContext.Tree
.AsNoTracking()
.Where(r => r.FolderId == folderId)
.OrderByDescending(r => r.Level)
.Select(r => r.ParentId)
.FirstOrDefault();
var query = GetFolderQuery(r => r.Id == id);
var query = GetFolderQuery(r => r.Id == id).AsNoTracking();
return FromQueryWithShared(query).SingleOrDefault();
return ToFolder(FromQueryWithShared(query).SingleOrDefault());
}
public Folder<int> GetRootFolderByFile(int fileId)
{
var fileIdString = fileId.ToString();
var subq = Query(FilesDbContext.Files)
var subq = Query(FilesDbContext.Files).AsNoTracking()
.Where(r => r.Id == fileId && r.CurrentVersion)
.Select(r => r.FolderId)
.Distinct();
var q = FilesDbContext.Tree
var q = FilesDbContext.Tree.AsNoTracking()
.Where(r => subq.Any(q => q == r.FolderId))
.OrderByDescending(r => r.Level)
.Select(r => r.ParentId)
.FirstOrDefault();
var query = GetFolderQuery(r => r.Id == q);
return FromQueryWithShared(query).SingleOrDefault();
var query = GetFolderQuery(r => r.Id == q).AsNoTracking();
return ToFolder(FromQueryWithShared(query).SingleOrDefault());
}
public List<Folder<int>> GetFolders(int parentId)
@ -165,11 +166,11 @@ namespace ASC.Files.Core.Data
if (orderBy == null) orderBy = new OrderBy(SortedByType.DateAndTime, false);
var q = GetFolderQuery(r => r.ParentId == parentId);
var q = GetFolderQuery(r => r.ParentId == parentId).AsNoTracking();
if (withSubfolders)
{
q = GetFolderQuery()
q = GetFolderQuery().AsNoTracking()
.Join(FilesDbContext.Tree, r => r.Id, a => a.FolderId, (folder, tree) => new { folder, tree })
.Where(r => r.tree.ParentId == parentId && r.tree.Level != 0)
.Select(r => r.folder);
@ -219,7 +220,7 @@ namespace ASC.Files.Core.Data
}
}
return FromQueryWithShared(q);
return FromQueryWithShared(q).Select(ToFolder).ToList();
}
public List<Folder<int>> GetFolders(int[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true)
@ -230,11 +231,12 @@ namespace ASC.Files.Core.Data
|| filterType == FilterType.ArchiveOnly || filterType == FilterType.MediaOnly)
return new List<Folder<int>>();
var q = GetFolderQuery(r => folderIds.Any(q => q == r.Id));
var q = GetFolderQuery(r => folderIds.Any(q => q == r.Id)).AsNoTracking();
if (searchSubfolders)
{
q = GetFolderQuery()
.AsNoTracking()
.Join(FilesDbContext.Tree, r => r.Id, a => a.FolderId, (folder, tree) => new { folder, tree })
.Where(r => folderIds.Any(q => q == r.folder.ParentId))
.Select(r => r.folder);
@ -270,18 +272,19 @@ namespace ASC.Files.Core.Data
}
}
return checkShare ? FromQueryWithShared(q) : FromQuery(q);
return (checkShare ? FromQueryWithShared(q) : FromQuery(q)).Select(ToFolder).ToList();
}
public List<Folder<int>> GetParentFolders(int folderId)
{
var q = GetFolderQuery()
.AsNoTracking()
.Join(FilesDbContext.Tree, r => r.Id, a => a.ParentId, (folder, tree) => new { folder, tree })
.Where(r => r.tree.FolderId == folderId)
.OrderByDescending(r => r.tree.Level)
.Select(r => r.folder);
return FromQueryWithShared(q);
return FromQueryWithShared(q).Select(ToFolder).ToList();
}
public int SaveFolder(Folder<int> folder)
@ -388,7 +391,7 @@ namespace ASC.Files.Core.Data
private bool IsExist(int folderId)
{
return Query(FilesDbContext.Folders)
return Query(FilesDbContext.Folders).AsNoTracking()
.Where(r => r.Id == folderId)
.Any();
}
@ -624,6 +627,7 @@ namespace ASC.Files.Core.Data
foreach (var folderId in folderIds)
{
var exists = FilesDbContext.Tree
.AsNoTracking()
.Where(r => r.ParentId == folderId)
.Where(r => r.FolderId == to)
.Any();
@ -634,11 +638,13 @@ namespace ASC.Files.Core.Data
}
var title = Query(FilesDbContext.Folders)
.AsNoTracking()
.Where(r => r.Id == folderId)
.Select(r => r.Title.ToLower())
.FirstOrDefault();
var conflict = Query(FilesDbContext.Folders)
.AsNoTracking()
.Where(r => r.Title.ToLower() == title)
.Where(r => r.ParentId == to)
.Select(r => r.Id)
@ -647,6 +653,7 @@ namespace ASC.Files.Core.Data
if (conflict != 0)
{
FilesDbContext.Files
.AsNoTracking()
.Join(FilesDbContext.Files, f1 => f1.Title.ToLower(), f2 => f2.Title.ToLower(), (f1, f2) => new { f1, f2 })
.Where(r => r.f1.TenantId == TenantID && r.f1.CurrentVersion && r.f1.FolderId == folderId)
.Where(r => r.f2.TenantId == TenantID && r.f2.CurrentVersion && r.f2.FolderId == conflict)
@ -655,6 +662,7 @@ namespace ASC.Files.Core.Data
.ForEach(r => result[r.Id] = r.Title);
var childs = Query(FilesDbContext.Folders)
.AsNoTracking()
.Where(r => r.ParentId == folderId)
.Select(r => r.Id);
@ -694,8 +702,8 @@ namespace ASC.Files.Core.Data
private int GetFoldersCount(int parentId)
{
var parentIdString = parentId.ToString();
var count = FilesDbContext.Tree
.AsNoTracking()
.Where(r => r.ParentId == parentId)
.Where(r => r.Level > 0)
.Count();
@ -706,6 +714,7 @@ namespace ASC.Files.Core.Data
private int GetFilesCount(int folderId)
{
var count = Query(FilesDbContext.Files)
.AsNoTracking()
.Distinct()
.Where(r => FilesDbContext.Tree.Where(r => r.ParentId == folderId).Select(r => r.FolderId).Any(b => b == r.FolderId))
.Count();
@ -798,11 +807,11 @@ namespace ASC.Files.Core.Data
if (FactoryIndexer.TrySelectIds(s => s.MatchAll(text), out var ids))
{
var q1 = GetFolderQuery(r => ids.Any(a => r.Id == a));
return FromQueryWithShared(q1);
return FromQueryWithShared(q1).Select(ToFolder).ToList();
}
var q = BuildSearch(GetFolderQuery(), text, SearhTypeEnum.Any);
return FromQueryWithShared(q);
return FromQueryWithShared(q).Select(ToFolder).ToList();
}
public IEnumerable<int> GetFolderIDs(string module, string bunch, IEnumerable<string> data, bool createIfNotExists)
@ -813,6 +822,7 @@ namespace ASC.Files.Core.Data
var keys = data.Select(id => string.Format("{0}/{1}/{2}", module, bunch, id)).ToArray();
var folderIdsDictionary = Query(FilesDbContext.BunchObjects)
.AsNoTracking()
.Where(r => keys.Length > 1 ? keys.Any(a => a == r.RightNode) : r.RightNode == keys[0])
.ToDictionary(r => r.RightNode, r => r.LeftNode);
@ -977,7 +987,7 @@ namespace ASC.Files.Core.Data
return q;
}
protected List<Folder<int>> FromQueryWithShared(IQueryable<DbFolder> dbFiles)
protected IQueryable<DbFolderQuery> FromQueryWithShared(IQueryable<DbFolder> dbFiles)
{
return dbFiles
.Select(r => new DbFolderQuery
@ -995,13 +1005,10 @@ namespace ASC.Files.Core.Data
.Where(r => r.EntryType == FileEntryType.Folder)
.Where(x => x.EntryId == r.Id.ToString())
.Any()
})
.ToList()
.Select(ToFolder)
.ToList();
});
}
protected List<Folder<int>> FromQuery(IQueryable<DbFolder> dbFiles)
protected IQueryable<DbFolderQuery> FromQuery(IQueryable<DbFolder> dbFiles)
{
return dbFiles
.Select(r => new DbFolderQuery
@ -1016,14 +1023,12 @@ namespace ASC.Files.Core.Data
.Take(1)
.FirstOrDefault(),
shared = true
})
.ToList()
.Select(ToFolder)
.ToList();
});
}
public Folder<int> ToFolder(DbFolderQuery r)
{
if (r == null) return null;
var result = ServiceProvider.GetService<Folder<int>>();
result.ID = r.folder.Id;
result.ParentFolderID = r.folder.ParentId;

View File

@ -267,7 +267,7 @@ namespace ASC.Files.Helpers
request.ContentLength = 0;
// hack for uploader.onlyoffice.com in api requests
var rewriterHeader = ApiContext.HttpContext.Request.Headers[HttpRequestExtensions.UrlRewriterHeader];
var rewriterHeader = ApiContext.HttpContextAccessor.HttpContext.Request.Headers[HttpRequestExtensions.UrlRewriterHeader];
if (!string.IsNullOrEmpty(rewriterHeader))
{
request.Headers[HttpRequestExtensions.UrlRewriterHeader] = rewriterHeader;

View File

@ -179,14 +179,10 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
var finished1 = thirdpartyTask.GetProperty<string>(FINISHED);
var finished2 = daoTask.GetProperty<string>(FINISHED);
if (!string.IsNullOrEmpty(finished1))
if (!string.IsNullOrEmpty(finished1) && !string.IsNullOrEmpty(finished2))
{
TaskInfo.SetProperty(FINISHED, finished1);
}
else if (!string.IsNullOrEmpty(finished2))
{
TaskInfo.SetProperty(FINISHED, finished2);
}
successProcessed = thirdpartyTask.GetProperty<int>(PROCESSED) + daoTask.GetProperty<int>(PROCESSED);
@ -358,9 +354,9 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
protected void ProgressStep(TId folderId = default, TId fileId = default)
{
if (folderId == null && fileId == null
|| folderId != null && Folders.Contains(folderId)
|| fileId != null && Files.Contains(fileId))
if (folderId.Equals(default(TId)) && fileId.Equals(default(TId))
|| !folderId.Equals(default(TId)) && Folders.Contains(folderId)
|| !fileId.Equals(default(TId)) && Files.Contains(fileId))
{
processed++;
PublishTaskInfo();

View File

@ -751,10 +751,10 @@ namespace ASC.Employee.Core.Controllers
[Create("{userid}/photo")]
public People.Models.FileUploadResult UploadMemberPhoto(string userid, IFormCollection model)
public FileUploadResult UploadMemberPhoto(string userid, IFormCollection model)
{
var result = new People.Models.FileUploadResult();
bool autosave = Boolean.Parse(model["Autosave"]);
var autosave = bool.Parse(model["Autosave"]);
try
{
@ -1423,7 +1423,7 @@ namespace ASC.Employee.Core.Controllers
if (!files.StartsWith("http://") && !files.StartsWith("https://"))
{
files = new Uri(ApiContext.HttpContext.Request.GetDisplayUrl()).GetLeftPart(UriPartial.Scheme | UriPartial.Authority) + "/" + files.TrimStart('/');
files = new Uri(ApiContext.HttpContextAccessor.HttpContext.Request.GetDisplayUrl()).GetLeftPart(UriPartial.Scheme | UriPartial.Authority) + "/" + files.TrimStart('/');
}
var request = WebRequest.Create(files);
using var response = (HttpWebResponse)request.GetResponse();

View File

@ -18,7 +18,7 @@
<DebugType>none</DebugType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="3.1.4" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
</ItemGroup>
<ItemGroup>

View File

@ -24,8 +24,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.2" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.4" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.2" />
</ItemGroup>
<ItemGroup>

View File

@ -303,14 +303,12 @@ export function getShareFiles(fileId) {
});
}
export function setShareFolder(folderId, shareTo, access, notify, sharingMessage) {
const share = [shareTo, access];
export function setShareFolder(folderId, share, notify, sharingMessage) {
const data = { share, notify, sharingMessage };
return request({ method: "put", url: `/files/folder/${folderId}/share`, data });
}
export function setShareFiles(fileId, shareTo, access, notify, sharingMessage) {
const share = [shareTo, access];
export function setShareFiles(fileId, share, notify, sharingMessage) {
const data = { share, notify, sharingMessage };
return request({ method: "put", url: `/files/file/${fileId}/share`, data });
}
@ -323,3 +321,17 @@ export function startUploadSession(folderId, fileName, fileSize, relativePath) {
export function uploadFile(url, data) {
return axios.post(url, data);
}
export function downloadFiles(fileIds, folderIds) {
const data = { fileIds, folderIds };
return request({ method: "put", url: "/files/fileops/bulkdownload", data });
}
export function downloadFormatFiles(fileConvertIds, folderIds) {
const data = { folderIds, fileConvertIds };
return request({ method: "put", url: "/files/fileops/bulkdownload", data });
}
export function getProgress() {
return request({ method: "get", url: "/files/fileops" });
}

View File

@ -211,7 +211,7 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="System.Resources.Extensions" Version="4.7.0" />
<PackageReference Include="System.Resources.Extensions" Version="4.7.1" />
</ItemGroup>
</Project>

View File

@ -215,7 +215,7 @@ namespace ASC.Web.Studio.Utility
{
var productID = Guid.Empty;
if (HttpContext != null)
if (HttpContextAccessor?.HttpContext != null)
{
GetLocationByRequest(out var product, out _);
if (product != null) productID = product.ID;
@ -228,9 +228,9 @@ namespace ASC.Web.Studio.Utility
{
var addonID = Guid.Empty;
if (HttpContext != null)
if (HttpContextAccessor?.HttpContext != null)
{
var addonName = GetAddonNameFromUrl(HttpContext.Request.Url().AbsoluteUri);
var addonName = GetAddonNameFromUrl(HttpContextAccessor.HttpContext.Request.Url().AbsoluteUri);
switch (addonName)
{
@ -254,9 +254,9 @@ namespace ASC.Web.Studio.Utility
public void GetLocationByRequest(out IProduct currentProduct, out IModule currentModule)
{
var currentURL = string.Empty;
if (HttpContext?.Request != null)
if (HttpContextAccessor?.HttpContext?.Request != null)
{
currentURL = HttpContext.Request.GetUrlRewriter().AbsoluteUri;
currentURL = HttpContextAccessor.HttpContext.Request.GetUrlRewriter().AbsoluteUri;
//TODO ?
// http://[hostname]/[virtualpath]/[AjaxPro.Utility.HandlerPath]/[assembly],[classname].ashx

View File

@ -15,7 +15,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.4" />
</ItemGroup>
<ItemGroup>