add fileHelper

This commit is contained in:
Anton Suhorukov 2021-06-10 17:53:06 +03:00
parent 50f0bef484
commit a82efce2a1
27 changed files with 294 additions and 258 deletions

View File

@ -29,6 +29,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace ASC.Core.ChunkedUploader
{
@ -58,6 +59,8 @@ namespace ASC.Core.ChunkedUploader
public Dictionary<string, object> Items { get; set; } = new Dictionary<string, object>();
private const string TempPathKey = "TempPath";
[JsonIgnore]
public string TempPath
{
get { return GetItemOrDefault<string>(TempPathKey); }
@ -65,6 +68,8 @@ namespace ASC.Core.ChunkedUploader
}
private const string UploadIdKey = "UploadId";
[JsonIgnore]
public string UploadId
{
get { return GetItemOrDefault<string>(UploadIdKey); }
@ -72,6 +77,8 @@ namespace ASC.Core.ChunkedUploader
}
private const string ChunksBufferKey = "ChunksBuffer";
[JsonIgnore]
public string ChunksBuffer
{
get { return GetItemOrDefault<string>(ChunksBufferKey); }
@ -120,6 +127,10 @@ namespace ASC.Core.ChunkedUploader
{
newItems.Add(item.Key, item.Value.ToString());
}
if (value.ValueKind == JsonValueKind.Number)
{
newItems.Add(item.Key, Int32.Parse(item.Value.ToString()));
}
if (value.ValueKind == JsonValueKind.Array)
{
newItems.Add(item.Key, value.EnumerateArray().Select(o => o.ToString()).ToList());
@ -131,6 +142,7 @@ namespace ASC.Core.ChunkedUploader
}
}
}
Items = newItems;
}
public virtual object Clone()

View File

@ -145,7 +145,7 @@ namespace ASC.Data.Backup.Storage
}
using var source = File.OpenRead(localPath);
var newFile = ServiceProvider.GetService<File<T>>();
var newFile = new File<T>();
newFile.Title = Path.GetFileName(localPath);
newFile.FolderID = folder.ID;
newFile.ContentLength = source.Length;

View File

