11using System . ComponentModel ;
2+ using System . Reactive ;
23using System . Reactive . Linq ;
34using System . Text . Json . Nodes ;
45using System . Text . Json . Serialization ;
@@ -60,43 +61,51 @@ public partial class ExtraNetworkCardViewModel : DisposableLoadableViewModelBase
6061 [ ObservableProperty ]
6162 private HybridModelFile ? selectedBaseModel ;
6263
63- public readonly SourceCache < HybridModelFile , string > LoraModelsSource = new ( p => p . GetId ( ) ) ;
64-
6564 /// <inheritdoc/>
6665 public ExtraNetworkCardViewModel ( IInferenceClientManager clientManager , ISettingsManager settingsManager )
6766 {
6867 this . settingsManager = settingsManager ;
6968 ClientManager = clientManager ;
7069
71- var filterPredicate = this . WhenPropertyChanged ( vm => vm . SelectedBaseModel )
70+ // Observable signal when SelectedBaseModel changes
71+ var baseModelChangedSignal = this . WhenPropertyChanged ( vm => vm . SelectedBaseModel )
7272 . Throttle ( TimeSpan . FromMilliseconds ( 50 ) )
73- . DistinctUntilChanged ( )
74- . ObserveOn ( SynchronizationContext . Current )
75- . Select ( _ => ( Func < HybridModelFile , bool > ) FilterCompatibleLoras ) ;
73+ . Select ( _ => Unit . Default ) ;
74+
75+ // Observable signal when the FilterExtraNetworksByBaseModel setting changes
76+ var settingChangedSignal = settingsManager
77+ . ObservePropertyChanged ( s => s . FilterExtraNetworksByBaseModel )
78+ . Select ( _ => Unit . Default ) ;
79+
80+ // Combine signals
81+ var reapplyFilterSignal = Observable
82+ . Merge ( [ baseModelChangedSignal , settingChangedSignal ] )
83+ // StartWith ensures the filter is applied at least once initially
84+ . StartWith ( Unit . Default ) ;
85+
86+ var filterPredicate = reapplyFilterSignal
87+ . ObserveOn ( SynchronizationContext . Current ! )
88+ . Select ( _ =>
89+ {
90+ if ( ! settingsManager . Settings . FilterExtraNetworksByBaseModel )
91+ return ( Func < HybridModelFile , bool > ) ( _ => true ) ;
92+
93+ return ( Func < HybridModelFile , bool > ) FilterCompatibleLoras ;
94+ } ) ;
7695
7796 AddDisposable (
78- LoraModelsSource
79- . Connect ( )
80- . DeferUntilLoaded ( )
97+ ClientManager
98+ . LoraModelsChangeSet . DeferUntilLoaded ( )
8199 . Filter ( filterPredicate )
82100 . SortAndBind (
83101 LoraModels ,
84102 SortExpressionComparer < HybridModelFile >
85103 . Ascending ( f => f . Type )
86104 . ThenByAscending ( f => f . SortKey )
87105 )
88- . ObserveOn ( SynchronizationContext . Current )
106+ . ObserveOn ( SynchronizationContext . Current ! )
89107 . Subscribe ( )
90108 ) ;
91-
92- AddDisposable (
93- settingsManager . RegisterPropertyChangedHandler (
94- s => s . FilterExtraNetworksByBaseModel ,
95- _ => LoraModelsSource . Refresh ( )
96- )
97- ) ;
98-
99- LoraModelsSource . EditDiff ( clientManager . LoraModels ) ;
100109 }
101110
102111 public IObservableCollection < HybridModelFile > LoraModels { get ; } =
@@ -118,7 +127,7 @@ public override JsonObject SaveStateToJsonObject()
118127 IsModelWeightEnabled = IsModelWeightEnabled ,
119128 IsClipWeightEnabled = IsClipWeightEnabled ,
120129 ModelWeight = ModelWeight ,
121- ClipWeight = ClipWeight
130+ ClipWeight = ClipWeight ,
122131 }
123132 ) ;
124133 }
0 commit comments