浏览代码

avalonia: If not connected, CoreRepository pulls from cache regardless of whether 'force' is set

Kenric Nugteren 1 周之前
父节点
当前提交
0e1055d9ca
共有 1 个文件被更改,包括 33 次插入33 次删除
  1. 33 33
      InABox.Avalonia/DataModels/CoreRepository.cs

+ 33 - 33
InABox.Avalonia/DataModels/CoreRepository.cs

@@ -72,20 +72,20 @@ namespace InABox.Avalonia
 
         public override string ToString() => Name ?? "";
     }
-    
+
     public abstract class CoreRepository<TParent, TItem, TEntity> : CoreRepository, ICoreRepository, IEnumerable<TItem>
         where TParent : CoreRepository<TParent, TItem, TEntity>
-        where TEntity : Entity, IRemotable, IPersistent, new() 
-        where TItem : Shell<TParent,TEntity>, new()
+        where TEntity : Entity, IRemotable, IPersistent, new()
+        where TItem : Shell<TParent, TEntity>, new()
     {
         readonly MultiQuery _query = new();
-        
+
         public Func<Filter<TEntity>> Filter { get; set; }
 
         protected virtual Filter<TEntity>? BaseFilter() => null;
-        
+
         public IModelHost Host { get; set; }
-        
+
         private DateTime _lastUpdated = DateTime.MinValue;
         public DateTime LastUpdated
         {
@@ -96,27 +96,27 @@ namespace InABox.Avalonia
                 OnPropertyChanged();
             }
         }
-        
+
         public Func<string>? FileName { get; }
 
-        
+
         private string DataFileName() => FileName != null
             ? $"{FileName.Invoke()}.data"
             : string.Empty;
-        
+
         private string FilterFileName() => !string.IsNullOrWhiteSpace(FilterTag) && FileName != null
             ? $"{FileName.Invoke()}.filter"
             : string.Empty;
-        
+
         protected CoreRepository(IModelHost host, Func<Filter<TEntity>> filter, Func<string>? filename = null)
         {
             AllItems = new CoreObservableCollection<TItem>();
             AllItems.CollectionChanged += (sender, args) => ItemsChanged(AllItems);
             // EnableSynchronization(AllItems);
-            
+
             //Items = new CoreObservableCollection<TItem>(); 
             // EnableSynchronization(Items);
-            
+
             Reset();
             Host = host;
             Filter = filter;
@@ -142,17 +142,17 @@ namespace InABox.Avalonia
         // }
 
         #region INotifyPropertyChanged
-        
+
         public event PropertyChangedEventHandler? PropertyChanged;
 
         protected void DoPropertyChanged(object sender, PropertyChangedEventArgs args)
         {
             PropertyChanged?.Invoke(sender, args);
         }
-        
+
         protected bool SetProperty<T>(ref T field, T value, [CallerMemberName] string propertyName = "")
         {
-            if (EqualityComparer<T>.Default.Equals(field, value)) 
+            if (EqualityComparer<T>.Default.Equals(field, value))
                 return false;
             field = value;
             OnPropertyChanged(propertyName);
@@ -161,43 +161,43 @@ namespace InABox.Avalonia
 
         protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
             => DoPropertyChanged(this, new PropertyChangedEventArgs(propertyName));
-        
+
         #endregion
-        
+
         #region Image Lookups
-        
+
         public Dictionary<Guid, byte[]> Images { get; private set; } = new Dictionary<Guid, byte[]>();
 
         public byte[]? GetImageSource(Guid id)
         {
             return Images.GetValueOrDefault(id);
         }
-        
+
         public byte[]? GetImage(Guid id) => Images.GetValueOrDefault(id);
-        
+
         public bool HasImages() => Images.Any();
 
         #endregion
-        
+
         protected virtual string FilterTag => typeof(TEntity).EntityName().Split('.').Last();
-        
+
         public CoreObservableCollection<CoreRepositoryFilter> AvailableFilters { get; } = new();
         IEnumerable ICoreRepository.AvailableFilters => AvailableFilters;
-        
+
         protected Filter<TEntity>? SelectedFilter =>
             Serialization.Deserialize<Filter<TEntity>>(AvailableFilters.FirstOrDefault(x => x.Selected)?.Filter);
-        
+
         public bool FiltersVisible => AvailableFilters.Any();
 
         private bool FilterChanged = false;
 
         public string? SelectedFilterName => AvailableFilters.FirstOrDefault(x => x.Selected)?.Name;
-        
+
         public void SelectFilter(String? name)
         {
             var currentSelected = AvailableFilters.FirstOrDefault(x => x.Selected);
             var definition = AvailableFilters.FirstOrDefault(x => String.Equals(x.Name, name));
-            if(definition is null && name is null)
+            if (definition is null && name is null)
             {
                 definition = AvailableFilters.FirstOrDefault(x => x.Name == "All");
             }
@@ -206,7 +206,7 @@ namespace InABox.Avalonia
                 availableFilter.Selected = definition == availableFilter;
             OnPropertyChanged(nameof(AvailableFilters));
         }
-        
+
         protected Filter<TEntity>? EffectiveFilter()
         {
             var filters = new Filters<TEntity>();
@@ -216,7 +216,7 @@ namespace InABox.Avalonia
             var result = filters.Combine();
             return result;
         }
-        
+
         protected Columns<TOtherEntity> GetColumns<TOtherItem, TOtherEntity>()
             where TOtherItem : Shell<TParent, TOtherEntity>, new()
             where TOtherEntity : Entity, IRemotable, IPersistent, new()
@@ -231,11 +231,11 @@ namespace InABox.Avalonia
             //Items.Clear();
             Images.Clear();
         }
-        
-        
-        
+
+
+
         public bool Loaded { get; protected set; }
-        
+
         private void DoRefresh(bool force)
         {
             force = force || FilterChanged;
@@ -245,7 +245,7 @@ namespace InABox.Avalonia
             //Items.Clear();
 
             var dataFileName = DataFileName();
-            if (!force && !Loaded && CoreRepository.IsCached(dataFileName))
+            if ((!force || Host.Status != ConnectionStatus.Connected) && !Loaded && CoreRepository.IsCached(dataFileName))
             {
                 DoBeforeLoad();
                 if (LoadFromStorage())