2022-03-03 18:01:34 +00:00
|
|
|
|
using FileShare = ASC.Files.Core.Security.FileShare;
|
2020-03-18 13:19:37 +00:00
|
|
|
|
using MimeMapping = ASC.Common.Web.MimeMapping;
|
|
|
|
|
using SortedByType = ASC.Files.Core.SortedByType;
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
namespace ASC.Files.Helpers;
|
|
|
|
|
|
|
|
|
|
[Scope]
|
|
|
|
|
public class FilesControllerHelper<T>
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
private readonly ApiContext _apiContext;
|
|
|
|
|
private readonly FileStorageService<T> _fileStorageService;
|
|
|
|
|
private readonly GlobalFolderHelper _globalFolderHelper;
|
|
|
|
|
private readonly CoreBaseSettings _coreBaseSettings;
|
|
|
|
|
private readonly FileUtility _fileUtility;
|
2022-03-04 10:25:12 +00:00
|
|
|
|
private readonly FileDtoHelper _fileDtoHelper;
|
2022-03-03 18:01:34 +00:00
|
|
|
|
private readonly FilesSettingsHelper _filesSettingsHelper;
|
|
|
|
|
private readonly FilesLinkUtility _filesLinkUtility;
|
|
|
|
|
private readonly FileUploader _fileUploader;
|
|
|
|
|
private readonly DocumentServiceHelper _documentServiceHelper;
|
|
|
|
|
private readonly TenantManager _tenantManager;
|
|
|
|
|
private readonly SecurityContext _securityContext;
|
2022-03-04 10:25:12 +00:00
|
|
|
|
private readonly FolderDtoHelper _folderDtoHelper;
|
|
|
|
|
private readonly FileOperationDtoHelper _fileOperationDtoHelper;
|
|
|
|
|
private readonly FileShareDtoHelper _fileShareDtoHelper;
|
2022-03-03 18:01:34 +00:00
|
|
|
|
private readonly FileShareParamsHelper _fileShareParamsHelper;
|
|
|
|
|
private readonly EntryManager _entryManager;
|
2022-03-04 10:25:12 +00:00
|
|
|
|
private readonly FolderContentDtoHelper _folderContentDtoHelper;
|
2022-03-03 18:01:34 +00:00
|
|
|
|
private readonly ChunkedUploadSessionHelper _chunkedUploadSessionHelper;
|
|
|
|
|
private readonly DocumentServiceTrackerHelper _documentServiceTracker;
|
|
|
|
|
private readonly SettingsManager _settingsManager;
|
2022-03-04 10:25:12 +00:00
|
|
|
|
private readonly EncryptionKeyPairDtoHelper _encryptionKeyPairHelper;
|
2022-03-03 18:01:34 +00:00
|
|
|
|
private readonly IHttpContextAccessor _httpContextAccessor;
|
|
|
|
|
private readonly FileConverter _fileConverter;
|
|
|
|
|
private readonly ApiDateTimeHelper _apiDateTimeHelper;
|
|
|
|
|
private readonly UserManager _userManager;
|
|
|
|
|
private readonly DisplayUserSettingsHelper _displayUserSettingsHelper;
|
|
|
|
|
public readonly SocketManager _socketManager;
|
|
|
|
|
public readonly IServiceProvider _serviceProvider;
|
|
|
|
|
private readonly ILog _logger;
|
|
|
|
|
private readonly IHttpClientFactory _clientFactory;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="context"></param>
|
|
|
|
|
/// <param name="fileStorageService"></param>
|
|
|
|
|
public FilesControllerHelper(
|
|
|
|
|
ApiContext context,
|
|
|
|
|
FileStorageService<T> fileStorageService,
|
2022-03-04 10:25:12 +00:00
|
|
|
|
FileDtoHelper fileDtoHelper,
|
2022-03-03 18:01:34 +00:00
|
|
|
|
FilesSettingsHelper filesSettingsHelper,
|
|
|
|
|
FilesLinkUtility filesLinkUtility,
|
|
|
|
|
FileUploader fileUploader,
|
|
|
|
|
DocumentServiceHelper documentServiceHelper,
|
|
|
|
|
TenantManager tenantManager,
|
|
|
|
|
SecurityContext securityContext,
|
2022-03-04 10:25:12 +00:00
|
|
|
|
FolderDtoHelper folderDtoHelper,
|
|
|
|
|
FileOperationDtoHelper fileOperationDtoHelper,
|
|
|
|
|
FileShareDtoHelper fileShareDtoHelper,
|
2022-03-03 18:01:34 +00:00
|
|
|
|
FileShareParamsHelper fileShareParamsHelper,
|
|
|
|
|
EntryManager entryManager,
|
2022-03-04 10:25:12 +00:00
|
|
|
|
FolderContentDtoHelper folderContentDtoHelper,
|
2022-03-03 18:01:34 +00:00
|
|
|
|
ChunkedUploadSessionHelper chunkedUploadSessionHelper,
|
|
|
|
|
DocumentServiceTrackerHelper documentServiceTracker,
|
|
|
|
|
IOptionsMonitor<ILog> optionMonitor,
|
|
|
|
|
SettingsManager settingsManager,
|
2022-03-04 10:25:12 +00:00
|
|
|
|
EncryptionKeyPairDtoHelper encryptionKeyPairHelper,
|
2022-03-03 18:01:34 +00:00
|
|
|
|
IHttpContextAccessor httpContextAccessor,
|
|
|
|
|
FileConverter fileConverter,
|
|
|
|
|
ApiDateTimeHelper apiDateTimeHelper,
|
|
|
|
|
UserManager userManager,
|
|
|
|
|
DisplayUserSettingsHelper displayUserSettingsHelper,
|
|
|
|
|
IServiceProvider serviceProvider,
|
|
|
|
|
SocketManager socketManager,
|
|
|
|
|
IHttpClientFactory clientFactory,
|
|
|
|
|
GlobalFolderHelper globalFolderHelper,
|
|
|
|
|
CoreBaseSettings coreBaseSettings,
|
|
|
|
|
FileUtility fileUtility)
|
|
|
|
|
{
|
|
|
|
|
_apiContext = context;
|
|
|
|
|
_fileStorageService = fileStorageService;
|
2022-03-04 10:25:12 +00:00
|
|
|
|
_fileDtoHelper = fileDtoHelper;
|
2022-03-03 18:01:34 +00:00
|
|
|
|
_filesSettingsHelper = filesSettingsHelper;
|
|
|
|
|
_filesLinkUtility = filesLinkUtility;
|
|
|
|
|
_fileUploader = fileUploader;
|
|
|
|
|
_documentServiceHelper = documentServiceHelper;
|
|
|
|
|
_tenantManager = tenantManager;
|
|
|
|
|
_securityContext = securityContext;
|
2022-03-04 10:25:12 +00:00
|
|
|
|
_folderDtoHelper = folderDtoHelper;
|
|
|
|
|
_fileOperationDtoHelper = fileOperationDtoHelper;
|
|
|
|
|
_fileShareDtoHelper = fileShareDtoHelper;
|
2022-03-03 18:01:34 +00:00
|
|
|
|
_fileShareParamsHelper = fileShareParamsHelper;
|
|
|
|
|
_entryManager = entryManager;
|
2022-03-04 10:25:12 +00:00
|
|
|
|
_folderContentDtoHelper = folderContentDtoHelper;
|
2022-03-03 18:01:34 +00:00
|
|
|
|
_chunkedUploadSessionHelper = chunkedUploadSessionHelper;
|
|
|
|
|
_documentServiceTracker = documentServiceTracker;
|
|
|
|
|
_settingsManager = settingsManager;
|
|
|
|
|
_encryptionKeyPairHelper = encryptionKeyPairHelper;
|
|
|
|
|
_apiDateTimeHelper = apiDateTimeHelper;
|
|
|
|
|
_userManager = userManager;
|
|
|
|
|
_displayUserSettingsHelper = displayUserSettingsHelper;
|
|
|
|
|
_serviceProvider = serviceProvider;
|
|
|
|
|
_socketManager = socketManager;
|
|
|
|
|
_httpContextAccessor = httpContextAccessor;
|
|
|
|
|
_fileConverter = fileConverter;
|
|
|
|
|
_logger = optionMonitor.Get("ASC.Files");
|
|
|
|
|
_clientFactory = clientFactory;
|
|
|
|
|
_globalFolderHelper = globalFolderHelper;
|
|
|
|
|
_fileUtility = fileUtility;
|
|
|
|
|
_coreBaseSettings = coreBaseSettings;
|
|
|
|
|
}
|
2022-03-03 17:33:11 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
public async Task<SortedSet<int>> GetRootFoldersIdsAsync(bool withoutTrash, bool withoutAdditionalFolder)
|
|
|
|
|
{
|
|
|
|
|
var IsVisitor = _userManager.GetUsers(_securityContext.CurrentAccount.ID).IsVisitor(_userManager);
|
|
|
|
|
var IsOutsider = _userManager.GetUsers(_securityContext.CurrentAccount.ID).IsOutsider(_userManager);
|
|
|
|
|
var folders = new SortedSet<int>();
|
2022-03-03 17:33:11 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (IsOutsider)
|
|
|
|
|
{
|
|
|
|
|
withoutTrash = true;
|
|
|
|
|
withoutAdditionalFolder = true;
|
|
|
|
|
}
|
2022-03-03 17:33:11 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (!IsVisitor)
|
|
|
|
|
{
|
|
|
|
|
folders.Add(_globalFolderHelper.FolderMy);
|
|
|
|
|
}
|
2022-03-03 17:33:11 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (!_coreBaseSettings.Personal && !_userManager.GetUsers(_securityContext.CurrentAccount.ID).IsOutsider(_userManager))
|
|
|
|
|
{
|
|
|
|
|
folders.Add(await _globalFolderHelper.FolderShareAsync);
|
|
|
|
|
}
|
2022-03-03 17:33:11 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (!IsVisitor && !withoutAdditionalFolder)
|
|
|
|
|
{
|
|
|
|
|
if (_filesSettingsHelper.FavoritesSection)
|
2022-03-03 17:33:11 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
folders.Add(await _globalFolderHelper.FolderFavoritesAsync);
|
2022-03-03 17:33:11 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (_filesSettingsHelper.RecentSection)
|
2022-03-03 17:33:11 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
folders.Add(await _globalFolderHelper.FolderRecentAsync);
|
2022-03-03 17:33:11 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (!_coreBaseSettings.Personal && PrivacyRoomSettings.IsAvailable(_tenantManager))
|
2022-03-03 17:33:11 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
folders.Add(await _globalFolderHelper.FolderPrivacyAsync);
|
2022-03-03 17:33:11 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (!_coreBaseSettings.Personal)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
folders.Add(await _globalFolderHelper.FolderCommonAsync);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (!IsVisitor
|
|
|
|
|
&& !withoutAdditionalFolder
|
|
|
|
|
&& _fileUtility.ExtsWebTemplate.Count > 0
|
|
|
|
|
&& _filesSettingsHelper.TemplatesSection)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
folders.Add(await _globalFolderHelper.FolderTemplatesAsync);
|
|
|
|
|
}
|
2021-09-27 19:28:49 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (!withoutTrash)
|
|
|
|
|
{
|
|
|
|
|
folders.Add((int)_globalFolderHelper.FolderTrash);
|
|
|
|
|
}
|
2022-02-22 09:22:15 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return folders;
|
|
|
|
|
}
|
2022-02-22 09:22:15 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<FolderContentDto<T>> GetFolderAsync(T folderId, Guid userIdOrGroupId, FilterType filterType, bool withSubFolders)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var folderContentWrapper = await ToFolderContentWrapperAsync(folderId, userIdOrGroupId, filterType, withSubFolders);
|
2021-09-27 19:28:49 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return folderContentWrapper.NotFoundIfNull();
|
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<object> UploadFileAsync(T folderId, UploadRequestDto uploadModel)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
if (uploadModel.StoreOriginalFileFlag.HasValue)
|
|
|
|
|
{
|
|
|
|
|
_filesSettingsHelper.StoreOriginalFiles = uploadModel.StoreOriginalFileFlag.Value;
|
|
|
|
|
}
|
2021-09-27 19:28:49 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
IEnumerable<IFormFile> files = _httpContextAccessor.HttpContext.Request.Form.Files;
|
|
|
|
|
if (files == null || !files.Any())
|
|
|
|
|
{
|
|
|
|
|
files = uploadModel.Files;
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (files != null && files.Any())
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (files.Count() == 1)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
//Only one file. return it
|
|
|
|
|
var postedFile = files.First();
|
2022-01-24 17:43:24 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return await InsertFileAsync(folderId, postedFile.OpenReadStream(), postedFile.FileName, uploadModel.CreateNewIfExist, uploadModel.KeepConvertStatus);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
|
|
|
|
|
//For case with multiple files
|
|
|
|
|
var result = new List<object>();
|
|
|
|
|
|
|
|
|
|
foreach (var postedFile in uploadModel.Files)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
result.Add(await InsertFileAsync(folderId, postedFile.OpenReadStream(), postedFile.FileName, uploadModel.CreateNewIfExist, uploadModel.KeepConvertStatus));
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
|
|
|
|
|
return result;
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (uploadModel.File != null)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
var fileName = "file" + MimeMapping.GetExtention(uploadModel.ContentType.MediaType);
|
|
|
|
|
if (uploadModel.ContentDisposition != null)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
fileName = uploadModel.ContentDisposition.FileName;
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
return new List<FileDto<T>>
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
await InsertFileAsync(folderId, uploadModel.File.OpenReadStream(), fileName, uploadModel.CreateNewIfExist, uploadModel.KeepConvertStatus)
|
|
|
|
|
};
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
throw new InvalidOperationException("No input files");
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<FileDto<T>> InsertFileAsync(T folderId, Stream file, string title, bool? createNewIfExist, bool keepConvertStatus = false)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
try
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
var resultFile = await _fileUploader.ExecAsync(folderId, title, file.Length, file, createNewIfExist ?? !_filesSettingsHelper.UpdateIfExist, !keepConvertStatus);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
await _socketManager.CreateFileAsync(resultFile);
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
return await _fileDtoHelper.GetAsync(resultFile);
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
|
|
|
|
catch (FileNotFoundException e)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
throw new ItemNotFoundException("File not found", e);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
catch (DirectoryNotFoundException e)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
throw new ItemNotFoundException("Folder not found", e);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<FileDto<T>> UpdateFileStreamAsync(Stream file, T fileId, string fileExtension, bool encrypted = false, bool forcesave = false)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
try
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
var resultFile = await _fileStorageService.UpdateFileStreamAsync(fileId, file, fileExtension, encrypted, forcesave);
|
2020-12-29 13:04:50 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
return await _fileDtoHelper.GetAsync(resultFile);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
catch (FileNotFoundException e)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
throw new ItemNotFoundException("File not found", e);
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<FileDto<T>> SaveEditingAsync(T fileId, string fileExtension, string downloadUri, Stream stream, string doc, bool forcesave)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
return await _fileDtoHelper.GetAsync(await _fileStorageService.SaveEditingAsync(fileId, fileExtension, downloadUri, stream, doc, forcesave));
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
2021-10-12 10:14:33 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
public Task<string> StartEditAsync(T fileId, bool editingAlone, string doc)
|
|
|
|
|
{
|
|
|
|
|
return _fileStorageService.StartEditAsync(fileId, editingAlone, doc);
|
|
|
|
|
}
|
2021-10-12 10:14:33 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
public Task<KeyValuePair<bool, string>> TrackEditFileAsync(T fileId, Guid tabId, string docKeyForTrack, string doc, bool isFinish)
|
|
|
|
|
{
|
|
|
|
|
return _fileStorageService.TrackEditFileAsync(fileId, tabId, docKeyForTrack, doc, isFinish);
|
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
public async Task<Configuration<T>> OpenEditAsync(T fileId, int version, string doc, bool view)
|
|
|
|
|
{
|
|
|
|
|
var docParams = await _documentServiceHelper.GetParamsAsync(fileId, version, doc, true, !view, true);
|
|
|
|
|
var configuration = docParams.Configuration;
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
configuration.EditorType = EditorType.External;
|
|
|
|
|
if (configuration.EditorConfig.ModeWrite)
|
|
|
|
|
{
|
|
|
|
|
configuration.EditorConfig.CallbackUrl = _documentServiceTracker.GetCallbackUrl(configuration.Document.Info.GetFile().ID.ToString());
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (configuration.Document.Info.GetFile().RootFolderType == FolderType.Privacy && PrivacyRoomSettings.GetEnabled(_settingsManager))
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
var keyPair = _encryptionKeyPairHelper.GetKeyPair();
|
|
|
|
|
if (keyPair != null)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
configuration.EditorConfig.EncryptionKeys = new EncryptionKeysConfig
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
PrivateKeyEnc = keyPair.PrivateKeyEnc,
|
|
|
|
|
PublicKey = keyPair.PublicKey,
|
|
|
|
|
};
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (!configuration.Document.Info.GetFile().Encrypted && !configuration.Document.Info.GetFile().ProviderEntry) _entryManager.MarkAsRecent(configuration.Document.Info.GetFile());
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
configuration.Token = _documentServiceHelper.GetSignature(configuration);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return configuration;
|
|
|
|
|
}
|
2022-01-27 08:42:57 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
public async Task<object> CreateUploadSessionAsync(T folderId, string fileName, long fileSize, string relativePath, ApiDateTime lastModified, bool encrypted)
|
|
|
|
|
{
|
|
|
|
|
var file = await _fileUploader.VerifyChunkedUploadAsync(folderId, fileName, fileSize, _filesSettingsHelper.UpdateIfExist, lastModified, relativePath);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (_filesLinkUtility.IsLocalFileUploader)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
var session = await _fileUploader.InitiateUploadAsync(file.FolderID, file.ID ?? default, file.Title, file.ContentLength, encrypted);
|
2021-12-03 14:38:13 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
var responseObject = await _chunkedUploadSessionHelper.ToResponseObjectAsync(session, true);
|
2021-12-03 14:38:13 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return new
|
|
|
|
|
{
|
|
|
|
|
success = true,
|
|
|
|
|
data = responseObject
|
|
|
|
|
};
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
var createSessionUrl = _filesLinkUtility.GetInitiateUploadSessionUrl(_tenantManager.GetCurrentTenant().Id, file.FolderID, file.ID, file.Title, file.ContentLength, encrypted, _securityContext);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
var httpClient = _clientFactory.CreateClient();
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
var request = new HttpRequestMessage();
|
|
|
|
|
request.RequestUri = new Uri(createSessionUrl);
|
|
|
|
|
request.Method = HttpMethod.Post;
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
// hack for uploader.onlyoffice.com in api requests
|
|
|
|
|
var rewriterHeader = _apiContext.HttpContextAccessor.HttpContext.Request.Headers[HttpRequestExtensions.UrlRewriterHeader];
|
|
|
|
|
if (!string.IsNullOrEmpty(rewriterHeader))
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
request.Headers.Add(HttpRequestExtensions.UrlRewriterHeader, rewriterHeader.ToString());
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
using var response = await httpClient.SendAsync(request);
|
|
|
|
|
using var responseStream = await response.Content.ReadAsStreamAsync();
|
|
|
|
|
using var streamReader = new StreamReader(responseStream);
|
|
|
|
|
|
|
|
|
|
return JObject.Parse(await streamReader.ReadToEndAsync()); //result is json string
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public Task<FileDto<T>> CreateTextFileAsync(T folderId, string title, string content)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
if (title == null)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
throw new ArgumentNullException(nameof(title));
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
2022-01-11 15:27:06 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
//Try detect content
|
|
|
|
|
var extension = ".txt";
|
|
|
|
|
if (!string.IsNullOrEmpty(content))
|
2021-11-29 14:52:50 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (Regex.IsMatch(content, @"<([^\s>]*)(\s[^<]*)>"))
|
2021-11-29 14:52:50 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
extension = ".html";
|
2021-11-29 14:52:50 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return CreateFileAsync(folderId, title, content, extension);
|
|
|
|
|
}
|
2022-02-22 09:22:15 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
private async Task<FileDto<T>> CreateFileAsync(T folderId, string title, string content, string extension)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
using var memStream = new MemoryStream(Encoding.UTF8.GetBytes(content));
|
|
|
|
|
var file = await _fileUploader.ExecAsync(folderId,
|
|
|
|
|
title.EndsWith(extension, StringComparison.OrdinalIgnoreCase) ? title : (title + extension),
|
|
|
|
|
memStream.Length, memStream);
|
2020-06-25 17:17:24 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
return await _fileDtoHelper.GetAsync(file);
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
2020-06-25 17:17:24 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public Task<FileDto<T>> CreateHtmlFileAsync(T folderId, string title, string content)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
if (title == null)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
throw new ArgumentNullException(nameof(title));
|
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return CreateFileAsync(folderId, title, content, ".html");
|
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<FolderDto<T>> CreateFolderAsync(T folderId, string title)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var folder = await _fileStorageService.CreateNewFolderAsync(folderId, title);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
return await _folderDtoHelper.GetAsync(folder);
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
2022-02-22 09:22:15 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<FileDto<T>> CreateFileAsync(T folderId, string title, JsonElement templateId, bool enableExternalExt = false)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
File<T> file;
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (templateId.ValueKind == JsonValueKind.Number)
|
|
|
|
|
{
|
|
|
|
|
file = await _fileStorageService.CreateNewFileAsync(new FileModel<T, int> { ParentId = folderId, Title = title, TemplateId = templateId.GetInt32() }, enableExternalExt);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
else if (templateId.ValueKind == JsonValueKind.String)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
file = await _fileStorageService.CreateNewFileAsync(new FileModel<T, string> { ParentId = folderId, Title = title, TemplateId = templateId.GetString() }, enableExternalExt);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
else
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
file = await _fileStorageService.CreateNewFileAsync(new FileModel<T, int> { ParentId = folderId, Title = title, TemplateId = 0 }, enableExternalExt);
|
|
|
|
|
}
|
2021-11-22 13:17:27 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
return await _fileDtoHelper.GetAsync(file);
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
2021-11-22 13:17:27 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<FolderDto<T>> RenameFolderAsync(T folderId, string title)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var folder = await _fileStorageService.FolderRenameAsync(folderId, title);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
return await _folderDtoHelper.GetAsync(folder);
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
2021-11-16 17:40:15 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<FolderDto<T>> GetFolderInfoAsync(T folderId)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var folder = await _fileStorageService.GetFolderAsync(folderId).NotFoundIfNull("Folder not found");
|
2022-02-22 09:22:15 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
return await _folderDtoHelper.GetAsync(folder);
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async IAsyncEnumerable<FileEntryDto> GetFolderPathAsync(T folderId)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var breadCrumbs = await _entryManager.GetBreadCrumbsAsync(folderId);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
foreach (var e in breadCrumbs)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
yield return await GetFileEntryWrapperAsync(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-05-27 15:23:50 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<FileDto<T>> GetFileInfoAsync(T fileId, int version = -1)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var file = await _fileStorageService.GetFileAsync(fileId, version);
|
|
|
|
|
file = file.NotFoundIfNull("File not found");
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
return await _fileDtoHelper.GetAsync(file);
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<FileDto<TTemplate>> CopyFileAsAsync<TTemplate>(T fileId, TTemplate destFolderId, string destTitle, string password = null)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var service = _serviceProvider.GetService<FileStorageService<TTemplate>>();
|
|
|
|
|
var controller = _serviceProvider.GetService<FilesControllerHelper<TTemplate>>();
|
|
|
|
|
var file = await _fileStorageService.GetFileAsync(fileId, -1);
|
|
|
|
|
var ext = FileUtility.GetFileExtension(file.Title);
|
|
|
|
|
var destExt = FileUtility.GetFileExtension(destTitle);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (ext == destExt)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
var newFile = await service.CreateNewFileAsync(new FileModel<TTemplate, T> { ParentId = destFolderId, Title = destTitle, TemplateId = fileId }, false);
|
2022-02-22 09:22:15 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
return await _fileDtoHelper.GetAsync(newFile);
|
2022-02-23 19:42:34 +00:00
|
|
|
|
}
|
2022-02-22 09:22:15 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
using (var fileStream = await _fileConverter.ExecAsync(file, destExt, password))
|
|
|
|
|
{
|
|
|
|
|
return await controller.InsertFileAsync(destFolderId, fileStream, destTitle, true);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<FileDto<T>> AddToRecentAsync(T fileId, int version = -1)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var file = await _fileStorageService.GetFileAsync(fileId, version).NotFoundIfNull("File not found");
|
|
|
|
|
_entryManager.MarkAsRecent(file);
|
2022-02-22 09:22:15 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
return await _fileDtoHelper.GetAsync(file);
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
2022-02-22 09:22:15 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<List<FileEntryDto>> GetNewItemsAsync(T folderId)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var newItems = await _fileStorageService.GetNewItemsAsync(folderId);
|
2022-03-04 10:25:12 +00:00
|
|
|
|
var result = new List<FileEntryDto>();
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
foreach (var e in newItems)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
result.Add(await GetFileEntryWrapperAsync(e));
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return result;
|
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<FileDto<T>> UpdateFileAsync(T fileId, string title, int lastVersion)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
if (!string.IsNullOrEmpty(title))
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
await _fileStorageService.FileRenameAsync(fileId, title);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (lastVersion > 0)
|
|
|
|
|
{
|
|
|
|
|
await _fileStorageService.UpdateToVersionAsync(fileId, lastVersion);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return await GetFileInfoAsync(fileId);
|
|
|
|
|
}
|
2022-02-22 09:22:15 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<IEnumerable<FileOperationDto>> DeleteFileAsync(T fileId, bool deleteAfter, bool immediately)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
var result = new List<FileOperationDto>();
|
2022-02-22 09:22:15 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
foreach (var e in _fileStorageService.DeleteFile("delete", fileId, false, deleteAfter, immediately))
|
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
result.Add(await _fileOperationDtoHelper.GetAsync(e));
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return result;
|
|
|
|
|
}
|
2022-03-04 10:25:12 +00:00
|
|
|
|
|
|
|
|
|
public IAsyncEnumerable<ConversationResultDto<T>> StartConversionAsync(CheckConversionRequestDto<T> cheqConversionRequestDto)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
cheqConversionRequestDto.StartConvert = true;
|
|
|
|
|
|
|
|
|
|
return CheckConversionAsync(cheqConversionRequestDto);
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async IAsyncEnumerable<ConversationResultDto<T>> CheckConversionAsync(CheckConversionRequestDto<T> cheqConversionRequestDto)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
var checkConversaion = _fileStorageService.CheckConversionAsync(new List<CheckConversionRequestDto<T>>() { cheqConversionRequestDto }, cheqConversionRequestDto.Sync);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
await foreach (var r in checkConversaion)
|
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
var o = new ConversationResultDto<T>
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
Id = r.Id,
|
|
|
|
|
Error = r.Error,
|
|
|
|
|
OperationType = r.OperationType,
|
|
|
|
|
Processed = r.Processed,
|
|
|
|
|
Progress = r.Progress,
|
|
|
|
|
Source = r.Source,
|
|
|
|
|
};
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (!string.IsNullOrEmpty(r.Result))
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var options = new JsonSerializerOptions
|
|
|
|
|
{
|
|
|
|
|
AllowTrailingCommas = true,
|
|
|
|
|
PropertyNameCaseInsensitive = true
|
|
|
|
|
};
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
var jResult = JsonSerializer.Deserialize<FileJsonSerializerData<T>>(r.Result, options);
|
|
|
|
|
o.File = await GetFileInfoAsync(jResult.Id, jResult.Version);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
o.File = r.Result;
|
|
|
|
|
_logger.Error(e);
|
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
yield return o;
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
public Task<string> CheckFillFormDraftAsync(T fileId, int version, string doc, bool editPossible, bool view)
|
|
|
|
|
{
|
|
|
|
|
return _fileStorageService.CheckFillFormDraftAsync(fileId, version, doc, editPossible, view);
|
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<IEnumerable<FileOperationDto>> DeleteFolder(T folderId, bool deleteAfter, bool immediately)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
var result = new List<FileOperationDto>();
|
2022-02-22 09:22:15 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
foreach (var e in _fileStorageService.DeleteFolder("delete", folderId, false, deleteAfter, immediately))
|
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
result.Add(await _fileOperationDtoHelper.GetAsync(e));
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return result;
|
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async IAsyncEnumerable<FileEntryDto> MoveOrCopyBatchCheckAsync(BatchRequestDto batchRequestDto)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
List<object> checkedFiles;
|
|
|
|
|
List<object> checkedFolders;
|
2022-02-22 09:22:15 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
if (batchRequestDto.DestFolderId.ValueKind == JsonValueKind.Number)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
(checkedFiles, checkedFolders) = await _fileStorageService.MoveOrCopyFilesCheckAsync(batchRequestDto.FileIds.ToList(), batchRequestDto.FolderIds.ToList(), batchRequestDto.DestFolderId.GetInt32());
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
(checkedFiles, checkedFolders) = await _fileStorageService.MoveOrCopyFilesCheckAsync(batchRequestDto.FileIds.ToList(), batchRequestDto.FolderIds.ToList(), batchRequestDto.DestFolderId.GetString());
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
var entries = await _fileStorageService.GetItemsAsync(checkedFiles.OfType<int>().Select(Convert.ToInt32), checkedFiles.OfType<int>().Select(Convert.ToInt32), FilterType.FilesOnly, false, "", "");
|
2022-02-22 09:22:15 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
entries.AddRange(await _fileStorageService.GetItemsAsync(checkedFiles.OfType<string>(), checkedFiles.OfType<string>(), FilterType.FilesOnly, false, "", ""));
|
2022-02-22 09:22:15 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
foreach (var e in entries)
|
|
|
|
|
{
|
|
|
|
|
yield return await GetFileEntryWrapperAsync(e);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<IEnumerable<FileOperationDto>> MoveBatchItemsAsync(BatchRequestDto batchRequestDto)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
var result = new List<FileOperationDto>();
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
foreach (var e in _fileStorageService.MoveOrCopyItems(batchRequestDto.FolderIds.ToList(), batchRequestDto.FileIds.ToList(), batchRequestDto.DestFolderId, batchRequestDto.ConflictResolveType, false, batchRequestDto.DeleteAfter))
|
2020-08-12 15:13:52 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
result.Add(await _fileOperationDtoHelper.GetAsync(e));
|
2020-08-12 15:13:52 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<IEnumerable<FileOperationDto>> CopyBatchItemsAsync(BatchRequestDto batchRequestDto)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
var result = new List<FileOperationDto>();
|
2022-03-03 18:01:34 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
foreach (var e in _fileStorageService.MoveOrCopyItems(batchRequestDto.FolderIds.ToList(), batchRequestDto.FileIds.ToList(), batchRequestDto.DestFolderId, batchRequestDto.ConflictResolveType, true, batchRequestDto.DeleteAfter))
|
2021-08-11 15:04:23 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
result.Add(await _fileOperationDtoHelper.GetAsync(e));
|
2021-08-11 15:04:23 +00:00
|
|
|
|
}
|
2021-12-08 12:25:39 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<IEnumerable<FileOperationDto>> MarkAsReadAsync(BaseBatchRequestDto batchRequestDto)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
var result = new List<FileOperationDto>();
|
2022-03-03 18:01:34 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
foreach (var e in _fileStorageService.MarkAsRead(batchRequestDto.FolderIds.ToList(), batchRequestDto.FileIds.ToList()))
|
2021-12-08 12:25:39 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
result.Add(await _fileOperationDtoHelper.GetAsync(e));
|
2021-12-08 12:25:39 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<IEnumerable<FileOperationDto>> TerminateTasksAsync()
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
var result = new List<FileOperationDto>();
|
2022-03-03 18:01:34 +00:00
|
|
|
|
|
|
|
|
|
foreach (var e in _fileStorageService.TerminateTasks())
|
2021-12-08 12:25:39 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
result.Add(await _fileOperationDtoHelper.GetAsync(e));
|
2021-12-08 12:25:39 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<IEnumerable<FileOperationDto>> GetOperationStatusesAsync()
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
var result = new List<FileOperationDto>();
|
2022-03-03 18:01:34 +00:00
|
|
|
|
|
|
|
|
|
foreach (var e in _fileStorageService.GetTasksStatuses())
|
2021-12-08 12:25:39 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
result.Add(await _fileOperationDtoHelper.GetAsync(e));
|
2021-12-08 12:25:39 +00:00
|
|
|
|
}
|
2021-08-11 15:04:23 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<IEnumerable<FileOperationDto>> BulkDownloadAsync(DownloadRequestDto model)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var folders = new Dictionary<JsonElement, string>();
|
|
|
|
|
var files = new Dictionary<JsonElement, string>();
|
|
|
|
|
|
|
|
|
|
foreach (var fileId in model.FileConvertIds.Where(fileId => !files.ContainsKey(fileId.Key)))
|
2020-08-02 18:48:58 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
files.Add(fileId.Key, fileId.Value);
|
2020-08-02 18:48:58 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
foreach (var fileId in model.FileIds.Where(fileId => !files.ContainsKey(fileId)))
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
files.Add(fileId, string.Empty);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
foreach (var folderId in model.FolderIds.Where(folderId => !folders.ContainsKey(folderId)))
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
folders.Add(folderId, string.Empty);
|
2020-12-02 13:17:43 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
var result = new List<FileOperationDto>();
|
2022-03-03 18:01:34 +00:00
|
|
|
|
|
|
|
|
|
foreach (var e in _fileStorageService.BulkDownload(folders, files))
|
2021-06-11 11:24:01 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
result.Add(await _fileOperationDtoHelper.GetAsync(e));
|
2022-02-23 19:42:34 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<IEnumerable<FileOperationDto>> EmptyTrashAsync()
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var emptyTrash = await _fileStorageService.EmptyTrashAsync();
|
2022-03-04 10:25:12 +00:00
|
|
|
|
var result = new List<FileOperationDto>();
|
2022-03-03 18:01:34 +00:00
|
|
|
|
|
|
|
|
|
foreach (var e in emptyTrash)
|
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
result.Add(await _fileOperationDtoHelper.GetAsync(e));
|
2021-06-11 11:24:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<IEnumerable<FileDto<T>>> GetFileVersionInfoAsync(T fileId)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var files = await _fileStorageService.GetFileHistoryAsync(fileId);
|
2022-03-04 10:25:12 +00:00
|
|
|
|
var result = new List<FileDto<T>>();
|
2022-03-03 18:01:34 +00:00
|
|
|
|
|
|
|
|
|
foreach (var e in files)
|
2020-12-02 13:17:43 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
result.Add(await _fileDtoHelper.GetAsync(e));
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<IEnumerable<FileDto<T>>> ChangeHistoryAsync(T fileId, int version, bool continueVersion)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var pair = await _fileStorageService.CompleteVersionAsync(fileId, version, continueVersion);
|
|
|
|
|
var history = pair.Value;
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
var result = new List<FileDto<T>>();
|
2022-03-03 18:01:34 +00:00
|
|
|
|
|
|
|
|
|
foreach (var e in history)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
result.Add(await _fileDtoHelper.GetAsync(e));
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<FileDto<T>> LockFileAsync(T fileId, bool lockFile)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var result = await _fileStorageService.LockFileAsync(fileId, lockFile);
|
2022-03-04 10:25:12 +00:00
|
|
|
|
return await _fileDtoHelper.GetAsync(result);
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Task<DocumentService.FileLink> GetPresignedUriAsync(T fileId)
|
|
|
|
|
{
|
|
|
|
|
return _fileStorageService.GetPresignedUriAsync(fileId);
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<List<EditHistoryDto>> GetEditHistoryAsync(T fileId, string doc = null)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var result = await _fileStorageService.GetEditHistoryAsync(fileId, doc);
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
return result.Select(r => new EditHistoryDto(r, _apiDateTimeHelper, _userManager, _displayUserSettingsHelper)).ToList();
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public Task<EditHistoryDataDto> GetEditDiffUrlAsync(T fileId, int version = 0, string doc = null)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
return _fileStorageService.GetEditDiffUrlAsync(fileId, version, doc);
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<List<EditHistoryDto>> RestoreVersionAsync(T fileId, int version = 0, string url = null, string doc = null)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var result = await _fileStorageService.RestoreVersionAsync(fileId, version, url, doc);
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
return result.Select(r => new EditHistoryDto(r, _apiDateTimeHelper, _userManager, _displayUserSettingsHelper)).ToList();
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Task<string> UpdateCommentAsync(T fileId, int version, string comment)
|
|
|
|
|
{
|
|
|
|
|
return _fileStorageService.UpdateCommentAsync(fileId, version, comment);
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public Task<IEnumerable<FileShareDto>> GetFileSecurityInfoAsync(T fileId)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
return GetSecurityInfoAsync(new List<T> { fileId }, new List<T> { });
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public Task<IEnumerable<FileShareDto>> GetFolderSecurityInfoAsync(T folderId)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
return GetSecurityInfoAsync(new List<T> { }, new List<T> { folderId });
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async IAsyncEnumerable<FileEntryDto> GetFoldersAsync(T folderId)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var folders = await _fileStorageService.GetFoldersAsync(folderId);
|
|
|
|
|
foreach (var folder in folders)
|
2020-12-03 14:43:33 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
yield return await GetFileEntryWrapperAsync(folder);
|
2020-12-03 14:43:33 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
2020-12-03 14:43:33 +00:00
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<IEnumerable<FileShareDto>> GetSecurityInfoAsync(IEnumerable<T> fileIds, IEnumerable<T> folderIds)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
var fileShares = await _fileStorageService.GetSharedInfoAsync(fileIds, folderIds);
|
2022-03-04 10:25:12 +00:00
|
|
|
|
|
|
|
|
|
return fileShares.Select(_fileShareDtoHelper.Get).ToList();
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public Task<IEnumerable<FileShareDto>> SetFileSecurityInfoAsync(T fileId, IEnumerable<FileShareParams> share, bool notify, string sharingMessage)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
return SetSecurityInfoAsync(new List<T> { fileId }, new List<T>(), share, notify, sharingMessage);
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public Task<IEnumerable<FileShareDto>> SetFolderSecurityInfoAsync(T folderId, IEnumerable<FileShareParams> share, bool notify, string sharingMessage)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
return SetSecurityInfoAsync(new List<T>(), new List<T> { folderId }, share, notify, sharingMessage);
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
public async Task<IEnumerable<FileShareDto>> SetSecurityInfoAsync(IEnumerable<T> fileIds, IEnumerable<T> folderIds, IEnumerable<FileShareParams> share, bool notify, string sharingMessage)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
if (share != null && share.Any())
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
var list = new List<AceWrapper>(share.Select(_fileShareParamsHelper.ToAceObject));
|
2022-03-04 10:25:12 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
var aceCollection = new AceCollection<T>
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-03 18:01:34 +00:00
|
|
|
|
Files = fileIds,
|
|
|
|
|
Folders = folderIds,
|
|
|
|
|
Aces = list,
|
|
|
|
|
Message = sharingMessage
|
|
|
|
|
};
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
await _fileStorageService.SetAceObjectAsync(aceCollection, notify);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return await GetSecurityInfoAsync(fileIds, folderIds);
|
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
public async Task<bool> RemoveSecurityInfoAsync(List<T> fileIds, List<T> folderIds)
|
|
|
|
|
{
|
|
|
|
|
await _fileStorageService.RemoveAceAsync(fileIds, folderIds);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return true;
|
|
|
|
|
}
|
2021-11-15 11:31:47 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
public async Task<string> GenerateSharedLinkAsync(T fileId, FileShare share)
|
|
|
|
|
{
|
|
|
|
|
var file = await GetFileInfoAsync(fileId);
|
2021-12-28 15:15:29 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
var tmpInfo = await _fileStorageService.GetSharedInfoAsync(new List<T> { fileId }, new List<T> { });
|
|
|
|
|
var sharedInfo = tmpInfo.Find(r => r.SubjectId == FileConstant.ShareLinkId);
|
|
|
|
|
|
|
|
|
|
if (sharedInfo == null || sharedInfo.Share != share)
|
|
|
|
|
{
|
|
|
|
|
var list = new List<AceWrapper>
|
2020-12-01 19:59:42 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
new AceWrapper
|
|
|
|
|
{
|
|
|
|
|
SubjectId = FileConstant.ShareLinkId,
|
|
|
|
|
SubjectGroup = true,
|
|
|
|
|
Share = share
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
var aceCollection = new AceCollection<T>
|
|
|
|
|
{
|
|
|
|
|
Files = new List<T> { fileId },
|
|
|
|
|
Folders = new List<T>(0),
|
|
|
|
|
Aces = list
|
|
|
|
|
};
|
2022-03-04 10:25:12 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
await _fileStorageService.SetAceObjectAsync(aceCollection, false);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
tmpInfo = await _fileStorageService.GetSharedInfoAsync(new List<T> { fileId }, new List<T> { });
|
|
|
|
|
sharedInfo = tmpInfo.Find(r => r.SubjectId == FileConstant.ShareLinkId);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
return sharedInfo.Link;
|
|
|
|
|
}
|
2020-11-30 15:34:45 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
public Task<bool> SetAceLinkAsync(T fileId, FileShare share)
|
|
|
|
|
{
|
|
|
|
|
return _fileStorageService.SetAceLinkAsync(fileId, share);
|
|
|
|
|
}
|
2020-03-18 13:19:37 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
///// <summary>
|
|
|
|
|
/////
|
|
|
|
|
///// </summary>
|
|
|
|
|
///// <param name="query"></param>
|
|
|
|
|
///// <returns></returns>
|
|
|
|
|
//[Read(@"@search/{query}")]
|
|
|
|
|
//public IEnumerable<FileEntryWrapper> Search(string query)
|
|
|
|
|
//{
|
|
|
|
|
// var searcher = new SearchHandler();
|
|
|
|
|
// var files = searcher.SearchFiles(query).Select(r => (FileEntryWrapper)FileWrapperHelper.Get(r));
|
|
|
|
|
// var folders = searcher.SearchFolders(query).Select(f => (FileEntryWrapper)FolderWrapperHelper.Get(f));
|
|
|
|
|
|
|
|
|
|
// return files.Concat(folders);
|
|
|
|
|
//}
|
|
|
|
|
|
2022-03-04 10:25:12 +00:00
|
|
|
|
private async Task<FolderContentDto<T>> ToFolderContentWrapperAsync(T folderId, Guid userIdOrGroupId, FilterType filterType, bool withSubFolders)
|
2022-03-03 18:01:34 +00:00
|
|
|
|
{
|
|
|
|
|
OrderBy orderBy = null;
|
|
|
|
|
if (Enum.TryParse(_apiContext.SortBy, true, out SortedByType sortBy))
|
|
|
|
|
{
|
|
|
|
|
orderBy = new OrderBy(sortBy, !_apiContext.SortDescending);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var startIndex = Convert.ToInt32(_apiContext.StartIndex);
|
2022-03-04 10:25:12 +00:00
|
|
|
|
var items = await _fileStorageService.GetFolderItemsAsync(folderId, startIndex, Convert.ToInt32(_apiContext.Count), filterType,
|
|
|
|
|
filterType == FilterType.ByUser, userIdOrGroupId.ToString(), _apiContext.FilterValue, false, withSubFolders, orderBy);
|
|
|
|
|
|
|
|
|
|
return await _folderContentDtoHelper.GetAsync(items, startIndex);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal async Task<FileEntryDto> GetFileEntryWrapperAsync(FileEntry r)
|
|
|
|
|
{
|
|
|
|
|
FileEntryDto wrapper = null;
|
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
if (r is Folder<int> fol1)
|
2020-03-18 13:19:37 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
wrapper = await _folderDtoHelper.GetAsync(fol1);
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
else if (r is Folder<string> fol2)
|
2020-12-01 19:59:42 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
wrapper = await _folderDtoHelper.GetAsync(fol2);
|
2020-12-01 19:59:42 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
else if (r is File<int> file1)
|
2021-09-29 16:08:30 +00:00
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
wrapper = await _fileDtoHelper.GetAsync(file1);
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
|
|
|
|
else if (r is File<string> file2)
|
|
|
|
|
{
|
2022-03-04 10:25:12 +00:00
|
|
|
|
wrapper = await _fileDtoHelper.GetAsync(file2);
|
2022-03-03 18:01:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return wrapper;
|
|
|
|
|
}
|
2021-09-29 16:08:30 +00:00
|
|
|
|
|
2022-03-03 18:01:34 +00:00
|
|
|
|
internal IFormFile GetFileFromRequest(IModelWithFile model)
|
|
|
|
|
{
|
|
|
|
|
IEnumerable<IFormFile> files = _httpContextAccessor.HttpContext.Request.Form.Files;
|
|
|
|
|
if (files != null && files.Any())
|
|
|
|
|
{
|
|
|
|
|
return files.First();
|
2021-09-29 16:08:30 +00:00
|
|
|
|
}
|
2022-03-03 18:01:34 +00:00
|
|
|
|
|
|
|
|
|
return model.File;
|
2020-03-18 13:19:37 +00:00
|
|
|
|
}
|
2022-03-04 10:25:12 +00:00
|
|
|
|
}
|