@ -71,16 +71,13 @@ namespace ASC.Files.Core.Data
{
public static void Register(DIHelper services)
{
services.TryAdd<File<int>>();
services.TryAdd<IFileDao<int>, FileDao>();
services.TryAdd<FileHelper<int>>();
services.TryAdd<FileHelper<string>>();
services.TryAdd<File<string>>();
services.TryAdd<IFileDao<int>, FileDao>();
services.TryAdd<IFileDao<string>, ProviderFileDao>();
services.TryAdd<Folder<int>>();
services.TryAdd<IFolderDao<int>, FolderDao>();
services.TryAdd<Folder<string>>();
services.TryAdd<IFolderDao<string>, ProviderFolderDao>();
services.TryAdd<SecurityDao<int>>();

View File

@ -823,8 +823,10 @@ namespace ASC.Files.Core.Data
var file = GetFile(fileId);
if (file != null)
{
var copy = ServiceProvider.GetService<File<int>>();
copy.FileStatus = file.FileStatus;
var copy = new File<int>();
var fileHelper = ServiceProvider.GetService<FileHelper<int>>();
fileHelper.FileEntry = file;
copy._status = fileHelper.FileStatus;
copy.FolderID = toFolderId;
copy.Title = file.Title;
copy.ConvertedType = file.ConvertedType;
@ -1039,7 +1041,7 @@ namespace ASC.Files.Core.Data
return file;
}
var result = ServiceProvider.GetService<File<int>>();
var result = new File<int>();
result.FolderID = uploadSession.File.FolderID;
result.Title = uploadSession.File.Title;
result.ContentLength = uploadSession.BytesTotal;
@ -1429,7 +1431,7 @@ namespace ASC.Files.Core.Data
public File<int> ToFile(DbFileQuery r)
{
var file = ServiceProvider.GetService<File<int>>();
var file = new File<int>();
if (r == null) return null;
file.ID = r.File.Id;
file.Title = r.File.Title;
@ -1479,7 +1481,7 @@ namespace ASC.Files.Core.Data
return dbFile;
}
var file = ServiceProvider.GetService<File<int>>();
var file = new File<int>();
file.ID = dbFile.Id;
file.Title = dbFile.Title;
file.Version = dbFile.Version;
@ -1513,7 +1515,7 @@ namespace ASC.Files.Core.Data
return dbFile;
}
var file = ServiceProvider.GetService<File<int>>();
var file = new File<int>();
file.ID = dbFile.Id;
file.Title = dbFile.Title;
file.Version = dbFile.Version;

View File

@ -50,7 +50,6 @@ using ASC.Web.Studio.Utility;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.DependencyInjection;
namespace ASC.Files.Core.Data
{
@ -576,7 +575,7 @@ namespace ASC.Files.Core.Data
if (folder.FolderType == FolderType.BUNCH)
folder.FolderType = FolderType.DEFAULT;
var copy = ServiceProvider.GetService<Folder<int>>();
var copy = new Folder<int>();
copy.FolderID = toFolderId;
copy.RootFolderId = toFolder.RootFolderId;
copy.RootFolderCreator = toFolder.RootFolderCreator;
@ -834,7 +833,7 @@ namespace ASC.Files.Core.Data
var newFolderId = 0;
if (createIfNotExists && !folderIdsDictionary.TryGetValue(key, out var folderId))
{
var folder = ServiceProvider.GetService<Folder<int>>();
var folder = new Folder<int>();
switch (bunch)
{
case my:
@ -918,7 +917,7 @@ namespace ASC.Files.Core.Data
var newFolderId = 0;
if (createIfNotExists)
{
var folder = ServiceProvider.GetService<Folder<int>>();
var folder = new Folder<int>();
folder.FolderID = 0;
switch (bunch)
{
@ -1090,7 +1089,7 @@ namespace ASC.Files.Core.Data
public Folder<int> ToFolder(DbFolderQuery r)
{
if (r == null) return null;
var result = ServiceProvider.GetService<Folder<int>>();
var result = new Folder<int>();
result.ID = r.Folder.Id;
result.FolderID = r.Folder.ParentId;
result.Title = r.Folder.Title;

View File

@ -30,8 +30,6 @@ using System.Text.Json.Serialization;
using ASC.Common;
using ASC.Web.Core.Files;
using ASC.Web.Files.Classes;
using ASC.Web.Files.Utils;
using ASC.Web.Studio.Core;
namespace ASC.Files.Core
@ -61,63 +59,38 @@ namespace ASC.Files.Core
[DebuggerDisplay("{Title} ({ID} v{Version})")]
public class File<T> : FileEntry<T>
{
private FileStatus _status;
public File(Global global,
FilesLinkUtility filesLinkUtility,
FileUtility fileUtility,
FileConverter fileConverter,
FileTrackerHelper fileTracker)
: base(global)
{
Version = 1;
VersionGroup = 1;
FileEntryType = FileEntryType.File;
FilesLinkUtility = filesLinkUtility;
FileUtility = fileUtility;
FileConverter = fileConverter;
FileTracker = fileTracker;
}
public FileStatus _status;
public File()
{
Version = 1;
VersionGroup = 1;
FileEntryType = FileEntryType.File;
}
public int Version { get; set; }
[JsonPropertyName("version_group")]
public int VersionGroup { get; set; }
public string Comment { get; set; }
[JsonIgnore]
public string PureTitle
{
get { return base.Title; }
set { base.Title = value; }
get { return Title; }
set { Title = value; }
}
public override string Title
{
get
{
return string.IsNullOrEmpty(ConvertedType)
? base.Title
: FileUtility.ReplaceFileExtension(base.Title, FileUtility.GetInternalExtension(base.Title));
}
set { base.Title = value; }
}
[JsonPropertyName("content_length")]
public long ContentLength { get; set; }
[JsonPropertyName("content_length_string")]
[JsonIgnore]
public string ContentLengthString
{
get { return FileSizeComment.FilesSizeToString(ContentLength); }
set { }
}
[JsonIgnore]
public FilterType FilterType
{
get
@ -143,36 +116,11 @@ namespace ASC.Files.Core
}
}
[JsonPropertyName("file_status")]
public FileStatus FileStatus
{
get
{
if (FileTracker.IsEditing(ID))
{
_status |= FileStatus.IsEditing;
}
if (FileTracker.IsEditingAlone(ID))
{
_status |= FileStatus.IsEditingAlone;
}
if (FileConverter.IsConverting(this))
{
_status |= FileStatus.IsConverting;
}
return _status;
}
set { _status = value; }
}
public bool Locked { get; set; }
[JsonPropertyName("locked_by")]
public string LockedBy { get; set; }
[JsonIgnore]
public override bool IsNew
{
get { return (_status & FileStatus.IsNew) == FileStatus.IsNew; }
@ -211,18 +159,13 @@ namespace ASC.Files.Core
public bool Encrypted { get; set; }
[JsonPropertyName("thumbnail_status")]
public Thumbnail ThumbnailStatus { get; set; }
public ForcesaveType Forcesave { get; set; }
public string DownloadUrl
{
get { return FilesLinkUtility.GetFileDownloadUrl(ID); }
}
public string ConvertedType { get; set; }
[JsonIgnore]
public string ConvertedExtension
{
get
@ -241,17 +184,6 @@ namespace ASC.Files.Core
}
public object NativeAccessor { get; set; }
[NonSerialized]
public FileTrackerHelper FileTracker;
[NonSerialized]
public FilesLinkUtility FilesLinkUtility;
[NonSerialized]
public FileUtility FileUtility;
[NonSerialized]
public FileConverter FileConverter;
}
}

View File

@ -28,68 +28,41 @@ using System;
using System.Text.Json.Serialization;
using ASC.Files.Core.Security;
using ASC.Web.Files.Classes;
namespace ASC.Files.Core
{
[Serializable]
public abstract class FileEntry : ICloneable
{
public FileEntry(Global global)
{
Global = global;
}
public FileEntry()
{
}
public string Title { get; set; }
public virtual string Title { get; set; }
[JsonPropertyName("create_by_id")]
public Guid CreateBy { get; set; }
[JsonPropertyName("create_by")]
public string CreateByString
{
get { return !CreateBy.Equals(Guid.Empty) ? Global.GetUserName(CreateBy) : _createByString; }
set { _createByString = value; }
}
[JsonPropertyName("create_on")]
[JsonIgnore]
public string CreateOnString
{
get { return CreateOn.Equals(default) ? null : CreateOn.ToString("g"); }
}
[JsonPropertyName("modified_on")]
[JsonIgnore]
public string ModifiedOnString
{
get { return ModifiedOn.Equals(default) ? null : ModifiedOn.ToString("g"); }
}
[JsonPropertyName("modified_by_id")]
public Guid ModifiedBy { get; set; }
[JsonPropertyName("modified_by")]
public string ModifiedByString
{
get { return !ModifiedBy.Equals(Guid.Empty) ? Global.GetUserName(ModifiedBy) : _modifiedByString; }
set { _modifiedByString = value; }
}
public string Error { get; set; }
public FileShare Access { get; set; }
public bool Shared { get; set; }
[JsonPropertyName("provider_id")]
public int ProviderId { get; set; }
[JsonPropertyName("provider_key")]
public string ProviderKey { get; set; }
public string ProviderKey { get; set; }
[JsonIgnore]
public bool ProviderEntry
{
get { return !string.IsNullOrEmpty(ProviderKey); }
@ -107,12 +80,8 @@ namespace ASC.Files.Core
public FileEntryType FileEntryType;
[NonSerialized]
public Global Global;
private string _modifiedByString;
private string _createByString;
public string _modifiedByString;
public string _createByString;
public override string ToString()
{
@ -128,14 +97,6 @@ namespace ASC.Files.Core
[Serializable]
public abstract class FileEntry<T> : FileEntry, ICloneable
{
public FileEntry(Global global) : base(global)
{
}
public FileEntry()
{
}
public T ID { get; set; }
@ -143,7 +104,6 @@ namespace ASC.Files.Core
private T _folderIdDisplay;
[JsonPropertyName("folder_id")]
public T FolderIdDisplay
{
get
@ -155,7 +115,9 @@ namespace ASC.Files.Core
set { _folderIdDisplay = value; }
}
public T RootFolderId { get; set; }
public T RootFolderId { get; set; }
[JsonIgnore]
public string UniqID
{
get { return string.Format("{0}_{1}", GetType().Name.ToLower(), ID); }

View File

@ -0,0 +1,110 @@
/*
*
* (c) Copyright Ascensio System Limited 2010-2021
*
* This program is freeware. You can redistribute it and/or modify it under the terms of the GNU
* General Public License (GPL) version 3 as published by the Free Software Foundation (https://www.gnu.org/copyleft/gpl.html).
* In accordance with Section 7(a) of the GNU GPL its Section 15 shall be amended to the effect that
* Ascensio System SIA expressly excludes the warranty of non-infringement of any third-party rights.
*
* THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR
* FITNESS FOR A PARTICULAR PURPOSE. For more details, see GNU GPL at https://www.gnu.org/copyleft/gpl.html
*
* You can contact Ascensio System SIA by email at sales@onlyoffice.com
*
* The interactive user interfaces in modified source and object code versions of ONLYOFFICE must display
* Appropriate Legal Notices, as required under Section 5 of the GNU GPL version 3.
*
* Pursuant to Section 7 § 3(b) of the GNU GPL you must retain the original ONLYOFFICE logo which contains
* relevant author attributions when distributing the software. If the display of the logo in its graphic
* form is not reasonably feasible for technical reasons, you must include the words "Powered by ONLYOFFICE"
* in every copy of the program you distribute.
* Pursuant to Section 7 § 3(e) we decline to grant you any rights under trademark law for use of our trademarks.
*
*/
using System;
using ASC.Common;
using ASC.Web.Core.Files;
using ASC.Web.Files.Classes;
using ASC.Web.Files.Utils;
namespace ASC.Files.Core
{
[Transient]
public class FileHelper<T>
{
private FileTrackerHelper FileTracker { get; set; }
private FilesLinkUtility FilesLinkUtility { get; set; }
private FileUtility FileUtility { get; set; }
private FileConverter FileConverter { get; set; }
private Global Global { get; set; }
public FileEntry FileEntry { get; set; }
public FileHelper(FileTrackerHelper fileTracker, FilesLinkUtility filesLinkUtility, FileUtility fileUtility, FileConverter fileConverter, Global global)
{
FileTracker = fileTracker;
FilesLinkUtility = filesLinkUtility;
FileUtility = fileUtility;
FileConverter = fileConverter;
Global = global;
}
public string CreateByString
{
get { return !FileEntry.CreateBy.Equals(Guid.Empty) ? Global.GetUserName(FileEntry.CreateBy) : FileEntry._createByString; }
}
public string ModifiedByString
{
get { return !FileEntry.ModifiedBy.Equals(Guid.Empty) ? Global.GetUserName(FileEntry.ModifiedBy) : FileEntry._modifiedByString; }
}
public string Title
{
get
{
var File = (File<T>)FileEntry;
return string.IsNullOrEmpty(File.ConvertedType)
? File.Title
: FileUtility.ReplaceFileExtension(File.Title, FileUtility.GetInternalExtension(File.Title));
}
}
public FileStatus FileStatus
{
get
{
var File = (File<T>)FileEntry;
if (FileTracker.IsEditing(File.ID))
{
File._status |= FileStatus.IsEditing;
}
if (FileTracker.IsEditingAlone(File.ID))
{
File._status |= FileStatus.IsEditingAlone;
}
if (FileConverter.IsConverting(File))
{
File._status |= FileStatus.IsConverting;
}
return File._status;
}
}
public string DownloadUrl
{
get { return FilesLinkUtility.GetFileDownloadUrl(((FileEntry<T>)FileEntry).ID); }
}
}
}

View File

@ -28,7 +28,6 @@ using System;
using System.Diagnostics;
using ASC.Common;
using ASC.Web.Files.Classes;
namespace ASC.Files.Core
{
@ -84,8 +83,7 @@ namespace ASC.Files.Core
set { NewForMe = Convert.ToInt32(value); }
}
public Folder(Global global)
: base(global)
public Folder()
{
Title = string.Empty;
FileEntryType = FileEntryType.Folder;

View File

@ -405,7 +405,7 @@ namespace ASC.Web.Files.Services.WCFService
try
{
var newFolder = ServiceProvider.GetService<Folder<T>>();
var newFolder = new Folder<T>();
newFolder.Title = title;
newFolder.FolderID = parent.ID;
@ -578,7 +578,7 @@ namespace ASC.Web.Files.Services.WCFService
}
var file = ServiceProvider.GetService<File<T>>();
var file = new File<T>();
file.FolderID = folder.ID;
file.Comment = FilesCommonResource.CommentCreate;
@ -1532,7 +1532,7 @@ namespace ASC.Web.Files.Services.WCFService
if (file == null)
{
var newFile = ServiceProvider.GetService<File<T>>();
var newFile = new File<T>();
newFile.ID = fileId;
newFile.Version = version;
@ -1602,7 +1602,7 @@ namespace ASC.Web.Files.Services.WCFService
{
//create folder with name userFrom in folder userTo
var folderIdToMy = folderDao.GetFolderIDUser(true, userTo.ID);
var newFolder = ServiceProvider.GetService<Folder<T>>();
var newFolder = new Folder<T>();
newFolder.Title = string.Format(CustomNamingPeople.Substitute<FilesCommonResource>("TitleDeletedUserFolder"), userFrom.DisplayUserName(false, DisplayUserSettingsHelper));
newFolder.FolderID = folderIdToMy;
@ -2138,12 +2138,14 @@ namespace ASC.Web.Files.Services.WCFService
var newFile = file;
if (file.CreateBy != userInfo.ID)
{
newFile = ServiceProvider.GetService<File<T>>();
newFile = new File<T>();
var fileHelper = ServiceProvider.GetService<FileHelper<T>>();
fileHelper.FileEntry = file;
newFile.ID = file.ID;
newFile.Version = file.Version + 1;
newFile.VersionGroup = file.VersionGroup + 1;
newFile.Title = file.Title;
newFile.FileStatus = file.FileStatus;
newFile._status = fileHelper.FileStatus;
newFile.FolderID = file.FolderID;
newFile.CreateBy = userInfo.ID;
newFile.CreateOn = file.CreateOn;

View File

@ -118,7 +118,7 @@ namespace ASC.Files.Core.Thirdparty
{
var fromFolder = fromFolderDao.GetFolder(fromConverter(fromFolderId));
var toFolder1 = ServiceProvider.GetService<Folder<TTo>>();
var toFolder1 = new Folder<TTo>();
toFolder1.Title = fromFolder.Title;
toFolder1.FolderID = toConverter(toRootFolderId);

View File

@ -20,7 +20,6 @@ using ASC.Web.Files.Services.DocumentService;
using ASC.Web.Studio.Core;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using FileShare = ASC.Files.Core.Security.FileShare;
@ -290,7 +289,7 @@ namespace ASC.Files.Thirdparty
protected Folder<string> GetFolder()
{
var folder = ServiceProvider.GetService<Folder<string>>();
var folder = new Folder<string>();
InitFileEntry(folder);
@ -315,12 +314,11 @@ namespace ASC.Files.Thirdparty
protected File<string> GetFile()
{
var file = ServiceProvider.GetService<File<string>>();
var file = new File<string>();
InitFileEntry(file);
file.Access = FileShare.None;
file.FileStatus = FileStatus.None;
file.Shared = false;
file.Version = 1;

View File

@ -35,8 +35,6 @@ using ASC.Files.Core.Data;
using ASC.Files.Core.Security;
using ASC.Files.Core.Thirdparty;
using Microsoft.Extensions.DependencyInjection;
namespace ASC.Files.Thirdparty.ProviderDao
{
[Scope]
@ -155,7 +153,7 @@ namespace ASC.Files.Thirdparty.ProviderDao
foreach (var pureShareRecord in pureShareRecords)
{
if (pureShareRecord == null) continue;
var f = ServiceProvider.GetService<Folder<string>>();
var f = new Folder<string>();
f.ID = pureShareRecord.EntryId.ToString();
pureShareRecord.Level = parentFolders.IndexOf(f);

View File

@ -37,9 +37,8 @@ using ASC.Common.Caching;
using ASC.Common.Logging;
using ASC.Core.Tenants;
using ASC.Files.Core;
using ASC.Web.Files.Classes;
using Microsoft.Extensions.DependencyInjection;
using ASC.Web.Files.Classes;
using Microsoft.Extensions.Options;
using Microsoft.SharePoint.Client;
@ -281,7 +280,7 @@ namespace ASC.Files.Thirdparty.SharePoint
if (file == null)
return null;
var result = ServiceProvider.GetService<File<string>>();
var result = new File<string>();
if (file is SharePointFileErrorEntry errorFile)
{
@ -307,7 +306,6 @@ namespace ASC.Files.Thirdparty.SharePoint
//ContentLength = file.Length,
result.CreateBy = Owner;
result.CreateOn = file.TimeCreated.Kind == DateTimeKind.Utc ? TenantUtil.DateTimeFromUtc(file.TimeCreated) : file.TimeCreated;
result.FileStatus = FileStatus.None;
result.FolderID = MakeId(GetParentFolderId(file.ServerRelativeUrl));
result.ModifiedBy = Owner;
result.ModifiedOn = file.TimeLastModified.Kind == DateTimeKind.Utc ? TenantUtil.DateTimeFromUtc(file.TimeLastModified) : file.TimeLastModified;
@ -498,7 +496,7 @@ namespace ASC.Files.Thirdparty.SharePoint
{
if (folder == null) return null;
var result = ServiceProvider.GetService<Folder<string>>();
var result = new Folder<string>();
if (folder is SharePointFolderErrorEntry errorFolder)
{

View File

@ -55,9 +55,8 @@ using ASC.Web.Studio.Core;
using DocuSign.eSign.Api;
using DocuSign.eSign.Client;
using DocuSign.eSign.Model;
using DocuSign.eSign.Model;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
@ -408,7 +407,7 @@ namespace ASC.Web.Files.Helpers
}
}
var file = ServiceProvider.GetService<File<T>>();
var file = new File<T>();
file.FolderID = folderId;
file.Comment = FilesCommonResource.CommentCreateByDocuSign;
file.Title = FileUtility.ReplaceFileExtension(documentName, ".pdf");

View File

@ -47,7 +47,6 @@ using ASC.Web.Core.WhiteLabel;
using ASC.Web.Files.Utils;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Constants = ASC.Core.Configuration.Constants;
@ -572,7 +571,7 @@ namespace ASC.Web.Files.Classes
foreach (var folderName in storeTemplate.ListDirectoriesRelative(path, false))
{
var folder = ServiceProvider.GetService<Folder<T>>();
var folder = new Folder<T>();
folder.Title = folderName;
folder.FolderID = folderId;
@ -591,7 +590,7 @@ namespace ASC.Web.Files.Classes
return;
var fileName = Path.GetFileName(filePath);
var file = ServiceProvider.GetService<File<T>>();
var file = new File<T>();
file.Title = fileName;
file.FolderID = folder;

View File

@ -1144,7 +1144,7 @@ namespace ASC.Web.Files
fileTitle += fileExt;
}
var file = ServiceProvider.GetService<File<T>>();
var file = new File<T>();
file.Title = fileTitle;
file.FolderID = folder.ID;
file.Comment = FilesCommonResource.CommentCreate;
@ -1160,7 +1160,7 @@ namespace ASC.Web.Files
if (string.IsNullOrEmpty(fileTitle))
fileTitle = Path.GetFileName(HttpUtility.UrlDecode(fileUri));
var file = ServiceProvider.GetService<File<T>>();
var file = new File<T>();
file.Title = fileTitle;
file.FolderID = folder.ID;
file.Comment = FilesCommonResource.CommentCreate;

View File

@ -39,6 +39,8 @@ using ASC.Web.Files.Helpers;
using ASC.Web.Files.Utils;
using ASC.Web.Studio.Core;
using Microsoft.Extensions.DependencyInjection;
namespace ASC.Web.Files.Configuration
{
public class SearchHandler
@ -72,6 +74,7 @@ namespace ASC.Web.Files.Configuration
private FileUtility FileUtility { get; }
private PathProvider PathProvider { get; }
private ThirdpartyConfiguration ThirdpartyConfiguration { get; }
private IServiceProvider ServiceProvider { get; }
public SearchHandler(
FileSecurity fileSecurity,
@ -82,7 +85,8 @@ namespace ASC.Web.Files.Configuration
FilesLinkUtility filesLinkUtility,
FileUtility fileUtility,
PathProvider pathProvider,
ThirdpartyConfiguration thirdpartyConfiguration)
ThirdpartyConfiguration thirdpartyConfiguration,
IServiceProvider serviceProvider)
{
FileSecurity = fileSecurity;
DaoFactory = daoFactory;
@ -93,6 +97,7 @@ namespace ASC.Web.Files.Configuration
FileUtility = fileUtility;
PathProvider = pathProvider;
ThirdpartyConfiguration = thirdpartyConfiguration;
ServiceProvider = serviceProvider;
}
public IEnumerable<File<int>> SearchFiles(string text)
@ -130,39 +135,49 @@ namespace ASC.Web.Files.Configuration
public SearchResultItem[] Search(string text)
{
var folderDao = DaoFactory.GetFolderDao<int>();
var result = SearchFiles(text)
.Select(r => new SearchResultItem
{
Name = r.Title ?? string.Empty,
Description = string.Empty,
URL = FilesLinkUtility.GetFileWebPreviewUrl(FileUtility, r.Title, r.ID),
Date = r.ModifiedOn,
Additional = new Dictionary<string, object>
var files = SearchFiles(text);
var helper = ServiceProvider.GetService<FileHelper<int>>();
List<SearchResultItem> list = new List<SearchResultItem>();
foreach (var file in files)
{
helper.FileEntry = file;
var searchResultItem = new SearchResultItem
{
Name = file.Title ?? string.Empty,
Description = string.Empty,
URL = FilesLinkUtility.GetFileWebPreviewUrl(FileUtility, file.Title, file.ID),
Date = file.ModifiedOn,
Additional = new Dictionary<string, object>
{
{ "Author", r.CreateByString.HtmlEncode() },
{ "Path", FolderPathBuilder<int>(EntryManager.GetBreadCrumbs(r.FolderID, folderDao)) },
{ "Size", FileSizeComment.FilesSizeToString(r.ContentLength) }
{ "Author", helper.CreateByString.HtmlEncode() },
{ "Path", FolderPathBuilder<int>(EntryManager.GetBreadCrumbs(file.FolderID, folderDao)) },
{ "Size", FileSizeComment.FilesSizeToString(file.ContentLength) }
}
}
);
};
list.Add(searchResultItem);
}
var resultFolder = SearchFolders(text)
.Select(f =>
new SearchResultItem
{
Name = f.Title ?? string.Empty,
Description = string.Empty,
URL = PathProvider.GetFolderUrl(f),
Date = f.ModifiedOn,
Additional = new Dictionary<string, object>
var folders = SearchFolders(text);
foreach (var folder in folders)
{
helper.FileEntry = folder;
var searchResultItem = new SearchResultItem
{
Name = folder.Title ?? string.Empty,
Description = string.Empty,
URL = PathProvider.GetFolderUrl(folder),
Date = folder.ModifiedOn,
Additional = new Dictionary<string, object>
{
{ "Author", f.CreateByString.HtmlEncode() },
{ "Path", FolderPathBuilder<int>(EntryManager.GetBreadCrumbs(f.ID, folderDao)) },
{ "Author", helper.CreateByString.HtmlEncode() },
{ "Path", FolderPathBuilder<int>(EntryManager.GetBreadCrumbs(folder.ID, folderDao)) },
{ "IsFolder", true }
}
});
};
list.Add(searchResultItem);
}
return result.Concat(resultFolder).ToArray();
return list.ToArray();
}
private static string FolderPathBuilder<T>(IEnumerable<FileEntry> folders)

View File

@ -40,6 +40,8 @@ using ASC.Web.Core.Files;
using ASC.Web.Files.Classes;
using ASC.Web.Studio.Utility;
using Microsoft.Extensions.DependencyInjection;
using FileShare = ASC.Files.Core.Security.FileShare;
namespace ASC.Api.Documents
{
@ -153,7 +155,8 @@ namespace ASC.Api.Documents
private GlobalFolderHelper GlobalFolderHelper { get; }
private CommonLinkUtility CommonLinkUtility { get; }
private FilesLinkUtility FilesLinkUtility { get; }
private FileUtility FileUtility { get; }
private FileUtility FileUtility { get; }
private IServiceProvider ServiceProvider { get; }
public FileWrapperHelper(
ApiDateTimeHelper apiDateTimeHelper,
@ -164,7 +167,8 @@ namespace ASC.Api.Documents
GlobalFolderHelper globalFolderHelper,
CommonLinkUtility commonLinkUtility,
FilesLinkUtility filesLinkUtility,
FileUtility fileUtility)
FileUtility fileUtility,
IServiceProvider serviceProvider)
: base(apiDateTimeHelper, employeeWrapperHelper)
{
AuthContext = authContext;
@ -173,7 +177,8 @@ namespace ASC.Api.Documents
GlobalFolderHelper = globalFolderHelper;
CommonLinkUtility = commonLinkUtility;
FilesLinkUtility = filesLinkUtility;
FileUtility = fileUtility;
FileUtility = fileUtility;
ServiceProvider = serviceProvider;
}
public FileWrapper<T> Get<T>(File<T> file, List<Tuple<FileEntry<T>, bool>> folders = null)
@ -212,6 +217,9 @@ namespace ASC.Api.Documents
private FileWrapper<T> GetFileWrapper<T>(File<T> file)
{
var fileHelper = ServiceProvider.GetService<FileHelper<T>>();
fileHelper.FileEntry = file;
var result = Get<FileWrapper<T>, T>(file);
result.FileExst = FileUtility.GetFileExtension(file.Title);
@ -219,7 +227,7 @@ namespace ASC.Api.Documents
result.Version = file.Version;
result.VersionGroup = file.VersionGroup;
result.ContentLength = file.ContentLengthString;
result.FileStatus = file.FileStatus;
result.FileStatus = fileHelper.FileStatus;
result.PureContentLength = file.ContentLength.NullIfDefault();
result.Comment = file.Comment;
result.Encrypted = file.Encrypted.NullIfDefault();
@ -228,7 +236,7 @@ namespace ASC.Api.Documents
try
{
result.ViewUrl = CommonLinkUtility.GetFullAbsolutePath(file.DownloadUrl);
result.ViewUrl = CommonLinkUtility.GetFullAbsolutePath(fileHelper.DownloadUrl);
result.WebUrl = CommonLinkUtility.GetFullAbsolutePath(FilesLinkUtility.GetFileWebPreviewUrl(FileUtility, file.Title, file.ID, file.Version));

View File

@ -200,17 +200,19 @@ namespace ASC.Web.Files.Services.DocumentService
[Transient]
public class InfoConfig<T>
{
public File<T> File;
public File<T> File;
private FileHelper<T> FileHelper;
public EditorType Type = EditorType.Desktop;
private string _breadCrumbs;
public InfoConfig(BreadCrumbsManager breadCrumbsManager, FileSharing fileSharing, SecurityContext securityContext, UserManager userManager)
public InfoConfig(BreadCrumbsManager breadCrumbsManager, FileSharing fileSharing, SecurityContext securityContext, UserManager userManager, FileHelper<T> fileHelper)
{
BreadCrumbsManager = breadCrumbsManager;
FileSharing = fileSharing;
SecurityContext = securityContext;
UserManager = userManager;
FileHelper = fileHelper;
}
public bool? Favorite
@ -245,7 +247,10 @@ namespace ASC.Web.Files.Services.DocumentService
public string Owner
{
set { }
get { return File.CreateByString; }
get {
FileHelper.FileEntry = File;
return FileHelper.CreateByString;
}
}
public string Uploaded

View File

@ -62,7 +62,6 @@ using ASC.Web.Studio.Utility;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Newtonsoft.Json.Linq;
@ -207,7 +206,7 @@ namespace ASC.Web.Files.ThirdPartyApp
var jsonFile = JObject.Parse(boxFile);
var file = ServiceProvider.GetService<File<string>>();
var file = new File<string>();
file.ID = ThirdPartySelector.BuildAppFileId(AppAttr, jsonFile.Value<string>("id"));
file.Title = Global.ReplaceInvalidCharsAndTruncate(jsonFile.Value<string>("name"));
file.CreateOn = TenantUtil.DateTimeFromUtc(jsonFile.Value<DateTime>("created_at"));
@ -218,13 +217,13 @@ namespace ASC.Web.Files.ThirdPartyApp
var modifiedBy = jsonFile.Value<JObject>("modified_by");
if (modifiedBy != null)
{
file.ModifiedByString = modifiedBy.Value<string>("name");
file._modifiedByString = modifiedBy.Value<string>("name");
}
var createdBy = jsonFile.Value<JObject>("created_by");
if (createdBy != null)
{
file.CreateByString = createdBy.Value<string>("name");
file._createByString = createdBy.Value<string>("name");
}

View File

@ -63,7 +63,6 @@ using ASC.Web.Studio.Utility;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Newtonsoft.Json.Linq;
@ -227,19 +226,19 @@ namespace ASC.Web.Files.ThirdPartyApp
var jsonFile = JObject.Parse(driveFile);
var file = ServiceProvider.GetService<File<string>>();
var file = new File<string>();
file.ID = ThirdPartySelector.BuildAppFileId(AppAttr, jsonFile.Value<string>("id"));
file.Title = Global.ReplaceInvalidCharsAndTruncate(GetCorrectTitle(jsonFile));
file.CreateOn = TenantUtil.DateTimeFromUtc(jsonFile.Value<DateTime>("createdTime"));
file.ModifiedOn = TenantUtil.DateTimeFromUtc(jsonFile.Value<DateTime>("modifiedTime"));
file.ContentLength = Convert.ToInt64(jsonFile.Value<string>("size"));
file.ModifiedByString = jsonFile["lastModifyingUser"]["displayName"].Value<string>();
file._modifiedByString = jsonFile["lastModifyingUser"]["displayName"].Value<string>();
file.ProviderKey = "Google";
var owners = jsonFile["owners"];
if (owners != null)
{
file.CreateByString = owners[0]["displayName"].Value<string>();
file._createByString = owners[0]["displayName"].Value<string>();
}
editable = jsonFile["capabilities"]["canEdit"].Value<bool>();

View File

@ -31,11 +31,8 @@ using ASC.Common;
using ASC.Common.Logging;
using ASC.Core.ChunkedUploader;
using ASC.Files.Core;
using ASC.Web.Core.Files;
using ASC.Web.Files.Classes;
using ASC.Web.Studio.Core;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
@ -46,21 +43,18 @@ namespace ASC.Web.Files.Utils
{
public static readonly TimeSpan SlidingExpiration = TimeSpan.FromHours(12);
private IOptionsMonitor<ILog> Options { get; }
private IServiceProvider ServiceProvider { get; }
private IOptionsMonitor<ILog> Options { get; }
private GlobalStore GlobalStore { get; }
private SetupInfo SetupInfo { get; }
private TempPath TempPath { get; }
public ChunkedUploadSessionHolder(
IOptionsMonitor<ILog> options,
IServiceProvider serviceProvider,
GlobalStore globalStore,
SetupInfo setupInfo,
TempPath tempPath)
{
Options = options;
ServiceProvider = serviceProvider;
Options = options;
GlobalStore = globalStore;
SetupInfo = setupInfo;
TempPath = tempPath;
@ -90,11 +84,6 @@ namespace ASC.Web.Files.Utils
{
using var stream = CommonSessionHolder(false).GetStream(sessionId);
var chunkedUploadSession = ChunkedUploadSession<T>.Deserialize(stream);
chunkedUploadSession.File.Global = ServiceProvider.GetService<Global>();
chunkedUploadSession.File.FilesLinkUtility = ServiceProvider.GetService<FilesLinkUtility>();
chunkedUploadSession.File.FileUtility = ServiceProvider.GetService<FileUtility>();
chunkedUploadSession.File.FileConverter = ServiceProvider.GetService<FileConverter>();
chunkedUploadSession.File.FileTracker = ServiceProvider.GetService<FileTrackerHelper>();
return chunkedUploadSession;
}

View File

@ -777,7 +777,14 @@ namespace ASC.Web.Files.Utils
,
SortedByType.Author => (x, y) =>
{
var cmp = c * string.Compare(x.CreateByString, y.CreateByString);
var fileHelper = ServiceProvider.GetService<FileHelper<T>>();
fileHelper.FileEntry = x;
var xCreateByString = fileHelper.CreateByString;
fileHelper.FileEntry = y;
var yCreateByString = fileHelper.CreateByString;
var cmp = c * string.Compare(xCreateByString, yCreateByString);
return cmp == 0 ? x.Title.EnumerableComparer(y.Title) : cmp;
}
,
@ -831,7 +838,7 @@ namespace ASC.Web.Files.Utils
public Folder<string> GetFakeThirdpartyFolder<T>(IProviderInfo providerInfo, string parentFolderId = null)
{
//Fake folder. Don't send request to third party
var folder = ServiceProvider.GetService<Folder<string>>();
var folder = new Folder<string>();
folder.FolderID = parentFolderId;
@ -1105,13 +1112,15 @@ namespace ASC.Web.Files.Utils
try
{
var currFile = fileDao.GetFile(fileId);
var newFile = ServiceProvider.GetService<File<T>>();
var newFile = new File<T>();
var fileHelper = ServiceProvider.GetService<FileHelper<T>>();
fileHelper.FileEntry = currFile;
newFile.ID = fromFile.ID;
newFile.Version = currFile.Version + 1;
newFile.VersionGroup = currFile.VersionGroup;
newFile.Title = FileUtility.ReplaceFileExtension(currFile.Title, FileUtility.GetFileExtension(fromFile.Title));
newFile.FileStatus = currFile.FileStatus;
newFile._status = fileHelper.FileStatus;
newFile.FolderID = currFile.FolderID;
newFile.CreateBy = currFile.CreateBy;
newFile.CreateOn = currFile.CreateOn;

View File

@ -769,7 +769,7 @@ namespace ASC.Web.Files.Utils
if (newFile == null)
{
newFile = ServiceProvider.GetService<File<T>>();
newFile = new File<T>();
newFile.FolderID = folderId;
}
}

View File

@ -24,15 +24,18 @@
*/
using System;
using System.Web;
using ASC.Common;
using ASC.Common.Utils;
using ASC.Core.Common;
using ASC.Files.Core;
using ASC.Files.Core;
using ASC.Files.Core.Security;
using ASC.Web.Core.Files;
using ASC.Web.Files.Classes;
using ASC.Web.Files.Classes;
using Microsoft.Extensions.DependencyInjection;
using FileShare = ASC.Files.Core.Security.FileShare;
@ -45,25 +48,30 @@ namespace ASC.Web.Files.Utils
private FilesLinkUtility FilesLinkUtility { get; }
private BaseCommonLinkUtility BaseCommonLinkUtility { get; }
private Global Global { get; }
private FileSecurity FileSecurity { get; }
private FileSecurity FileSecurity { get; }
private IServiceProvider ServiceProvider { get; }
public FileShareLink(
FileUtility fileUtility,
FilesLinkUtility filesLinkUtility,
BaseCommonLinkUtility baseCommonLinkUtility,
Global global,
FileSecurity fileSecurity)
FileSecurity fileSecurity,
IServiceProvider serviceProvider)
{
FileUtility = fileUtility;
FilesLinkUtility = filesLinkUtility;
BaseCommonLinkUtility = baseCommonLinkUtility;
Global = global;
FileSecurity = fileSecurity;
FileSecurity = fileSecurity;
ServiceProvider = serviceProvider;
}
public string GetLink<T>(File<T> file, bool withHash = true)
{
var url = file.DownloadUrl;
{
var fileHelper = ServiceProvider.GetService<FileHelper<T>>();
fileHelper.FileEntry = file;
var url = fileHelper.DownloadUrl;
if (FileUtility.CanWebView(file.Title))
url = FilesLinkUtility.GetFileWebPreviewUrl(FileUtility, file.Title, file.ID);

View File

@ -44,8 +44,6 @@ using ASC.Web.Files.Helpers;
using ASC.Web.Studio.Core;
using ASC.Web.Studio.UserControls.Statistics;
using ASC.Web.Studio.Utility;
using Microsoft.Extensions.DependencyInjection;
namespace ASC.Web.Files.Utils
{
@ -162,7 +160,7 @@ namespace ASC.Web.Files.Utils
return file;
}
var newFile = ServiceProvider.GetService<File<T>>();
var newFile = new File<T>();
newFile.FolderID = folderId;
newFile.Title = fileName;
return newFile;
@ -215,7 +213,7 @@ namespace ASC.Web.Files.Utils
if (folder == null)
{
var newFolder = ServiceProvider.GetService<Folder<T>>();
var newFolder = new Folder<T>();
newFolder.Title = subFolderTitle;
newFolder.FolderID = folderId;
@ -252,7 +250,7 @@ namespace ASC.Web.Files.Utils
public ChunkedUploadSession<T> InitiateUpload<T>(T folderId, T fileId, string fileName, long contentLength, bool encrypted)
{
var file = ServiceProvider.GetService<File<T>>();
var file = new File<T>();
file.ID = fileId;
file.FolderID = folderId;
file.Title = fileName;