--- name: Update-melding blauwe stip overview: kniip controleert op de achtergrond (bij het starten en daarna elke 24 uur, uit te zetten in Instellingen) op een nieuwe versie. Als die er is, krijgen de knop Instellingen in de editor-werkbalk en de tab Update in Instellingen een blauwe stip. todos: - id: setting content: CheckForUpdates toevoegen aan AppSettings status: completed - id: notifier content: UpdateNotifier maken (controle na het starten en elke 24 uur, AvailabilityChanged-event, Report) status: completed - id: app content: "UpdateNotifier koppelen in App: aanroepen bij het opstarten en in SaveSettings" status: completed - id: editor-badge content: Blauwe stip op de knop Instellingen in EditorWindow status: completed - id: settings-tab content: Blauwe stip op de tab Update, vinkje voor automatische controle, Report na handmatige controle status: completed - id: changelog-readme content: CHANGELOG.md sectie 1.1.4 toevoegen en README bijwerken (achtergrondcontrole, versietabel, build-commentaar) status: completed - id: bump-version content: Versie naar 1.1.4 in build.ps1, installer/Kniip.iss en src/Kniip/Kniip.csproj status: completed - id: build-release content: build.ps1 draaien, commit "1.1.4", tag 1.1.4 en pushen; installer klaarzetten voor de release op git.hibbit.net status: completed isProject: false --- # Blauwe update-melding bij Instellingen en de tab Update ## Huidige situatie - [src/Kniip/Update/UpdateChecker.cs](src/Kniip/Update/UpdateChecker.cs) haalt releases op met `GetReleasesAsync`, maar dat gebeurt nu alleen in [src/Kniip/Settings/SettingsWindow.xaml.cs](src/Kniip/Settings/SettingsWindow.xaml.cs) zodra de tab Update geopend wordt (`Tabs_SelectionChanged` gevolgd door `CheckForUpdatesAsync`). - De knop Instellingen staat in [src/Kniip/Editor/EditorWindow.xaml](src/Kniip/Editor/EditorWindow.xaml) (regel 318–321, glyph ``). - `AccentBrush` is `#0067C0` (blauw) in [src/Kniip/App.xaml](src/Kniip/App.xaml), en die gebruiken we voor de stip. ```mermaid flowchart LR AppStart[App start] --> Notifier[UpdateNotifier] Timer["Timer 24 uur"] --> Notifier Notifier -->|GetReleasesAsync| Checker[UpdateChecker] Notifier -->|AvailabilityChanged| EditorBadge[Stip op knop Instellingen] Notifier -->|AvailabilityChanged| TabBadge[Stip op tab Update] SettingsCheck[Handmatige controle in tab Update] -->|Report| Notifier ``` ## Stappen 1. **Nieuwe instelling** in [src/Kniip/Settings/AppSettings.cs](src/Kniip/Settings/AppSettings.cs): `public bool CheckForUpdates { get; set; } = true;` 2. **Nieuwe klasse `UpdateNotifier`** in `src/Kniip/Update/UpdateNotifier.cs`: - Houdt `ReleaseInfo? Available` bij en `bool IsUpdateAvailable`, met een event `AvailabilityChanged` dat op de UI-thread wordt afgevuurd. - `Apply(bool enabled)`: als de controle aanstaat, wordt die kort na het starten uitgevoerd (ongeveer 10 seconden vertraging, zodat het opstarten niet trager wordt) en daarna via een `DispatcherTimer` elke 24 uur. Als de controle uitstaat, stopt de timer en verdwijnt de stip. - `CheckAsync()` roept `UpdateChecker.GetReleasesAsync` aan en vangt `UpdateException` stil af, zodat een achtergrondcontrole nooit een foutmelding toont. - `Report(ReleaseInfo? newest)` wordt gebruikt door de handmatige controle in de tab Update, zodat de stip ook daarmee gelijkloopt. - "Nieuwer" betekent hetzelfde als in `ShowReleases`: `r.Version > UpdateChecker.CurrentVersion`. 3. **App** ([src/Kniip/App.xaml.cs](src/Kniip/App.xaml.cs)): - Een property `public UpdateNotifier Updates { get; } = new();` - Bij het opstarten (na `ApplyHotkeys`) wordt `Updates.Apply(Settings.CheckForUpdates)` aangeroepen. - In `SaveSettings()` gebeurt dat opnieuw, zodat het aan- of uitzetten van de controle direct effect heeft. 4. **Stip op de knop Instellingen** ([src/Kniip/Editor/EditorWindow.xaml](src/Kniip/Editor/EditorWindow.xaml) en `.xaml.cs`): - De inhoud van de knop wordt een `Grid` met de bestaande glyph plus ``. - In de code-behind abonneert de editor zich op `App.Instance.Updates.AvailabilityChanged`. Bij een wijziging worden `SettingsBadge.Visibility` en de tooltip bijgewerkt (de tooltip wordt "Instellingen - nieuwe versie beschikbaar"). Bij `Closed` wordt het abonnement weer opgezegd. 5. **Stip op de tab Update en een vinkje voor de achtergrondcontrole** ([src/Kniip/Settings/SettingsWindow.xaml](src/Kniip/Settings/SettingsWindow.xaml) en `.xaml.cs`): - De `Header` van `UpdateTab` wordt een horizontale `StackPanel` met de tekst "Update" en daarachter een blauwe `Ellipse x:Name="UpdateTabBadge"` van dezelfde stijl, met een margin links van 6. - In de tab Update, onder `CurrentVersionText`, komt ``. Die wordt gevuld in `LoadFrom`, bewaard in `Save_Click` en meegenomen bij Standaardinstellingen. - Het venster abonneert zich op `AvailabilityChanged` om de zichtbaarheid van de stip te zetten, en zegt dat abonnement op bij `Closed`. - Na een handmatige controle roept `ShowReleases` `App.Instance.Updates.Report(newer.FirstOrDefault())` aan. ## Gedrag - De stip blijft zichtbaar zolang er een nieuwere versie is. Na het updaten start kniip met de nieuwe versie, en dan is er geen nieuwere versie meer, dus verdwijnt de stip vanzelf. - Er komen geen extra meldingen in het systeemvak, zoals afgesproken. ## Changelog en release 1.1.4 (na de codewijzigingen) 6. **[CHANGELOG.md](CHANGELOG.md)**: bovenaan een nieuwe sectie `## 1.1.4 - 2026-11-09` in dezelfde stijl als de eerdere versies, bijvoorbeeld: - Onder `### Nieuw`: **Melding bij een nieuwe versie.** kniip kijkt bij het starten en daarna elke dag of er een nieuwere versie is. Als die er is, staat er een blauwe stip op de knop **Instellingen** in de editor en op de tab **Update**. Je zet dit uit in de tab **Update** met **Automatisch controleren op nieuwe versies**. - Onder `### Gewijzigd`: kniip zoekt nu standaard zelf op de achtergrond naar updates. Tot nu toe gebeurde dat alleen als je de tab **Update** opende, zoals vermeld bij 1.1.0. 7. **[README.md](README.md)**: - In de versietabel 1.1.3 vervangen door 1.1.4, met de link `.../releases/download/1.1.4/Kniip-Setup-1.1.4.exe`. - Het commentaar `# versie 1.1.3` bij het bouwen wordt `# versie 1.1.4`. - Bij "Updaten vanuit kniip" komt een zin over de automatische controle en de blauwe stip. 8. **Versienummer** van 1.1.3 naar 1.1.4 in [build.ps1](build.ps1) (`$Version`), [installer/Kniip.iss](installer/Kniip.iss) (`#define AppVersion`) en [src/Kniip/Kniip.csproj](src/Kniip/Kniip.csproj) (``). 9. **Bouwen en uitbrengen**, op dezelfde manier als bij 1.1.2 en 1.1.3: - `.\build.ps1` draaien. Dat levert `artifacts\Kniip-1.1.4.exe` en `artifacts\Kniip-Setup-1.1.4.exe` op. - Daarna `git add -A`, `git commit -m "1.1.4"`, `git tag 1.1.4` (zonder `v`, net als de vorige tags) en `git push origin HEAD` plus `git push origin 1.1.4`. - De release op git.hibbit.net maak je, net als eerder, zelf aan. Je hangt daar `artifacts\Kniip-Setup-1.1.4.exe` aan als bijlage en plakt de 1.1.4-tekst uit de changelog in de beschrijving. Ik lever die tekst kant-en-klaar aan.