diff --git a/common/ASC.Api.Core/Core/Validate.cs b/common/ASC.Api.Core/Core/Validate.cs index bfbbb48b93..f7d8a4b4ba 100644 --- a/common/ASC.Api.Core/Core/Validate.cs +++ b/common/ASC.Api.Core/Core/Validate.cs @@ -25,6 +25,7 @@ using System; +using System.Collections.Generic; using ASC.Common.Web; @@ -58,8 +59,8 @@ namespace ASC.Api.Utils } public static T? NullIfDefault(this T item) where T : struct - { - return item.Equals(default(T)) ? default(T?) : item; +{ + return EqualityComparer.Default.Equals(item, default(T)) ? default(T?) : item; } } } \ No newline at end of file diff --git a/common/ASC.FederatedLogin/ASC.FederatedLogin.csproj b/common/ASC.FederatedLogin/ASC.FederatedLogin.csproj index 19f2a6c0bb..a9a523be3d 100644 --- a/common/ASC.FederatedLogin/ASC.FederatedLogin.csproj +++ b/common/ASC.FederatedLogin/ASC.FederatedLogin.csproj @@ -2,12 +2,12 @@ net5.0 + NU1701 none false - 1701;1702;NU1701 diff --git a/common/services/ASC.ApiSystem/ASC.ApiSystem.csproj b/common/services/ASC.ApiSystem/ASC.ApiSystem.csproj index 89716ddd57..0ef22c3d7e 100644 --- a/common/services/ASC.ApiSystem/ASC.ApiSystem.csproj +++ b/common/services/ASC.ApiSystem/ASC.ApiSystem.csproj @@ -8,6 +8,7 @@ (c) Ascensio System SIA. All rights reserved false false + NU1701 diff --git a/common/services/ASC.ElasticSearch/Engine/FactoryIndexer.cs b/common/services/ASC.ElasticSearch/Engine/FactoryIndexer.cs index 91aee5964a..0db656b1b0 100644 --- a/common/services/ASC.ElasticSearch/Engine/FactoryIndexer.cs +++ b/common/services/ASC.ElasticSearch/Engine/FactoryIndexer.cs @@ -436,25 +436,25 @@ namespace ASC.ElasticSearch } } - public async Task IndexAsync(T data, bool immediately = true) + public Task IndexAsync(T data, bool immediately = true) { var t = ServiceProvider.GetService(); - if (!await SupportAsync(t)) return false; - return await Queue(() => Indexer.Index(data, immediately)); + if (!Support(t)) return Task.FromResult(false); + return Queue(() => Indexer.Index(data, immediately)); } - public async Task UpdateAsync(T data, bool immediately = true, params Expression>[] fields) + public Task UpdateAsync(T data, bool immediately = true, params Expression>[] fields) { var t = ServiceProvider.GetService(); - if (!await SupportAsync(t)) return false; - return await Queue(() => Indexer.Update(data, immediately, fields)); + if (!Support(t)) return Task.FromResult(false); + return Queue(() => Indexer.Update(data, immediately, fields)); } - public async Task DeleteAsync(T data, bool immediately = true) + public Task DeleteAsync(T data, bool immediately = true) { var t = ServiceProvider.GetService(); - if (!await SupportAsync(t)) return false; - return await Queue(() => Indexer.Delete(data, immediately)); + if (!Support(t)) return Task.FromResult(false); + return Queue(() => Indexer.Delete(data, immediately)); } public async Task DeleteAsync(Expression, Selector>> expression, bool immediately = true) diff --git a/products/ASC.Files/Client/src/pages/Home/index.js b/products/ASC.Files/Client/src/pages/Home/index.js index 3feac68b19..e47b22b361 100644 --- a/products/ASC.Files/Client/src/pages/Home/index.js +++ b/products/ASC.Files/Client/src/pages/Home/index.js @@ -99,8 +99,6 @@ class PureHome extends React.Component { if (!filterObj) return; - if (filesList.length !== 0) return; - let dataObj = { filter: filterObj }; if (filterObj && filterObj.authorType) { @@ -157,6 +155,7 @@ class PureHome extends React.Component { if (filter) { const folderId = filter.folder; //console.log("filter", filter); + if (filesList.length !== 0) return; return fetchFiles(folderId, filter).then((data) => { const pathParts = data.selectedFolder.pathParts; const newExpandedKeys = createTreeFolders(pathParts, expandedKeys); diff --git a/products/ASC.Files/Core/ASC.Files.Core.csproj b/products/ASC.Files/Core/ASC.Files.Core.csproj index 87afeb875f..a6156909ec 100644 --- a/products/ASC.Files/Core/ASC.Files.Core.csproj +++ b/products/ASC.Files/Core/ASC.Files.Core.csproj @@ -4,6 +4,7 @@ Exe net5.0 Library + NU1701 diff --git a/products/ASC.Files/Core/Configuration/FilesSpaceUsageStatManager.cs b/products/ASC.Files/Core/Configuration/FilesSpaceUsageStatManager.cs index e41a43f5a0..8a357e95d5 100644 --- a/products/ASC.Files/Core/Configuration/FilesSpaceUsageStatManager.cs +++ b/products/ASC.Files/Core/Configuration/FilesSpaceUsageStatManager.cs @@ -38,6 +38,7 @@ using ASC.Files.Core.Resources; using ASC.Web.Core; using ASC.Web.Core.Users; using ASC.Web.Files.Classes; +using ASC.Web.Files.Utils; using ASC.Web.Studio.Utility; namespace ASC.Web.Files @@ -130,27 +131,34 @@ namespace ASC.Web.Files { private Lazy LazyFilesDbContext { get; } private ASC.Files.Core.EF.FilesDbContext FilesDbContext { get => LazyFilesDbContext.Value; } - private TenantManager TenantManager { get; } - + private TenantManager TenantManager { get; } + private GlobalFolder GlobalFolder { get; } + public FileMarker FileMarker { get; } + public IDaoFactory DaoFactory { get; } + public FilesUserSpaceUsage( DbContextManager dbContextManager, - TenantManager tenantManager) + TenantManager tenantManager, + GlobalFolder globalFolder, + FileMarker fileMarker, + IDaoFactory daoFactory) { LazyFilesDbContext = new Lazy(() => dbContextManager.Get(FileConstant.DatabaseId)); - TenantManager = tenantManager; + TenantManager = tenantManager; + GlobalFolder = globalFolder; + FileMarker = fileMarker; + DaoFactory = daoFactory; } public long GetUserSpaceUsage(Guid userId) { - var tenantId = TenantManager.GetCurrentTenant().TenantId; + var tenantId = TenantManager.GetCurrentTenant().TenantId; + var my = GlobalFolder.GetFolderMy(FileMarker, DaoFactory); + var trash = GlobalFolder.GetFolderTrash(DaoFactory); + return FilesDbContext.Files - .Join(FilesDbContext.Tree, a => a.FolderId, b => b.FolderId, (file, tree) => new { file, tree }) - .Join(FilesDbContext.BunchObjects, a => a.tree.ParentId.ToString(), b => b.LeftNode, (fileTree, bunch) => new { fileTree.file, fileTree.tree, bunch }) - .Where(r => r.file.TenantId == r.bunch.TenantId && - r.file.TenantId == tenantId && - r.file.CreateBy == userId && - (r.bunch.RightNode.StartsWith("files/trash/") | r.bunch.RightNode.StartsWith("files/my/"))) - .Sum(r => r.file.ContentLength); + .Where(r => r.TenantId == tenantId && (r.FolderId == my || r.FolderId == trash)) + .Sum(r => r.ContentLength); } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/Core/Dao/TeamlabDao/TagDao.cs b/products/ASC.Files/Core/Core/Dao/TeamlabDao/TagDao.cs index 950b98203d..611b832276 100644 --- a/products/ASC.Files/Core/Core/Dao/TeamlabDao/TagDao.cs +++ b/products/ASC.Files/Core/Core/Dao/TeamlabDao/TagDao.cs @@ -39,8 +39,7 @@ using ASC.Core.Tenants; using ASC.Files.Core.EF; using ASC.Web.Studio.Core; using ASC.Web.Studio.UserControls.Statistics; -using ASC.Web.Studio.Utility; - +using ASC.Web.Studio.Utility; namespace ASC.Files.Core.Data { [Scope] @@ -489,7 +488,7 @@ namespace ASC.Files.Core.Data public IEnumerable GetNewTags(Guid subject, Folder parentFolder, bool deepSearch) { - if (parentFolder == null || parentFolder.ID.Equals(default(T))) + if (parentFolder == null || EqualityComparer.Default.Equals(parentFolder.ID, default(T))) throw new ArgumentException("folderId"); var result = new List(); diff --git a/products/ASC.Files/Core/Core/FileStorageService.cs b/products/ASC.Files/Core/Core/FileStorageService.cs index f68914282c..12fe192be4 100644 --- a/products/ASC.Files/Core/Core/FileStorageService.cs +++ b/products/ASC.Files/Core/Core/FileStorageService.cs @@ -500,7 +500,7 @@ namespace ASC.Web.Files.Services.WCFService ErrorIf(file == null, FilesCommonResource.ErrorMassage_FileNotFound); ErrorIf(!FileSecurity.CanRead(file), FilesCommonResource.ErrorMassage_SecurityException_ReadFile); - var parent = folderDao.GetFolder(parentId == null || parentId.Equals(default(T)) ? file.FolderID : parentId); + var parent = folderDao.GetFolder(EqualityComparer.Default.Equals(parentId, default(T)) ? file.FolderID : parentId); ErrorIf(parent == null, FilesCommonResource.ErrorMassage_FolderNotFound); ErrorIf(parent.RootFolderType == FolderType.TRASH, FilesCommonResource.ErrorMassage_ViewTrashItem); @@ -563,7 +563,7 @@ namespace ASC.Web.Files.Services.WCFService var folderDao = GetFolderDao(); Folder folder = null; - if (!fileWrapper.ParentId.Equals(default(T))) + if (!EqualityComparer.Default.Equals(fileWrapper.ParentId, default(T))) { folder = folderDao.GetFolder(fileWrapper.ParentId); @@ -608,7 +608,7 @@ namespace ASC.Web.Files.Services.WCFService file.Title = FileUtility.ReplaceFileExtension(fileWrapper.Title, fileExt); } - if (fileWrapper.TemplateId == null || fileWrapper.TemplateId.Equals(default(T))) + if (EqualityComparer.Default.Equals(fileWrapper.TemplateId, default(T))) { var culture = UserManager.GetUsers(AuthContext.CurrentAccount.ID).GetCulture(); var storeTemplate = GetStoreTemplate(); diff --git a/products/ASC.Files/Core/HttpHandlers/ChunkedUploaderHandler.cs b/products/ASC.Files/Core/HttpHandlers/ChunkedUploaderHandler.cs index d230547c17..5b4317b864 100644 --- a/products/ASC.Files/Core/HttpHandlers/ChunkedUploaderHandler.cs +++ b/products/ASC.Files/Core/HttpHandlers/ChunkedUploaderHandler.cs @@ -25,6 +25,7 @@ using System; +using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; @@ -397,7 +398,7 @@ namespace ASC.Web.Files.HttpHandlers private bool IsFileDataSet() { - return !string.IsNullOrEmpty(FileName) && !FolderId.Equals(default(T)); + return !string.IsNullOrEmpty(FileName) && !EqualityComparer.Default.Equals(FolderId, default(T)); } } diff --git a/products/ASC.Files/Core/Model/FileWrapper.cs b/products/ASC.Files/Core/Model/FileWrapper.cs index a15e03354d..39de1bef1b 100644 --- a/products/ASC.Files/Core/Model/FileWrapper.cs +++ b/products/ASC.Files/Core/Model/FileWrapper.cs @@ -153,7 +153,6 @@ namespace ASC.Api.Documents { private AuthContext AuthContext { get; } private IDaoFactory DaoFactory { get; } - private FileSecurity FileSecurity { get; } private GlobalFolderHelper GlobalFolderHelper { get; } private CommonLinkUtility CommonLinkUtility { get; } private FilesLinkUtility FilesLinkUtility { get; } @@ -174,7 +173,6 @@ namespace ASC.Api.Documents { AuthContext = authContext; DaoFactory = daoFactory; - FileSecurity = fileSecurity; GlobalFolderHelper = globalFolderHelper; CommonLinkUtility = commonLinkUtility; FilesLinkUtility = filesLinkUtility; diff --git a/products/ASC.Files/Core/Model/FolderWrapper.cs b/products/ASC.Files/Core/Model/FolderWrapper.cs index 06cdb1e15a..55519827df 100644 --- a/products/ASC.Files/Core/Model/FolderWrapper.cs +++ b/products/ASC.Files/Core/Model/FolderWrapper.cs @@ -98,7 +98,6 @@ namespace ASC.Api.Documents { private AuthContext AuthContext { get; } private IDaoFactory DaoFactory { get; } - private FileSecurity FileSecurity { get; } private GlobalFolderHelper GlobalFolderHelper { get; } public FolderWrapperHelper( @@ -113,7 +112,6 @@ namespace ASC.Api.Documents { AuthContext = authContext; DaoFactory = daoFactory; - FileSecurity = fileSecurity; GlobalFolderHelper = globalFolderHelper; } diff --git a/products/ASC.Files/Core/Utils/FileMarker.cs b/products/ASC.Files/Core/Utils/FileMarker.cs index 11f9a93321..facfb661f5 100644 --- a/products/ASC.Files/Core/Utils/FileMarker.cs +++ b/products/ASC.Files/Core/Utils/FileMarker.cs @@ -435,12 +435,12 @@ namespace ASC.Web.Files.Utils var updateTags = new List(); - if (!rootFolderId.Equals(default(T))) + if (!rootFolderId.Equals(default)) { UpdateRemoveTags(internalFolderDao.GetFolder(rootFolderId)); } - if (!cacheFolderId.Equals(default(T))) + if (!cacheFolderId.Equals(default)) { RemoveFromCahce(cacheFolderId, userID); } diff --git a/products/ASC.Files/Core/Utils/FileTracker.cs b/products/ASC.Files/Core/Utils/FileTracker.cs index 58d3ad77af..159766f5e4 100644 --- a/products/ASC.Files/Core/Utils/FileTracker.cs +++ b/products/ASC.Files/Core/Utils/FileTracker.cs @@ -195,7 +195,7 @@ namespace ASC.Web.Files.Utils private FileTracker GetTracker(T fileId) { - if (!fileId.Equals(default(T))) + if (!EqualityComparer.Default.Equals(fileId, default(T))) { return Cache.Get(TRACKER + fileId); } @@ -204,7 +204,7 @@ namespace ASC.Web.Files.Utils private void SetTracker(T fileId, FileTracker tracker) { - if (!fileId.Equals(default(T))) + if (!EqualityComparer.Default.Equals(fileId, default(T))) { if (tracker != null) {