11using Coder . Desktop . App . Services ;
22using CommunityToolkit . Mvvm . ComponentModel ;
3- using CommunityToolkit . Mvvm . Input ;
43using Microsoft . Extensions . Logging ;
54using Microsoft . UI . Dispatching ;
65using Microsoft . UI . Xaml ;
7- using Microsoft . UI . Xaml . Controls ;
86using System ;
97
108namespace Coder . Desktop . App . ViewModels ;
119
1210public partial class SettingsViewModel : ObservableObject
1311{
14- private Window ? _window ;
15- private DispatcherQueue ? _dispatcherQueue ;
16-
1712 private readonly ILogger < SettingsViewModel > _logger ;
1813
1914 [ ObservableProperty ]
2015 public partial bool ConnectOnLaunch { get ; set ; } = false ;
2116
17+ [ ObservableProperty ]
18+ public partial bool StartOnLoginDisabled { get ; set ; } = false ;
19+
2220 [ ObservableProperty ]
2321 public partial bool StartOnLogin { get ; set ; } = false ;
2422
@@ -31,6 +29,10 @@ public SettingsViewModel(ILogger<SettingsViewModel> logger, ISettingsManager set
3129 ConnectOnLaunch = _settingsManager . Read ( SettingsManager . ConnectOnLaunchKey , false ) ;
3230 StartOnLogin = _settingsManager . Read ( SettingsManager . StartOnLoginKey , false ) ;
3331
32+ // Various policies can disable the "Start on login" option.
33+ // We disable the option in the UI if the policy is set.
34+ StartOnLoginDisabled = StartupManager . IsDisabledByPolicy ( ) ;
35+
3436 this . PropertyChanged += ( _ , args ) =>
3537 {
3638 if ( args . PropertyName == nameof ( ConnectOnLaunch ) )
@@ -41,28 +43,34 @@ public SettingsViewModel(ILogger<SettingsViewModel> logger, ISettingsManager set
4143 }
4244 catch ( Exception ex )
4345 {
44- Console . WriteLine ( $ "Error saving { SettingsManager . ConnectOnLaunchKey } setting: { ex . Message } ") ;
46+ _logger . LogError ( $ "Error saving { SettingsManager . ConnectOnLaunchKey } setting: { ex . Message } ") ;
4547 }
4648 }
4749 else if ( args . PropertyName == nameof ( StartOnLogin ) )
4850 {
4951 try
5052 {
5153 _settingsManager . Save ( SettingsManager . StartOnLoginKey , StartOnLogin ) ;
54+ if ( StartOnLogin )
55+ {
56+ StartupManager . Enable ( ) ;
57+ }
58+ else
59+ {
60+ StartupManager . Disable ( ) ;
61+ }
5262 }
5363 catch ( Exception ex )
5464 {
55- Console . WriteLine ( $ "Error saving { SettingsManager . StartOnLoginKey } setting: { ex . Message } ") ;
65+ _logger . LogError ( $ "Error saving { SettingsManager . StartOnLoginKey } setting: { ex . Message } ") ;
5666 }
5767 }
5868 } ;
59- }
6069
61- public void Initialize ( Window window , DispatcherQueue dispatcherQueue )
62- {
63- _window = window ;
64- _dispatcherQueue = dispatcherQueue ;
65- if ( ! _dispatcherQueue . HasThreadAccess )
66- throw new InvalidOperationException ( "Initialize must be called from the UI thread" ) ;
70+ // Ensure the StartOnLogin property matches the current startup state.
71+ if ( StartOnLogin != StartupManager . IsEnabled ( ) )
72+ {
73+ StartOnLogin = StartupManager . IsEnabled ( ) ;
74+ }
6775 }
6876}
0 commit comments