|
@@ -227,6 +227,8 @@ namespace InABox.Avalonia
|
|
|
|
|
|
private void DoRefresh(bool force)
|
|
private void DoRefresh(bool force)
|
|
{
|
|
{
|
|
|
|
+ // force = force || Host.Status == ConnectionStatus.Connected;
|
|
|
|
+
|
|
var selectedIDs = SelectedItems.Select(x => x.ID).ToHashSet();
|
|
var selectedIDs = SelectedItems.Select(x => x.ID).ToHashSet();
|
|
Items.Clear();
|
|
Items.Clear();
|
|
|
|
|
|
@@ -585,53 +587,45 @@ namespace InABox.Avalonia
|
|
|
|
|
|
protected bool LoadFromStorage()
|
|
protected bool LoadFromStorage()
|
|
{
|
|
{
|
|
-
|
|
|
|
var filterFileName = FilterFileName();
|
|
var filterFileName = FilterFileName();
|
|
- if (!string.IsNullOrWhiteSpace(filterFileName))
|
|
|
|
|
|
+ if (!filterFileName.IsNullOrWhiteSpace())
|
|
{
|
|
{
|
|
- filterFileName = CacheFileName(filterFileName);
|
|
|
|
- if (File.Exists(filterFileName))
|
|
|
|
|
|
+ if(CacheManager.TryLoadJSON<ObservableCollection<CoreRepositoryFilter>>(filterFileName, out var filters, out var _))
|
|
{
|
|
{
|
|
- var json = File.ReadAllText(filterFileName);
|
|
|
|
- var filters = Serialization.Deserialize<ObservableCollection<CoreRepositoryFilter>>(json) ?? new ObservableCollection<CoreRepositoryFilter>();
|
|
|
|
AvailableFilters.ReplaceRange(filters);
|
|
AvailableFilters.ReplaceRange(filters);
|
|
Dispatcher.UIThread.Post(() => OnPropertyChanged(nameof(FiltersVisible)));
|
|
Dispatcher.UIThread.Post(() => OnPropertyChanged(nameof(FiltersVisible)));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
var dataFileName = DataFileName();
|
|
var dataFileName = DataFileName();
|
|
- if (String.IsNullOrWhiteSpace(dataFileName))
|
|
|
|
|
|
+ if (dataFileName.IsNullOrWhiteSpace())
|
|
{
|
|
{
|
|
InitializeTables();
|
|
InitializeTables();
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
-
|
|
|
|
- dataFileName = CacheFileName(dataFileName);
|
|
|
|
- if (File.Exists(dataFileName))
|
|
|
|
|
|
+
|
|
|
|
+ if(CacheManager.TryLoadBinary<QueryStorage>(dataFileName, out var storage, out var lastUpdated))
|
|
{
|
|
{
|
|
- LastUpdated = File.GetLastWriteTime(dataFileName);
|
|
|
|
- using (var stream = new FileStream(dataFileName, FileMode.Open))
|
|
|
|
|
|
+ LastUpdated = lastUpdated;
|
|
|
|
+ var defs = _query.Definitions();
|
|
|
|
+ foreach (var key in defs.Keys)
|
|
{
|
|
{
|
|
- QueryStorage storage = Serialization.ReadBinary<QueryStorage>(stream,
|
|
|
|
- BinarySerializationSettings.Latest);
|
|
|
|
- var defs = _query.Definitions();
|
|
|
|
- foreach (var key in defs.Keys)
|
|
|
|
|
|
+ var keyStr = key.ToString() ?? "";
|
|
|
|
+ if(!storage.TryGet(keyStr, out var table))
|
|
{
|
|
{
|
|
- var keyStr = key.ToString() ?? "";
|
|
|
|
- if(!storage.TryGet(keyStr, out var table))
|
|
|
|
- {
|
|
|
|
- table = InitializeTable(defs[key]);
|
|
|
|
- }
|
|
|
|
- var queryDef = _query.Definitions()[key];
|
|
|
|
- if (CheckColumns(table, queryDef.Type, queryDef.Columns))
|
|
|
|
- _query.Set(key, table);
|
|
|
|
- else
|
|
|
|
- return false;
|
|
|
|
|
|
+ table = InitializeTable(defs[key]);
|
|
}
|
|
}
|
|
|
|
+ var queryDef = _query.Definitions()[key];
|
|
|
|
+ if (CheckColumns(table, queryDef.Type, queryDef.Columns))
|
|
|
|
+ _query.Set(key, table);
|
|
|
|
+ else
|
|
|
|
+ return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
else
|
|
|
|
+ {
|
|
InitializeTables();
|
|
InitializeTables();
|
|
|
|
+ }
|
|
|
|
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
@@ -654,30 +648,18 @@ namespace InABox.Avalonia
|
|
var filterFileName = FilterFileName();
|
|
var filterFileName = FilterFileName();
|
|
if (!string.IsNullOrWhiteSpace(filterFileName))
|
|
if (!string.IsNullOrWhiteSpace(filterFileName))
|
|
{
|
|
{
|
|
- filterFileName = CacheFileName(filterFileName);
|
|
|
|
- var json = Serialization.Serialize(AvailableFilters);
|
|
|
|
- File.WriteAllText(filterFileName,json);
|
|
|
|
|
|
+ CacheManager.SaveJSON(filterFileName, AvailableFilters, DateTime.MaxValue);
|
|
}
|
|
}
|
|
|
|
|
|
var dataFileName = DataFileName();
|
|
var dataFileName = DataFileName();
|
|
- if (String.IsNullOrWhiteSpace(dataFileName))
|
|
|
|
|
|
+ if (dataFileName.IsNullOrWhiteSpace())
|
|
return;
|
|
return;
|
|
|
|
|
|
QueryStorage storage = new QueryStorage();
|
|
QueryStorage storage = new QueryStorage();
|
|
var results = _query.Results();
|
|
var results = _query.Results();
|
|
foreach (var key in results.Keys)
|
|
foreach (var key in results.Keys)
|
|
storage.Set(key.ToString() ?? "", results[key]);
|
|
storage.Set(key.ToString() ?? "", results[key]);
|
|
- var data = storage.WriteBinary(BinarySerializationSettings.Latest);
|
|
|
|
- try
|
|
|
|
- {
|
|
|
|
- var file = CacheFileName(dataFileName);
|
|
|
|
- File.WriteAllBytes(file,data);
|
|
|
|
- }
|
|
|
|
- catch (Exception e)
|
|
|
|
- {
|
|
|
|
- MobileLogging.Log(e);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ CacheManager.SaveBinary(dataFileName, storage, DateTime.MaxValue);
|
|
}
|
|
}
|
|
|
|
|
|
#endregion
|
|
#endregion
|