11using  Google . Protobuf . WellKnownTypes ; 
2+ using  Serilog ; 
23using  System ; 
34using  System . Collections . Generic ; 
45using  System . IO ; 
@@ -30,11 +31,6 @@ namespace Coder.Desktop.App.Services;
3031    /// <param name="ct"></param> 
3132    /// <returns></returns> 
3233    public  Task  Write ( T  settings ,  CancellationToken  ct  =  default ) ; 
33-     /// <summary> 
34-     /// Returns null if the settings are not cached or not available. 
35-     /// </summary> 
36-     /// <returns></returns> 
37-     public  T ?  GetFromCache ( ) ; 
3834} 
3935
4036/// <summary> 
@@ -80,6 +76,12 @@ public SettingsManager(string? settingsFilePath = null)
8076
8177    public  async  Task < T >  Read ( CancellationToken  ct  =  default ) 
8278    { 
79+         if  ( _cachedSettings  is  not null ) 
80+         { 
81+             // return cached settings if available 
82+             return  ( T ) _cachedSettings . Clone ( ) ; 
83+         } 
84+ 
8385        // try to get the lock with short timeout 
8486        if  ( ! await  _gate . WaitAsync ( LockTimeout ,  ct ) . ConfigureAwait ( false ) ) 
8587            throw  new  InvalidOperationException ( 
@@ -145,41 +147,39 @@ await File.WriteAllTextAsync(_settingsFilePath, json, ct)
145147            _gate . Release ( ) ; 
146148        } 
147149    } 
148- 
149-     public  T ?  GetFromCache ( ) 
150-     { 
151-         return  _cachedSettings ; 
152-     } 
153150} 
154151
155152public  interface  ISettings 
156153{ 
157154    /// <summary> 
158-     /// Gets the version of  the settings schema . 
155+     /// FileName where  the settings are stored . 
159156    /// </summary> 
160-     int   Version  {  get ;  } 
157+     static   abstract   string   SettingsFileName  {  get ;  } 
161158
162159    /// <summary> 
163-     /// FileName where  the settings are stored . 
160+     /// Gets the version of  the settings schema . 
164161    /// </summary> 
165-     static abstract  string  SettingsFileName  {  get ;  } 
162+     int  Version  {  get ;  } 
163+ 
164+     ISettings  Clone ( ) ; 
166165} 
167166
168167/// <summary> 
169168/// CoderConnect settings class that holds the settings for the CoderConnect feature. 
170169/// </summary> 
171170public  class  CoderConnectSettings  :  ISettings 
172171{ 
172+     public  static string  SettingsFileName  {  get ;  }  =  "coder-connect-settings.json" ; 
173+     public  int  Version  {  get ;  set ;  } 
174+     public  bool  ConnectOnLaunch  {  get ;  set ;  } 
175+ 
173176    /// <summary> 
174-     /// CoderConnect settings version. Increment this when the settings schema changes. 
177+     /// CoderConnect current  settings version. Increment this when the settings schema changes. 
175178    /// In future iterations we will be able to handle migrations when the user has 
176179    /// an older version. 
177180    /// </summary> 
178-     public  int  Version  {  get ;  set ;  } 
179-     public  bool  ConnectOnLaunch  {  get ;  set ;  } 
180-     public  static string  SettingsFileName  {  get ;  }  =  "coder-connect-settings.json" ; 
181+     private  const  int  VERSION  =  1 ; 
181182
182-     private  const  int  VERSION  =  1 ;  // Default version for backward compatibility 
183183    public  CoderConnectSettings ( ) 
184184    { 
185185        Version  =  VERSION ; 
@@ -192,10 +192,13 @@ public CoderConnectSettings(int? version, bool connectOnLogin)
192192        ConnectOnLaunch  =  connectOnLogin ; 
193193    } 
194194
195+     ISettings  ISettings . Clone ( ) 
196+     { 
197+         return  Clone ( ) ; 
198+     } 
199+ 
195200    public  CoderConnectSettings  Clone ( ) 
196201    { 
197202        return  new  CoderConnectSettings ( Version ,  ConnectOnLaunch ) ; 
198203    } 
199- 
200- 
201204} 
0 commit comments