From 77949331e2bc64196be7add23cb7574910d1ff17 Mon Sep 17 00:00:00 2001 From: sbwalker Date: Mon, 4 Aug 2025 13:06:16 -0400 Subject: [PATCH] improve FileManager performance --- .../Modules/Controls/FileManager.razor | 266 +++++++++--------- 1 file changed, 133 insertions(+), 133 deletions(-) diff --git a/Oqtane.Client/Modules/Controls/FileManager.razor b/Oqtane.Client/Modules/Controls/FileManager.razor index af092f0d..c3ac1846 100644 --- a/Oqtane.Client/Modules/Controls/FileManager.razor +++ b/Oqtane.Client/Modules/Controls/FileManager.razor @@ -107,7 +107,7 @@ @code { private bool _initialized = false; - private List _folders; + private List _folders = new List(); private List _files = new List(); private string _fileinputid = string.Empty; private string _progressinfoid = string.Empty; @@ -198,19 +198,22 @@ Filter = "nupkg"; ShowSuccess = true; } - - if (!string.IsNullOrEmpty(Folder) && Folder != Constants.PackagesFolder) + else { - Folder folder = await FolderService.GetFolderAsync(ModuleState.SiteId, Folder); - if (folder != null) + // folder path specified rather than folderid + if (!string.IsNullOrEmpty(Folder)) { - FolderId = folder.FolderId; - } - else - { - FolderId = -1; - _message = "Folder Path " + Folder + " Does Not Exist"; - _messagetype = MessageType.Error; + Folder folder = await FolderService.GetFolderAsync(ModuleState.SiteId, Folder); + if (folder != null) + { + FolderId = folder.FolderId; + } + else + { + FolderId = -1; + _message = "Folder Path " + Folder + " Does Not Exist"; + _messagetype = MessageType.Error; + } } } @@ -245,25 +248,24 @@ } } - await SetImage(); - if (!string.IsNullOrEmpty(Filter)) { _filter = "." + Filter.Replace(",", ",."); } + GetFolderPermission(); + await SetImage(); await GetFiles(); _initialized = true; } - private async Task GetFiles() + private void GetFolderPermission() { _haseditpermission = false; if (Folder == Constants.PackagesFolder) { _haseditpermission = UserSecurity.IsAuthorized(PageState.User, RoleNames.Host); - _files = new List(); } else { @@ -271,69 +273,14 @@ if (folder != null) { _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(); - } } else { _haseditpermission = false; - _files = new List(); - } - if (_filter != "*") - { - List filtered = new List(); - 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() { _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(); + } + } + else + { + _files = new List(); + } + if (_filter != "*") + { + List filtered = new List(); + 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() { _message = string.Empty; @@ -433,45 +448,33 @@ _message = Localizer["Success.File.Upload"]; _messagetype = MessageType.Success; } - } - else - { - await logger.LogError("File Upload Failed {Files}", uploads); - _message = Localizer["Error.File.Upload"]; - _messagetype = MessageType.Error; - } - if (Folder == Constants.PackagesFolder) - { - 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 + FileId = -1; + if (Folder != Constants.PackagesFolder && !AnonymizeUploadFilenames) { // set FileId to first file in upload collection var file = await FileService.GetFileAsync(int.Parse(folder), uploads[0].Split(":")[0]); if (file != null) { 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 GetFiles(); - StateHasChanged(); - } + + await OnUpload.InvokeAsync(FileId); +#pragma warning disable CS0618 + 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) @@ -485,7 +488,6 @@ finally { tokenSource.Dispose(); } - } else { @@ -503,7 +505,6 @@ private async Task DeleteFile() { _message = string.Empty; - try { await FileService.DeleteFileAsync(FileId); @@ -516,50 +517,49 @@ _messagetype = MessageType.Success; } - if (ShowFiles) - { - await GetFiles(); - FileId = -1; - await SetImage(); + FileId = -1; #pragma warning disable CS0618 - await OnSelect.InvokeAsync(FileId); + await OnSelect.InvokeAsync(FileId); #pragma warning restore CS0618 - await OnSelectFile.InvokeAsync(FileId); - StateHasChanged(); - } - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Deleting File {File} {Error}", FileId, ex.Message); + await OnSelectFile.InvokeAsync(FileId); - _message = Localizer["Error.File.Delete"]; - _messagetype = MessageType.Error; - } - } + await SetImage(); + 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() - { - await Refresh(-1); - } + public File GetFile() => _file; - public async Task Refresh(int fileId) - { - await GetFiles(); - if (fileId != -1) + public async Task Refresh() + { + await Refresh(-1); + } + + public async Task Refresh(int fileId) + { + await GetFiles(); + FileId = -1; + if (fileId != -1) { var file = _files.Where(item => item.FileId == fileId).FirstOrDefault(); if (file != null) { FileId = file.FileId; - await SetImage(); } } - StateHasChanged(); + await SetImage(); + StateHasChanged(); } }