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

View File

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

View File

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

View File

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

View File

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

View File

@ -30,8 +30,6 @@ using System.Text.Json.Serialization;
using ASC.Common; using ASC.Common;
using ASC.Web.Core.Files; using ASC.Web.Core.Files;
using ASC.Web.Files.Classes;
using ASC.Web.Files.Utils;
using ASC.Web.Studio.Core; using ASC.Web.Studio.Core;
namespace ASC.Files.Core namespace ASC.Files.Core
@ -61,63 +59,38 @@ namespace ASC.Files.Core
[DebuggerDisplay("{Title} ({ID} v{Version})")] [DebuggerDisplay("{Title} ({ID} v{Version})")]
public class File<T> : FileEntry<T> public class File<T> : FileEntry<T>
{ {
private FileStatus _status; public 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 File() public File()
{ {
Version = 1;
VersionGroup = 1;
FileEntryType = FileEntryType.File;
} }
public int Version { get; set; } public int Version { get; set; }
[JsonPropertyName("version_group")]
public int VersionGroup { get; set; } public int VersionGroup { get; set; }
public string Comment { get; set; } public string Comment { get; set; }
[JsonIgnore]
public string PureTitle public string PureTitle
{ {
get { return base.Title; } get { return Title; }
set { base.Title = value; } 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; } public long ContentLength { get; set; }
[JsonPropertyName("content_length_string")] [JsonIgnore]
public string ContentLengthString public string ContentLengthString
{ {
get { return FileSizeComment.FilesSizeToString(ContentLength); } get { return FileSizeComment.FilesSizeToString(ContentLength); }
set { }
} }
[JsonIgnore]
public FilterType FilterType public FilterType FilterType
{ {
get 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; } public bool Locked { get; set; }
[JsonPropertyName("locked_by")]
public string LockedBy { get; set; } public string LockedBy { get; set; }
[JsonIgnore]
public override bool IsNew public override bool IsNew
{ {
get { return (_status & FileStatus.IsNew) == FileStatus.IsNew; } get { return (_status & FileStatus.IsNew) == FileStatus.IsNew; }
@ -211,18 +159,13 @@ namespace ASC.Files.Core
public bool Encrypted { get; set; } public bool Encrypted { get; set; }
[JsonPropertyName("thumbnail_status")]
public Thumbnail ThumbnailStatus { get; set; } public Thumbnail ThumbnailStatus { get; set; }
public ForcesaveType Forcesave { get; set; } public ForcesaveType Forcesave { get; set; }
public string DownloadUrl
{
get { return FilesLinkUtility.GetFileDownloadUrl(ID); }
}
public string ConvertedType { get; set; } public string ConvertedType { get; set; }
[JsonIgnore]
public string ConvertedExtension public string ConvertedExtension
{ {
get get
@ -241,17 +184,6 @@ namespace ASC.Files.Core
} }
public object NativeAccessor { get; set; } 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 System.Text.Json.Serialization;
using ASC.Files.Core.Security; using ASC.Files.Core.Security;
using ASC.Web.Files.Classes;
namespace ASC.Files.Core namespace ASC.Files.Core
{ {
[Serializable] [Serializable]
public abstract class FileEntry : ICloneable public abstract class FileEntry : ICloneable
{ {
public FileEntry(Global global) public string Title { get; set; }
{
Global = global;
}
public FileEntry()
{
}
public virtual string Title { get; set; }
[JsonPropertyName("create_by_id")]
public Guid CreateBy { get; set; } public Guid CreateBy { get; set; }
[JsonPropertyName("create_by")] [JsonIgnore]
public string CreateByString
{
get { return !CreateBy.Equals(Guid.Empty) ? Global.GetUserName(CreateBy) : _createByString; }
set { _createByString = value; }
}
[JsonPropertyName("create_on")]
public string CreateOnString public string CreateOnString
{ {
get { return CreateOn.Equals(default) ? null : CreateOn.ToString("g"); } get { return CreateOn.Equals(default) ? null : CreateOn.ToString("g"); }
} }
[JsonPropertyName("modified_on")] [JsonIgnore]
public string ModifiedOnString public string ModifiedOnString
{ {
get { return ModifiedOn.Equals(default) ? null : ModifiedOn.ToString("g"); } get { return ModifiedOn.Equals(default) ? null : ModifiedOn.ToString("g"); }
} }
[JsonPropertyName("modified_by_id")]
public Guid ModifiedBy { get; set; } 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 string Error { get; set; }
public FileShare Access { get; set; } public FileShare Access { get; set; }
public bool Shared { get; set; } public bool Shared { get; set; }
[JsonPropertyName("provider_id")]
public int ProviderId { get; set; } public int ProviderId { get; set; }
[JsonPropertyName("provider_key")] public string ProviderKey { get; set; }
public string ProviderKey { get; set; }
[JsonIgnore]
public bool ProviderEntry public bool ProviderEntry
{ {
get { return !string.IsNullOrEmpty(ProviderKey); } get { return !string.IsNullOrEmpty(ProviderKey); }
@ -107,12 +80,8 @@ namespace ASC.Files.Core
public FileEntryType FileEntryType; public FileEntryType FileEntryType;
[NonSerialized] public string _modifiedByString;
public Global Global; public string _createByString;
private string _modifiedByString;
private string _createByString;
public override string ToString() public override string ToString()
{ {
@ -128,14 +97,6 @@ namespace ASC.Files.Core
[Serializable] [Serializable]
public abstract class FileEntry<T> : FileEntry, ICloneable public abstract class FileEntry<T> : FileEntry, ICloneable
{ {
public FileEntry(Global global) : base(global)
{
}
public FileEntry()
{
}
public T ID { get; set; } public T ID { get; set; }
@ -143,7 +104,6 @@ namespace ASC.Files.Core
private T _folderIdDisplay; private T _folderIdDisplay;
[JsonPropertyName("folder_id")]
public T FolderIdDisplay public T FolderIdDisplay
{ {
get get
@ -155,7 +115,9 @@ namespace ASC.Files.Core
set { _folderIdDisplay = value; } set { _folderIdDisplay = value; }
} }
public T RootFolderId { get; set; } public T RootFolderId { get; set; }
[JsonIgnore]
public string UniqID public string UniqID
{ {
get { return string.Format("{0}_{1}", GetType().Name.ToLower(), ID); } 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 System.Diagnostics;
using ASC.Common; using ASC.Common;
using ASC.Web.Files.Classes;
namespace ASC.Files.Core namespace ASC.Files.Core
{ {
@ -84,8 +83,7 @@ namespace ASC.Files.Core
set { NewForMe = Convert.ToInt32(value); } set { NewForMe = Convert.ToInt32(value); }
} }
public Folder(Global global) public Folder()
: base(global)
{ {
Title = string.Empty; Title = string.Empty;
FileEntryType = FileEntryType.Folder; FileEntryType = FileEntryType.Folder;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -55,9 +55,8 @@ using ASC.Web.Studio.Core;
using DocuSign.eSign.Api; using DocuSign.eSign.Api;
using DocuSign.eSign.Client; using DocuSign.eSign.Client;
using DocuSign.eSign.Model; using DocuSign.eSign.Model;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives; 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.FolderID = folderId;
file.Comment = FilesCommonResource.CommentCreateByDocuSign; file.Comment = FilesCommonResource.CommentCreateByDocuSign;
file.Title = FileUtility.ReplaceFileExtension(documentName, ".pdf"); file.Title = FileUtility.ReplaceFileExtension(documentName, ".pdf");

View File

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

View File

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

View File

@ -39,6 +39,8 @@ using ASC.Web.Files.Helpers;
using ASC.Web.Files.Utils; using ASC.Web.Files.Utils;
using ASC.Web.Studio.Core; using ASC.Web.Studio.Core;
using Microsoft.Extensions.DependencyInjection;
namespace ASC.Web.Files.Configuration namespace ASC.Web.Files.Configuration
{ {
public class SearchHandler public class SearchHandler
@ -72,6 +74,7 @@ namespace ASC.Web.Files.Configuration
private FileUtility FileUtility { get; } private FileUtility FileUtility { get; }
private PathProvider PathProvider { get; } private PathProvider PathProvider { get; }
private ThirdpartyConfiguration ThirdpartyConfiguration { get; } private ThirdpartyConfiguration ThirdpartyConfiguration { get; }
private IServiceProvider ServiceProvider { get; }
public SearchHandler( public SearchHandler(
FileSecurity fileSecurity, FileSecurity fileSecurity,
@ -82,7 +85,8 @@ namespace ASC.Web.Files.Configuration
FilesLinkUtility filesLinkUtility, FilesLinkUtility filesLinkUtility,
FileUtility fileUtility, FileUtility fileUtility,
PathProvider pathProvider, PathProvider pathProvider,
ThirdpartyConfiguration thirdpartyConfiguration) ThirdpartyConfiguration thirdpartyConfiguration,
IServiceProvider serviceProvider)
{ {
FileSecurity = fileSecurity; FileSecurity = fileSecurity;
DaoFactory = daoFactory; DaoFactory = daoFactory;
@ -93,6 +97,7 @@ namespace ASC.Web.Files.Configuration
FileUtility = fileUtility; FileUtility = fileUtility;
PathProvider = pathProvider; PathProvider = pathProvider;
ThirdpartyConfiguration = thirdpartyConfiguration; ThirdpartyConfiguration = thirdpartyConfiguration;
ServiceProvider = serviceProvider;
} }
public IEnumerable<File<int>> SearchFiles(string text) public IEnumerable<File<int>> SearchFiles(string text)
@ -130,39 +135,49 @@ namespace ASC.Web.Files.Configuration
public SearchResultItem[] Search(string text) public SearchResultItem[] Search(string text)
{ {
var folderDao = DaoFactory.GetFolderDao<int>(); var folderDao = DaoFactory.GetFolderDao<int>();
var result = SearchFiles(text) var files = SearchFiles(text);
.Select(r => new SearchResultItem var helper = ServiceProvider.GetService<FileHelper<int>>();
{ List<SearchResultItem> list = new List<SearchResultItem>();
Name = r.Title ?? string.Empty, foreach (var file in files)
Description = string.Empty, {
URL = FilesLinkUtility.GetFileWebPreviewUrl(FileUtility, r.Title, r.ID), helper.FileEntry = file;
Date = r.ModifiedOn, var searchResultItem = new SearchResultItem
Additional = new Dictionary<string, object> {
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() }, { "Author", helper.CreateByString.HtmlEncode() },
{ "Path", FolderPathBuilder<int>(EntryManager.GetBreadCrumbs(r.FolderID, folderDao)) }, { "Path", FolderPathBuilder<int>(EntryManager.GetBreadCrumbs(file.FolderID, folderDao)) },
{ "Size", FileSizeComment.FilesSizeToString(r.ContentLength) } { "Size", FileSizeComment.FilesSizeToString(file.ContentLength) }
} }
} };
); list.Add(searchResultItem);
}
var resultFolder = SearchFolders(text) var folders = SearchFolders(text);
.Select(f => foreach (var folder in folders)
new SearchResultItem {
{ helper.FileEntry = folder;
Name = f.Title ?? string.Empty, var searchResultItem = new SearchResultItem
Description = string.Empty, {
URL = PathProvider.GetFolderUrl(f), Name = folder.Title ?? string.Empty,
Date = f.ModifiedOn, Description = string.Empty,
Additional = new Dictionary<string, object> URL = PathProvider.GetFolderUrl(folder),
Date = folder.ModifiedOn,
Additional = new Dictionary<string, object>
{ {
{ "Author", f.CreateByString.HtmlEncode() }, { "Author", helper.CreateByString.HtmlEncode() },
{ "Path", FolderPathBuilder<int>(EntryManager.GetBreadCrumbs(f.ID, folderDao)) }, { "Path", FolderPathBuilder<int>(EntryManager.GetBreadCrumbs(folder.ID, folderDao)) },
{ "IsFolder", true } { "IsFolder", true }
} }
}); };
list.Add(searchResultItem);
}
return result.Concat(resultFolder).ToArray(); return list.ToArray();
} }
private static string FolderPathBuilder<T>(IEnumerable<FileEntry> folders) 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.Files.Classes;
using ASC.Web.Studio.Utility; using ASC.Web.Studio.Utility;
using Microsoft.Extensions.DependencyInjection;
using FileShare = ASC.Files.Core.Security.FileShare; using FileShare = ASC.Files.Core.Security.FileShare;
namespace ASC.Api.Documents namespace ASC.Api.Documents
{ {
@ -153,7 +155,8 @@ namespace ASC.Api.Documents
private GlobalFolderHelper GlobalFolderHelper { get; } private GlobalFolderHelper GlobalFolderHelper { get; }
private CommonLinkUtility CommonLinkUtility { get; } private CommonLinkUtility CommonLinkUtility { get; }
private FilesLinkUtility FilesLinkUtility { get; } private FilesLinkUtility FilesLinkUtility { get; }
private FileUtility FileUtility { get; } private FileUtility FileUtility { get; }
private IServiceProvider ServiceProvider { get; }
public FileWrapperHelper( public FileWrapperHelper(
ApiDateTimeHelper apiDateTimeHelper, ApiDateTimeHelper apiDateTimeHelper,
@ -164,7 +167,8 @@ namespace ASC.Api.Documents
GlobalFolderHelper globalFolderHelper, GlobalFolderHelper globalFolderHelper,
CommonLinkUtility commonLinkUtility, CommonLinkUtility commonLinkUtility,
FilesLinkUtility filesLinkUtility, FilesLinkUtility filesLinkUtility,
FileUtility fileUtility) FileUtility fileUtility,
IServiceProvider serviceProvider)
: base(apiDateTimeHelper, employeeWrapperHelper) : base(apiDateTimeHelper, employeeWrapperHelper)
{ {
AuthContext = authContext; AuthContext = authContext;
@ -173,7 +177,8 @@ namespace ASC.Api.Documents
GlobalFolderHelper = globalFolderHelper; GlobalFolderHelper = globalFolderHelper;
CommonLinkUtility = commonLinkUtility; CommonLinkUtility = commonLinkUtility;
FilesLinkUtility = filesLinkUtility; FilesLinkUtility = filesLinkUtility;
FileUtility = fileUtility; FileUtility = fileUtility;
ServiceProvider = serviceProvider;
} }
public FileWrapper<T> Get<T>(File<T> file, List<Tuple<FileEntry<T>, bool>> folders = null) 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) private FileWrapper<T> GetFileWrapper<T>(File<T> file)
{ {
var fileHelper = ServiceProvider.GetService<FileHelper<T>>();
fileHelper.FileEntry = file;
var result = Get<FileWrapper<T>, T>(file); var result = Get<FileWrapper<T>, T>(file);
result.FileExst = FileUtility.GetFileExtension(file.Title); result.FileExst = FileUtility.GetFileExtension(file.Title);
@ -219,7 +227,7 @@ namespace ASC.Api.Documents
result.Version = file.Version; result.Version = file.Version;
result.VersionGroup = file.VersionGroup; result.VersionGroup = file.VersionGroup;
result.ContentLength = file.ContentLengthString; result.ContentLength = file.ContentLengthString;
result.FileStatus = file.FileStatus; result.FileStatus = fileHelper.FileStatus;
result.PureContentLength = file.ContentLength.NullIfDefault(); result.PureContentLength = file.ContentLength.NullIfDefault();
result.Comment = file.Comment; result.Comment = file.Comment;
result.Encrypted = file.Encrypted.NullIfDefault(); result.Encrypted = file.Encrypted.NullIfDefault();
@ -228,7 +236,7 @@ namespace ASC.Api.Documents
try 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)); 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] [Transient]
public class InfoConfig<T> public class InfoConfig<T>
{ {
public File<T> File; public File<T> File;
private FileHelper<T> FileHelper;
public EditorType Type = EditorType.Desktop; public EditorType Type = EditorType.Desktop;
private string _breadCrumbs; 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; BreadCrumbsManager = breadCrumbsManager;
FileSharing = fileSharing; FileSharing = fileSharing;
SecurityContext = securityContext; SecurityContext = securityContext;
UserManager = userManager; UserManager = userManager;
FileHelper = fileHelper;
} }
public bool? Favorite public bool? Favorite
@ -245,7 +247,10 @@ namespace ASC.Web.Files.Services.DocumentService
public string Owner public string Owner
{ {
set { } set { }
get { return File.CreateByString; } get {
FileHelper.FileEntry = File;
return FileHelper.CreateByString;
}
} }
public string Uploaded public string Uploaded

View File

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

View File

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

View File

@ -777,7 +777,14 @@ namespace ASC.Web.Files.Utils
, ,
SortedByType.Author => (x, y) => 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; 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) public Folder<string> GetFakeThirdpartyFolder<T>(IProviderInfo providerInfo, string parentFolderId = null)
{ {
//Fake folder. Don't send request to third party //Fake folder. Don't send request to third party
var folder = ServiceProvider.GetService<Folder<string>>(); var folder = new Folder<string>();
folder.FolderID = parentFolderId; folder.FolderID = parentFolderId;
@ -1105,13 +1112,15 @@ namespace ASC.Web.Files.Utils
try try
{ {
var currFile = fileDao.GetFile(fileId); 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.ID = fromFile.ID;
newFile.Version = currFile.Version + 1; newFile.Version = currFile.Version + 1;
newFile.VersionGroup = currFile.VersionGroup; newFile.VersionGroup = currFile.VersionGroup;
newFile.Title = FileUtility.ReplaceFileExtension(currFile.Title, FileUtility.GetFileExtension(fromFile.Title)); newFile.Title = FileUtility.ReplaceFileExtension(currFile.Title, FileUtility.GetFileExtension(fromFile.Title));
newFile.FileStatus = currFile.FileStatus; newFile._status = fileHelper.FileStatus;
newFile.FolderID = currFile.FolderID; newFile.FolderID = currFile.FolderID;
newFile.CreateBy = currFile.CreateBy; newFile.CreateBy = currFile.CreateBy;
newFile.CreateOn = currFile.CreateOn; newFile.CreateOn = currFile.CreateOn;

View File

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

View File

@ -24,15 +24,18 @@
*/ */
using System;
using System.Web; using System.Web;
using ASC.Common; using ASC.Common;
using ASC.Common.Utils; using ASC.Common.Utils;
using ASC.Core.Common; using ASC.Core.Common;
using ASC.Files.Core; using ASC.Files.Core;
using ASC.Files.Core.Security; using ASC.Files.Core.Security;
using ASC.Web.Core.Files; 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; using FileShare = ASC.Files.Core.Security.FileShare;
@ -45,25 +48,30 @@ namespace ASC.Web.Files.Utils
private FilesLinkUtility FilesLinkUtility { get; } private FilesLinkUtility FilesLinkUtility { get; }
private BaseCommonLinkUtility BaseCommonLinkUtility { get; } private BaseCommonLinkUtility BaseCommonLinkUtility { get; }
private Global Global { get; } private Global Global { get; }
private FileSecurity FileSecurity { get; } private FileSecurity FileSecurity { get; }
private IServiceProvider ServiceProvider { get; }
public FileShareLink( public FileShareLink(
FileUtility fileUtility, FileUtility fileUtility,
FilesLinkUtility filesLinkUtility, FilesLinkUtility filesLinkUtility,
BaseCommonLinkUtility baseCommonLinkUtility, BaseCommonLinkUtility baseCommonLinkUtility,
Global global, Global global,
FileSecurity fileSecurity) FileSecurity fileSecurity,
IServiceProvider serviceProvider)
{ {
FileUtility = fileUtility; FileUtility = fileUtility;
FilesLinkUtility = filesLinkUtility; FilesLinkUtility = filesLinkUtility;
BaseCommonLinkUtility = baseCommonLinkUtility; BaseCommonLinkUtility = baseCommonLinkUtility;
Global = global; Global = global;
FileSecurity = fileSecurity; FileSecurity = fileSecurity;
ServiceProvider = serviceProvider;
} }
public string GetLink<T>(File<T> file, bool withHash = true) 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)) if (FileUtility.CanWebView(file.Title))
url = FilesLinkUtility.GetFileWebPreviewUrl(FileUtility, file.Title, file.ID); 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.Core;
using ASC.Web.Studio.UserControls.Statistics; using ASC.Web.Studio.UserControls.Statistics;
using ASC.Web.Studio.Utility; using ASC.Web.Studio.Utility;
using Microsoft.Extensions.DependencyInjection;
namespace ASC.Web.Files.Utils namespace ASC.Web.Files.Utils
{ {
@ -162,7 +160,7 @@ namespace ASC.Web.Files.Utils
return file; return file;
} }
var newFile = ServiceProvider.GetService<File<T>>(); var newFile = new File<T>();
newFile.FolderID = folderId; newFile.FolderID = folderId;
newFile.Title = fileName; newFile.Title = fileName;
return newFile; return newFile;
@ -215,7 +213,7 @@ namespace ASC.Web.Files.Utils
if (folder == null) if (folder == null)
{ {
var newFolder = ServiceProvider.GetService<Folder<T>>(); var newFolder = new Folder<T>();
newFolder.Title = subFolderTitle; newFolder.Title = subFolderTitle;
newFolder.FolderID = folderId; 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) 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.ID = fileId;
file.FolderID = folderId; file.FolderID = folderId;
file.Title = fileName; file.Title = fileName;