WIP: Add iOS version #10

Draft
Deadpikle wants to merge 67 commits from feature/ios into main
3 changed files with 45 additions and 7 deletions
Showing only changes of commit b0661669b4 - Show all commits
@@ -0,0 +1,8 @@
using MayShow.Models;
namespace MayShow.Interfaces;
interface IUpdateRecentlyUsed
{
void UpdateRecentlyUsed(PDFReport report);
}
@@ -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
@@ -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<PDFReportInfo> _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<PDFReportInfo>(_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<PDFReportInfo>(_settings.AllReportInfo.OrderBy(x => x.Title));
await _settings.SaveSettingsAsync();
}
}