77using ReactiveUI ;
88using YMouseButtonControl . Core . Services . Logging ;
99using YMouseButtonControl . Core . Services . Settings ;
10+ using YMouseButtonControl . Core . Services . StartMenuInstaller ;
1011using YMouseButtonControl . Core . Services . Theme ;
1112using YMouseButtonControl . Core . ViewModels . Models ;
1213using YMouseButtonControl . DataAccess . Models ;
@@ -19,18 +20,22 @@ public class GlobalSettingsDialogViewModel : DialogBase, IGlobalSettingsDialogVi
1920{
2021 private SettingBoolVm _startMinimizedSetting ;
2122 private bool _loggingEnabled ;
23+ private bool _startMenuChecked ;
2224 private SettingIntVm _themeSetting ;
2325 private ObservableCollection < ThemeVm > _themeCollection ;
2426 private ThemeVm _selectedTheme ;
2527 private readonly ObservableAsPropertyHelper < bool > ? _applyIsExec ;
2628
2729 public GlobalSettingsDialogViewModel (
30+ IStartMenuInstallerService startMenuInstallerService ,
2831 IEnableLoggingService enableLoggingService ,
2932 ISettingsService settingsService ,
3033 IThemeService themeService
3134 )
3235 : base ( themeService )
3336 {
37+ StartMenuEnabled = ! OperatingSystem . IsMacOS ( ) ;
38+ _startMenuChecked = StartMenuEnabled && startMenuInstallerService . InstallStatus ( ) ;
3439 _startMinimizedSetting =
3540 settingsService . GetSetting ( "StartMinimized" ) as SettingBoolVm
3641 ?? throw new Exception ( "Error retrieving StartMinimized setting" ) ;
@@ -54,16 +59,20 @@ IThemeService themeService
5459 x => x . LoggingEnabled ,
5560 selector : val => val != enableLoggingService . GetLoggingState ( )
5661 ) ;
62+ var startMenuChanged = this . WhenAnyValue (
63+ x => x . StartMenuChecked ,
64+ selector : val => StartMenuEnabled && val != startMenuInstallerService . InstallStatus ( )
65+ ) ;
5766 var themeChanged = this . WhenAnyValue (
5867 x => x . ThemeSetting . IntValue ,
5968 selector : val =>
6069 settingsService . GetSetting ( "Theme" ) is not SettingIntVm curVal
6170 || curVal . IntValue != val
6271 ) ;
63-
6472 var applyIsExecObs = this . WhenAnyValue ( x => x . AppIsExec ) ;
6573 var canSave = startMinimizedChanged
6674 . Merge ( loggingChanged )
75+ . Merge ( startMenuChanged )
6776 . Merge ( applyIsExecObs )
6877 . Merge ( themeChanged ) ;
6978 ApplyCommand = ReactiveCommand . Create (
@@ -80,6 +89,22 @@ IThemeService themeService
8089 enableLoggingService . DisableLogging ( ) ;
8190 }
8291 }
92+
93+ if (
94+ StartMenuEnabled
95+ && StartMenuChecked != startMenuInstallerService . InstallStatus ( )
96+ )
97+ {
98+ if ( StartMenuChecked )
99+ {
100+ startMenuInstallerService . Install ( ) ;
101+ }
102+ else
103+ {
104+ startMenuInstallerService . Uninstall ( ) ;
105+ }
106+ }
107+
83108 using var trn = new TransactionScope ( TransactionScopeAsyncFlowOption . Enabled ) ;
84109 settingsService . UpdateSetting ( StartMinimized ) ;
85110 settingsService . UpdateSetting ( ThemeSetting ) ;
@@ -92,6 +117,14 @@ IThemeService themeService
92117
93118 private bool AppIsExec => _applyIsExec ? . Value ?? false ;
94119
120+ public bool StartMenuChecked
121+ {
122+ get => _startMenuChecked ;
123+ set => this . RaiseAndSetIfChanged ( ref _startMenuChecked , value ) ;
124+ }
125+
126+ public bool StartMenuEnabled { get ; init ; }
127+
95128 public SettingBoolVm StartMinimized
96129 {
97130 get => _startMinimizedSetting ;
0 commit comments