Merge pull request #5456 from sbwalker/dev
improve FileManager performance
This commit is contained in:
@ -107,7 +107,7 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
private bool _initialized = false;
|
private bool _initialized = false;
|
||||||
private List<Folder> _folders;
|
private List<Folder> _folders = new List<Folder>();
|
||||||
private List<File> _files = new List<File>();
|
private List<File> _files = new List<File>();
|
||||||
private string _fileinputid = string.Empty;
|
private string _fileinputid = string.Empty;
|
||||||
private string _progressinfoid = string.Empty;
|
private string _progressinfoid = string.Empty;
|
||||||
@ -198,19 +198,22 @@
|
|||||||
Filter = "nupkg";
|
Filter = "nupkg";
|
||||||
ShowSuccess = true;
|
ShowSuccess = true;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
if (!string.IsNullOrEmpty(Folder) && Folder != Constants.PackagesFolder)
|
|
||||||
{
|
{
|
||||||
Folder folder = await FolderService.GetFolderAsync(ModuleState.SiteId, Folder);
|
// folder path specified rather than folderid
|
||||||
if (folder != null)
|
if (!string.IsNullOrEmpty(Folder))
|
||||||
{
|
{
|
||||||
FolderId = folder.FolderId;
|
Folder folder = await FolderService.GetFolderAsync(ModuleState.SiteId, Folder);
|
||||||
}
|
if (folder != null)
|
||||||
else
|
{
|
||||||
{
|
FolderId = folder.FolderId;
|
||||||
FolderId = -1;
|
}
|
||||||
_message = "Folder Path " + Folder + " Does Not Exist";
|
else
|
||||||
_messagetype = MessageType.Error;
|
{
|
||||||
|
FolderId = -1;
|
||||||
|
_message = "Folder Path " + Folder + " Does Not Exist";
|
||||||
|
_messagetype = MessageType.Error;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,25 +248,24 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await SetImage();
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(Filter))
|
if (!string.IsNullOrEmpty(Filter))
|
||||||
{
|
{
|
||||||
_filter = "." + Filter.Replace(",", ",.");
|
_filter = "." + Filter.Replace(",", ",.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GetFolderPermission();
|
||||||
|
await SetImage();
|
||||||
await GetFiles();
|
await GetFiles();
|
||||||
|
|
||||||
_initialized = true;
|
_initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task GetFiles()
|
private void GetFolderPermission()
|
||||||
{
|
{
|
||||||
_haseditpermission = false;
|
_haseditpermission = false;
|
||||||
if (Folder == Constants.PackagesFolder)
|
if (Folder == Constants.PackagesFolder)
|
||||||
{
|
{
|
||||||
_haseditpermission = UserSecurity.IsAuthorized(PageState.User, RoleNames.Host);
|
_haseditpermission = UserSecurity.IsAuthorized(PageState.User, RoleNames.Host);
|
||||||
_files = new List<File>();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -271,69 +273,14 @@
|
|||||||
if (folder != null)
|
if (folder != null)
|
||||||
{
|
{
|
||||||
_haseditpermission = UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, folder.PermissionList);
|
_haseditpermission = UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, folder.PermissionList);
|
||||||
if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Browse, folder.PermissionList))
|
|
||||||
{
|
|
||||||
_files = await FileService.GetFilesAsync(FolderId);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_files = new List<File>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_haseditpermission = false;
|
_haseditpermission = false;
|
||||||
_files = new List<File>();
|
|
||||||
}
|
|
||||||
if (_filter != "*")
|
|
||||||
{
|
|
||||||
List<File> filtered = new List<File>();
|
|
||||||
foreach (File file in _files)
|
|
||||||
{
|
|
||||||
if (_filter.ToUpper().IndexOf("." + file.Extension.ToUpper()) != -1)
|
|
||||||
{
|
|
||||||
filtered.Add(file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_files = filtered;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task FolderChanged(ChangeEventArgs e)
|
|
||||||
{
|
|
||||||
_message = string.Empty;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
FolderId = int.Parse((string)e.Value);
|
|
||||||
await GetFiles();
|
|
||||||
FileId = -1;
|
|
||||||
_file = null;
|
|
||||||
_image = string.Empty;
|
|
||||||
|
|
||||||
await OnSelectFolder.InvokeAsync(FolderId);
|
|
||||||
StateHasChanged();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
await logger.LogError(ex, "Error Loading Files {Error}", ex.Message);
|
|
||||||
_message = Localizer["Error.File.Load"];
|
|
||||||
_messagetype = MessageType.Error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task FileChanged(ChangeEventArgs e)
|
|
||||||
{
|
|
||||||
_message = string.Empty;
|
|
||||||
FileId = int.Parse((string)e.Value);
|
|
||||||
await SetImage();
|
|
||||||
#pragma warning disable CS0618
|
|
||||||
await OnSelect.InvokeAsync(FileId);
|
|
||||||
#pragma warning restore CS0618
|
|
||||||
await OnSelectFile.InvokeAsync(FileId);
|
|
||||||
StateHasChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task SetImage()
|
private async Task SetImage()
|
||||||
{
|
{
|
||||||
_image = string.Empty;
|
_image = string.Empty;
|
||||||
@ -357,6 +304,74 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task GetFiles()
|
||||||
|
{
|
||||||
|
if (ShowFiles)
|
||||||
|
{
|
||||||
|
Folder folder = _folders.FirstOrDefault(item => item.FolderId == FolderId);
|
||||||
|
if (folder != null)
|
||||||
|
{
|
||||||
|
if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Browse, folder.PermissionList))
|
||||||
|
{
|
||||||
|
_files = await FileService.GetFilesAsync(FolderId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_files = new List<File>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_files = new List<File>();
|
||||||
|
}
|
||||||
|
if (_filter != "*")
|
||||||
|
{
|
||||||
|
List<File> filtered = new List<File>();
|
||||||
|
foreach (File file in _files)
|
||||||
|
{
|
||||||
|
if (_filter.ToUpper().IndexOf("." + file.Extension.ToUpper()) != -1)
|
||||||
|
{
|
||||||
|
filtered.Add(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_files = filtered;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task FolderChanged(ChangeEventArgs e)
|
||||||
|
{
|
||||||
|
_message = string.Empty;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
FolderId = int.Parse((string)e.Value);
|
||||||
|
await OnSelectFolder.InvokeAsync(FolderId);
|
||||||
|
FileId = -1;
|
||||||
|
GetFolderPermission();
|
||||||
|
await SetImage();
|
||||||
|
await GetFiles();
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
await logger.LogError(ex, "Error Loading Files {Error}", ex.Message);
|
||||||
|
_message = Localizer["Error.File.Load"];
|
||||||
|
_messagetype = MessageType.Error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task FileChanged(ChangeEventArgs e)
|
||||||
|
{
|
||||||
|
_message = string.Empty;
|
||||||
|
FileId = int.Parse((string)e.Value);
|
||||||
|
#pragma warning disable CS0618
|
||||||
|
await OnSelect.InvokeAsync(FileId);
|
||||||
|
#pragma warning restore CS0618
|
||||||
|
await OnSelectFile.InvokeAsync(FileId);
|
||||||
|
await SetImage();
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
|
||||||
private async Task UploadFiles()
|
private async Task UploadFiles()
|
||||||
{
|
{
|
||||||
_message = string.Empty;
|
_message = string.Empty;
|
||||||
@ -433,45 +448,33 @@
|
|||||||
_message = Localizer["Success.File.Upload"];
|
_message = Localizer["Success.File.Upload"];
|
||||||
_messagetype = MessageType.Success;
|
_messagetype = MessageType.Success;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
await logger.LogError("File Upload Failed {Files}", uploads);
|
|
||||||
_message = Localizer["Error.File.Upload"];
|
|
||||||
_messagetype = MessageType.Error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Folder == Constants.PackagesFolder)
|
FileId = -1;
|
||||||
{
|
if (Folder != Constants.PackagesFolder && !AnonymizeUploadFilenames)
|
||||||
await OnUpload.InvokeAsync(-1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (AnonymizeUploadFilenames)
|
|
||||||
{
|
|
||||||
// it is not possible to determine the FileId of the uploaded file when filenames are anonymized
|
|
||||||
await OnUpload.InvokeAsync(-1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
// set FileId to first file in upload collection
|
// set FileId to first file in upload collection
|
||||||
var file = await FileService.GetFileAsync(int.Parse(folder), uploads[0].Split(":")[0]);
|
var file = await FileService.GetFileAsync(int.Parse(folder), uploads[0].Split(":")[0]);
|
||||||
if (file != null)
|
if (file != null)
|
||||||
{
|
{
|
||||||
FileId = file.FileId;
|
FileId = file.FileId;
|
||||||
await SetImage();
|
|
||||||
#pragma warning disable CS0618
|
|
||||||
await OnSelect.InvokeAsync(FileId);
|
|
||||||
#pragma warning restore CS0618
|
|
||||||
await OnSelectFile.InvokeAsync(FileId);
|
|
||||||
await OnUpload.InvokeAsync(FileId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ShowFiles)
|
|
||||||
{
|
await OnUpload.InvokeAsync(FileId);
|
||||||
await GetFiles();
|
#pragma warning disable CS0618
|
||||||
StateHasChanged();
|
await OnSelect.InvokeAsync(FileId);
|
||||||
}
|
#pragma warning restore CS0618
|
||||||
|
await OnSelectFile.InvokeAsync(FileId);
|
||||||
|
|
||||||
|
await SetImage();
|
||||||
|
await GetFiles();
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await logger.LogError("File Upload Failed {Files}", uploads);
|
||||||
|
_message = Localizer["Error.File.Upload"];
|
||||||
|
_messagetype = MessageType.Error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@ -485,7 +488,6 @@
|
|||||||
finally {
|
finally {
|
||||||
tokenSource.Dispose();
|
tokenSource.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -503,7 +505,6 @@
|
|||||||
private async Task DeleteFile()
|
private async Task DeleteFile()
|
||||||
{
|
{
|
||||||
_message = string.Empty;
|
_message = string.Empty;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await FileService.DeleteFileAsync(FileId);
|
await FileService.DeleteFileAsync(FileId);
|
||||||
@ -516,50 +517,49 @@
|
|||||||
_messagetype = MessageType.Success;
|
_messagetype = MessageType.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ShowFiles)
|
FileId = -1;
|
||||||
{
|
|
||||||
await GetFiles();
|
|
||||||
FileId = -1;
|
|
||||||
await SetImage();
|
|
||||||
#pragma warning disable CS0618
|
#pragma warning disable CS0618
|
||||||
await OnSelect.InvokeAsync(FileId);
|
await OnSelect.InvokeAsync(FileId);
|
||||||
#pragma warning restore CS0618
|
#pragma warning restore CS0618
|
||||||
await OnSelectFile.InvokeAsync(FileId);
|
await OnSelectFile.InvokeAsync(FileId);
|
||||||
StateHasChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
await logger.LogError(ex, "Error Deleting File {File} {Error}", FileId, ex.Message);
|
|
||||||
|
|
||||||
_message = Localizer["Error.File.Delete"];
|
await SetImage();
|
||||||
_messagetype = MessageType.Error;
|
await GetFiles();
|
||||||
}
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
await logger.LogError(ex, "Error Deleting File {File} {Error}", FileId, ex.Message);
|
||||||
|
|
||||||
public int GetFileId() => FileId;
|
_message = Localizer["Error.File.Delete"];
|
||||||
|
_messagetype = MessageType.Error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public int GetFolderId() => FolderId;
|
public int GetFileId() => FileId;
|
||||||
|
|
||||||
public File GetFile() => _file;
|
public int GetFolderId() => FolderId;
|
||||||
|
|
||||||
public async Task Refresh()
|
public File GetFile() => _file;
|
||||||
{
|
|
||||||
await Refresh(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task Refresh(int fileId)
|
public async Task Refresh()
|
||||||
{
|
{
|
||||||
await GetFiles();
|
await Refresh(-1);
|
||||||
if (fileId != -1)
|
}
|
||||||
|
|
||||||
|
public async Task Refresh(int fileId)
|
||||||
|
{
|
||||||
|
await GetFiles();
|
||||||
|
FileId = -1;
|
||||||
|
if (fileId != -1)
|
||||||
{
|
{
|
||||||
var file = _files.Where(item => item.FileId == fileId).FirstOrDefault();
|
var file = _files.Where(item => item.FileId == fileId).FirstOrDefault();
|
||||||
if (file != null)
|
if (file != null)
|
||||||
{
|
{
|
||||||
FileId = file.FileId;
|
FileId = file.FileId;
|
||||||
await SetImage();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StateHasChanged();
|
await SetImage();
|
||||||
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user