SettingsPage.axaml had TextBox / CheckBox TwoWay bindings to the Settings singleton, but no Save button — user edits mutated the in-memory instance and were lost on the next launch. This commit addes the missing save path: - Settings.Save() writes the current instance to ~/.config/PostIt/postit-settings.json (symmetrical to Load), with 0600 POSIX permissions matching TokenStore.Save. - Settings.IsDirty ObservableProperty flips to true on every setter that flows through the four top-level [ObservableProperty] fields (DarkMode, BlogsApiUrl, BusinessApiUrl, plus the OnAuthenticationChanged partial for the Authentication sub-property). Sub-property edits (Authentication.Authority / ClientId / RedirectUri / Scopes) are caught by a PropertyChanged subscription wired up in OnAuthenticationChanged and re-wired on each Authentication reassignment. - [RelayCommand(CanExecute = nameof(CanSave))] on Save itself emits the SaveCommand ICommand that the XAML binds to. OnIsDirtyChanged calls SaveCommand.NotifyCanExecuteChanged() so the button auto-enables / auto-disables. The Avalonia binding is 'SaveCommand' without a suffix — the source generator emits that property name from the Save method. - ApplyJson resets IsDirty = false at the end so disk / embedded loads don't leave the page stuck in dirty state. - SettingsPage.axaml: fixed the RowDefinition count (4 rows declared, 10 used — controls at rows 4..9 were rendering outside the grid), and added a Sauver button at row 10 bound to SaveCommand with IsEnabled driven by !IsDirty. Build: dotnet build src/PostIt/PostIt/PostIt.csproj → 0 errors. Tests: 45 / 45 passing. |
||
|---|---|---|
| .. | ||
| PostIt | ||
| PostIt.Android | ||
| PostIt.Browser | ||
| PostIt.Desktop | ||
| Directory.Packages.props | ||