diff --git a/src/MayShow.Shared/Interfaces/IUpdateRecentlyUsed.cs b/src/MayShow.Shared/Interfaces/IUpdateRecentlyUsed.cs new file mode 100644 index 0000000..e6103f3 --- /dev/null +++ b/src/MayShow.Shared/Interfaces/IUpdateRecentlyUsed.cs @@ -0,0 +1,8 @@ +using MayShow.Models; + +namespace MayShow.Interfaces; + +interface IUpdateRecentlyUsed +{ + void UpdateRecentlyUsed(PDFReport report); +} \ No newline at end of file diff --git a/src/MayShow.Shared/ViewModels/CreatePDFReportViewModel.cs b/src/MayShow.Shared/ViewModels/CreatePDFReportViewModel.cs index f6ffb88..101ccb3 100644 --- a/src/MayShow.Shared/ViewModels/CreatePDFReportViewModel.cs +++ b/src/MayShow.Shared/ViewModels/CreatePDFReportViewModel.cs @@ -64,6 +64,8 @@ class CreatePDFReportViewModel : BaseViewModel, ICanCheckShutdown, ILogger _isPerformingInitialLoad = true; _pdfReport = new PDFReport(reportInfo); // todo: load/interact with StartNewChooseReportViewModel settings object properly! + // ...which basically means when something is saved make sure to update the recently used stuff. + // which i think we can just do through a simple interface and call it a day. // always default to using BaseFolder, which will always be set in the general case if (!string.IsNullOrWhiteSpace(_pdfReport.BaseFolder)) { @@ -86,6 +88,8 @@ class CreatePDFReportViewModel : BaseViewModel, ICanCheckShutdown, ILogger _isPerformingInitialLoad = false; } + public IUpdateRecentlyUsed? UpdateRecentlyUsed { get; set; } + public PDFReport PDFReport { get => _pdfReport; @@ -591,6 +595,7 @@ class CreatePDFReportViewModel : BaseViewModel, ICanCheckShutdown, ILogger await File.WriteAllTextAsync(savePath, json); LogInfo("Saved report information to {0}", savePath); HasUnsavedWork = false; + UpdateRecentlyUsed?.UpdateRecentlyUsed(report); } // called from UI button diff --git a/src/MayShow.Shared/ViewModels/StartNewChooseReportViewModel.cs b/src/MayShow.Shared/ViewModels/StartNewChooseReportViewModel.cs index 1f922c6..2fd1b15 100644 --- a/src/MayShow.Shared/ViewModels/StartNewChooseReportViewModel.cs +++ b/src/MayShow.Shared/ViewModels/StartNewChooseReportViewModel.cs @@ -14,7 +14,7 @@ using Avalonia.Platform.Storage; namespace MayShow.ViewModels; -class StartNewChooseReportViewModel : BaseViewModel, ICanCheckShutdown +class StartNewChooseReportViewModel : BaseViewModel, ICanCheckShutdown, IUpdateRecentlyUsed { private string _creatingReportTitle; private ObservableCollection _savedReports; @@ -58,12 +58,11 @@ class StartNewChooseReportViewModel : BaseViewModel, ICanCheckShutdown UUID = Utilities.GetUniqueReportGuid(_settings).ToString() }; reportInfo.BaseFolder = Path.Combine(Utilities.GetInternalDataPath(), reportInfo.UUID); // default to internal directory - // ... this sort and save is slow, technically, but we're not going to have millions of items here, so... - // TODO: save automatically only if mobile; desktop only saves on command - // SavedReports = new ObservableCollection(_settings.AllReportInfo.OrderBy(x => x.Title)); - // await _settings.SaveSettingsAsync(); // now update UI - ViewModelChanger.PushViewModel(new CreatePDFReportViewModel(reportInfo, ViewModelChanger)); + ViewModelChanger.PushViewModel(new CreatePDFReportViewModel(reportInfo, ViewModelChanger) + { + UpdateRecentlyUsed = this + }); CreatingReportTitle = ""; // when user comes back they can start another new report } @@ -89,7 +88,10 @@ class StartNewChooseReportViewModel : BaseViewModel, ICanCheckShutdown UUID = Utilities.GetUniqueReportGuid(_settings).ToString(), BaseFolder = folder.Path.LocalPath }; - ViewModelChanger.PushViewModel(new CreatePDFReportViewModel(reportInfo, ViewModelChanger)); + ViewModelChanger.PushViewModel(new CreatePDFReportViewModel(reportInfo, ViewModelChanger) + { + UpdateRecentlyUsed = this + }); } } } @@ -128,4 +130,27 @@ class StartNewChooseReportViewModel : BaseViewModel, ICanCheckShutdown { return true; } + + public async void UpdateRecentlyUsed(PDFReport report) + { + var didFind = false; + foreach (var existing in _settings.AllReportInfo) + { + if (existing.UUID == report.UUID) + { + didFind = true; + // update info on existing object + existing.LastSaved = report.LastSaved; + existing.Title = report.Title; + existing.BaseFolder = report.BaseFolder; + } + } + if (!didFind) + { + _settings.AllReportInfo.Add(report); + } + // ... this sort and save is slow, technically, but we're not going to have millions of items here, so... + SavedReports = new ObservableCollection(_settings.AllReportInfo.OrderBy(x => x.Title)); + await _settings.SaveSettingsAsync(); + } } \ No newline at end of file