|
@@ -24,13 +24,13 @@ namespace InABox.Avalonia
|
|
|
|
|
|
public delegate void CoreRepositoryItemCreatedEvent<TShell>(object sender, CoreRepositoryItemCreatedArgs<TShell> args);
|
|
|
|
|
|
- public class CoreRepository
|
|
|
+ public abstract class CoreRepository
|
|
|
{
|
|
|
- public static bool IsCached(string filename) =>
|
|
|
+ public static bool IsCached(string? filename) =>
|
|
|
!String.IsNullOrWhiteSpace(filename)
|
|
|
&& File.Exists(CacheFileName(filename));
|
|
|
|
|
|
- public static string CacheFileName(string filename) =>
|
|
|
+ public static string CacheFileName(string? filename) =>
|
|
|
Path.Combine(CacheFolder(), filename);
|
|
|
|
|
|
public static string CacheFolder()
|
|
@@ -43,7 +43,9 @@ namespace InABox.Avalonia
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- public static Guid CacheID { get; set; }
|
|
|
+ public static Guid CacheID { get; set; }
|
|
|
+
|
|
|
+ public abstract string DefaultFileName();
|
|
|
|
|
|
}
|
|
|
|
|
@@ -65,10 +67,11 @@ namespace InABox.Avalonia
|
|
|
|
|
|
public DateTime LastUpdated { get; protected set; }
|
|
|
|
|
|
- public String FileName { get; set; }
|
|
|
+ public Func<string>? FileName { get; }
|
|
|
|
|
|
+ public override string DefaultFileName() => typeof(TEntity).Name + ".db";
|
|
|
|
|
|
- protected CoreRepository(IModelHost host, Func<Filter<TEntity>> filter)
|
|
|
+ protected CoreRepository(IModelHost host, Func<Filter<TEntity>> filter, Func<string>? filename = null)
|
|
|
{
|
|
|
AllItems = new CoreObservableCollection<TItem>();
|
|
|
AllItems.CollectionChanged += (sender, args) => ItemsChanged(AllItems);
|
|
@@ -83,6 +86,7 @@ namespace InABox.Avalonia
|
|
|
Reset();
|
|
|
Host = host;
|
|
|
Filter = filter;
|
|
|
+ FileName = filename;
|
|
|
}
|
|
|
|
|
|
protected virtual void ItemsChanged(IEnumerable<TItem> items)
|
|
@@ -193,7 +197,8 @@ namespace InABox.Avalonia
|
|
|
Items.Clear();
|
|
|
SelectedItems.Clear();
|
|
|
|
|
|
- if (!Loaded && CoreRepository.IsCached(FileName))
|
|
|
+ var filename = FileName?.Invoke();
|
|
|
+ if (!Loaded && CoreRepository.IsCached(filename))
|
|
|
{
|
|
|
DoBeforeLoad();
|
|
|
if (LoadFromStorage())
|
|
@@ -510,13 +515,14 @@ namespace InABox.Avalonia
|
|
|
|
|
|
protected bool LoadFromStorage()
|
|
|
{
|
|
|
- if (String.IsNullOrWhiteSpace(FileName))
|
|
|
+ var filename = FileName?.Invoke();
|
|
|
+ if (String.IsNullOrWhiteSpace(filename))
|
|
|
{
|
|
|
InitializeTables();
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- var file = CacheFileName(FileName);
|
|
|
+ var file = CacheFileName(filename);
|
|
|
if (File.Exists(file))
|
|
|
{
|
|
|
LastUpdated = File.GetLastWriteTime(file);
|
|
@@ -556,7 +562,8 @@ namespace InABox.Avalonia
|
|
|
|
|
|
protected void SaveToStorage()
|
|
|
{
|
|
|
- if (String.IsNullOrWhiteSpace(FileName))
|
|
|
+ var filename = FileName?.Invoke();
|
|
|
+ if (String.IsNullOrWhiteSpace(filename))
|
|
|
return;
|
|
|
|
|
|
QueryStorage storage = new QueryStorage();
|
|
@@ -566,7 +573,7 @@ namespace InABox.Avalonia
|
|
|
var data = storage.WriteBinary(BinarySerializationSettings.Latest);
|
|
|
try
|
|
|
{
|
|
|
- var file = CacheFileName(FileName);
|
|
|
+ var file = CacheFileName(filename);
|
|
|
File.WriteAllBytes(file,data);
|
|
|
}
|
|
|
catch (Exception e)
|