From d369e08397a82b0089e8bbe344328eb94e70700d Mon Sep 17 00:00:00 2001 From: Stanley Dimant Date: Sat, 8 Feb 2025 00:34:56 +0100 Subject: [PATCH] cleanup, actually show success/failure --- .../Services/CharaData/CharaDataManager.cs | 12 ++++--- MareSynchronos/UI/CharaDataHubUi.McdOnline.cs | 31 ++++++++++--------- MareSynchronos/UI/CharaDataHubUi.cs | 17 ++++++++-- 3 files changed, 39 insertions(+), 21 deletions(-) diff --git a/MareSynchronos/Services/CharaData/CharaDataManager.cs b/MareSynchronos/Services/CharaData/CharaDataManager.cs index b2f6a60..da623a9 100644 --- a/MareSynchronos/Services/CharaData/CharaDataManager.cs +++ b/MareSynchronos/Services/CharaData/CharaDataManager.cs @@ -106,7 +106,7 @@ public sealed partial class CharaDataManager : DisposableMediatorSubscriberBase public IDictionary> SharedWithYouData => _sharedWithYouData; public Task? UiBlockingComputation { get; private set; } public ValueProgress? UploadProgress { get; private set; } - public Task<(string Output, bool Success)>? UploadTask { get; private set; } + public Task<(string Output, bool Success)>? UploadTask { get; set; } public bool BrioAvailable => _ipcManager.Brio.APIAvailable; public Task ApplyCharaData(CharaDataDownloadDto dataDownloadDto, string charaName) @@ -631,6 +631,7 @@ public sealed partial class CharaDataManager : DisposableMediatorSubscriberBase { _ownCharaData.Remove(dto.Id); _metaInfoCache.Remove(dto.FullId, out _); + UiBlockingComputation = null; return ("No such DTO found", false); } @@ -639,11 +640,12 @@ public sealed partial class CharaDataManager : DisposableMediatorSubscriberBase if (!extendedDto!.HasMissingFiles) { + UiBlockingComputation = null; return ("Restored successfully", true); } var missingFileList = extendedDto!.MissingFiles.ToList(); - return await UploadFiles(missingFileList, async () => + var result = await UploadFiles(missingFileList, async () => { var newFilePaths = dto.FileGamePaths; foreach (var missing in missingFileList) @@ -657,6 +659,9 @@ public sealed partial class CharaDataManager : DisposableMediatorSubscriberBase var res = await _apiController.CharaDataUpdate(updateDto).ConfigureAwait(false); await AddOrUpdateDto(res).ConfigureAwait(false); }).ConfigureAwait(false); + + UiBlockingComputation = null; + return result; } internal void ApplyDataToSelf(CharaDataFullExtendedDto dataDto) @@ -987,8 +992,7 @@ public sealed partial class CharaDataManager : DisposableMediatorSubscriberBase } finally { - UploadTask = null; - UploadProgress = null; + UiBlockingComputation = null; } } diff --git a/MareSynchronos/UI/CharaDataHubUi.McdOnline.cs b/MareSynchronos/UI/CharaDataHubUi.McdOnline.cs index 1cb2572..831a910 100644 --- a/MareSynchronos/UI/CharaDataHubUi.McdOnline.cs +++ b/MareSynchronos/UI/CharaDataHubUi.McdOnline.cs @@ -38,8 +38,9 @@ internal sealed partial class CharaDataHubUi } var indent = ImRaii.PushIndent(10f); - if (canUpdate || (!_charaDataManager.UploadTask?.IsCompleted ?? false)) + if (canUpdate || _charaDataManager.UploadTask != null) { + ImGuiHelpers.ScaledDummy(5); UiSharedService.DrawGrouped(() => { if (canUpdate) @@ -364,7 +365,7 @@ internal sealed partial class CharaDataHubUi if (_uiSharedService.IconTextButton(FontAwesomeIcon.Trash, "Delete Character Data")) { _ = _charaDataManager.DeleteCharaData(dataDto); - _selectedDtoId = string.Empty; + SelectedDtoId = string.Empty; } } if (!UiSharedService.CtrlPressed()) @@ -575,7 +576,7 @@ internal sealed partial class CharaDataHubUi { var uDto = _charaDataManager.GetUpdateDto(entry.Id); ImGui.TableNextColumn(); - if (string.Equals(entry.Id, _selectedDtoId, StringComparison.Ordinal)) + if (string.Equals(entry.Id, SelectedDtoId, StringComparison.Ordinal)) _uiSharedService.IconText(FontAwesomeIcon.CaretRight); ImGui.TableNextColumn(); @@ -592,48 +593,48 @@ internal sealed partial class CharaDataHubUi { ImGui.TextUnformatted(idText); } - if (ImGui.IsItemClicked()) _selectedDtoId = entry.Id; + if (ImGui.IsItemClicked()) SelectedDtoId = entry.Id; ImGui.TableNextColumn(); ImGui.TextUnformatted(entry.Description); - if (ImGui.IsItemClicked()) _selectedDtoId = entry.Id; + if (ImGui.IsItemClicked()) SelectedDtoId = entry.Id; UiSharedService.AttachToolTip(entry.Description); ImGui.TableNextColumn(); ImGui.TextUnformatted(entry.CreatedDate.ToLocalTime().ToString()); - if (ImGui.IsItemClicked()) _selectedDtoId = entry.Id; + if (ImGui.IsItemClicked()) SelectedDtoId = entry.Id; ImGui.TableNextColumn(); ImGui.TextUnformatted(entry.UpdatedDate.ToLocalTime().ToString()); - if (ImGui.IsItemClicked()) _selectedDtoId = entry.Id; + if (ImGui.IsItemClicked()) SelectedDtoId = entry.Id; ImGui.TableNextColumn(); ImGui.TextUnformatted(entry.DownloadCount.ToString()); - if (ImGui.IsItemClicked()) _selectedDtoId = entry.Id; + if (ImGui.IsItemClicked()) SelectedDtoId = entry.Id; ImGui.TableNextColumn(); bool isDownloadable = !entry.HasMissingFiles && !string.IsNullOrEmpty(entry.GlamourerData); _uiSharedService.BooleanToColoredIcon(isDownloadable, false); - if (ImGui.IsItemClicked()) _selectedDtoId = entry.Id; + if (ImGui.IsItemClicked()) SelectedDtoId = entry.Id; UiSharedService.AttachToolTip(isDownloadable ? "Can be downloaded by others" : "Cannot be downloaded: Has missing files or data, please review this entry manually"); ImGui.TableNextColumn(); var count = entry.FileGamePaths.Concat(entry.FileSwaps).Count(); ImGui.TextUnformatted(count.ToString()); - if (ImGui.IsItemClicked()) _selectedDtoId = entry.Id; + if (ImGui.IsItemClicked()) SelectedDtoId = entry.Id; UiSharedService.AttachToolTip(count == 0 ? "No File data attached" : "Has File data attached"); ImGui.TableNextColumn(); bool hasGlamourerData = !string.IsNullOrEmpty(entry.GlamourerData); _uiSharedService.BooleanToColoredIcon(hasGlamourerData, false); - if (ImGui.IsItemClicked()) _selectedDtoId = entry.Id; + if (ImGui.IsItemClicked()) SelectedDtoId = entry.Id; UiSharedService.AttachToolTip(string.IsNullOrEmpty(entry.GlamourerData) ? "No Glamourer data attached" : "Has Glamourer data attached"); ImGui.TableNextColumn(); bool hasCustomizeData = !string.IsNullOrEmpty(entry.CustomizeData); _uiSharedService.BooleanToColoredIcon(hasCustomizeData, false); - if (ImGui.IsItemClicked()) _selectedDtoId = entry.Id; + if (ImGui.IsItemClicked()) SelectedDtoId = entry.Id; UiSharedService.AttachToolTip(string.IsNullOrEmpty(entry.CustomizeData) ? "No Customize+ data attached" : "Has Customize+ data attached"); ImGui.TableNextColumn(); @@ -641,7 +642,7 @@ internal sealed partial class CharaDataHubUi if (!Equals(DateTime.MaxValue, entry.ExpiryDate)) eIcon = FontAwesomeIcon.Clock; _uiSharedService.IconText(eIcon, ImGuiColors.DalamudYellow); - if (ImGui.IsItemClicked()) _selectedDtoId = entry.Id; + if (ImGui.IsItemClicked()) SelectedDtoId = entry.Id; if (eIcon != FontAwesomeIcon.None) { UiSharedService.AttachToolTip($"This entry will expire on {entry.ExpiryDate.ToLocalTime()}"); @@ -695,12 +696,12 @@ internal sealed partial class CharaDataHubUi var charaDataEntries = _charaDataManager.OwnCharaData.Count; if (charaDataEntries != _dataEntries && _selectNewEntry && _charaDataManager.OwnCharaData.Any()) { - _selectedDtoId = _charaDataManager.OwnCharaData.Last().Value.Id; + SelectedDtoId = _charaDataManager.OwnCharaData.Last().Value.Id; _selectNewEntry = false; } _dataEntries = _charaDataManager.OwnCharaData.Count; - _ = _charaDataManager.OwnCharaData.TryGetValue(_selectedDtoId, out var dto); + _ = _charaDataManager.OwnCharaData.TryGetValue(SelectedDtoId, out var dto); DrawEditCharaData(dto); } diff --git a/MareSynchronos/UI/CharaDataHubUi.cs b/MareSynchronos/UI/CharaDataHubUi.cs index 5c6e407..0e2ab5f 100644 --- a/MareSynchronos/UI/CharaDataHubUi.cs +++ b/MareSynchronos/UI/CharaDataHubUi.cs @@ -49,6 +49,19 @@ internal sealed partial class CharaDataHubUi : WindowMediatorSubscriberBase private bool _openMcdOnlineOnNextRun = false; private bool _readExport; private string _selectedDtoId = string.Empty; + private string SelectedDtoId + { + get => _selectedDtoId; + set + { + if (!string.Equals(_selectedDtoId, value, StringComparison.Ordinal)) + { + _charaDataManager.UploadTask = null; + _selectedDtoId = value; + } + + } + } private string _selectedSpecificUserIndividual = string.Empty; private string _selectedSpecificGroupIndividual = string.Empty; private string _sharedWithYouDescriptionFilter = string.Empty; @@ -102,7 +115,7 @@ internal sealed partial class CharaDataHubUi : WindowMediatorSubscriberBase } _closalCts.Cancel(); - _selectedDtoId = string.Empty; + SelectedDtoId = string.Empty; _filteredDict = null; _sharedWithYouOwnerFilter = string.Empty; _importCode = string.Empty; @@ -926,7 +939,7 @@ internal sealed partial class CharaDataHubUi : WindowMediatorSubscriberBase { if (_uiSharedService.IconTextButton(FontAwesomeIcon.Edit, "Open in MCD Online Editor")) { - _selectedDtoId = data.Id; + SelectedDtoId = data.Id; _openMcdOnlineOnNextRun = true; } }