6.6 KiB
6.6 KiB
name, overview, todos, isProject
| name | overview | todos | isProject | |||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Update-tab met changelog | Add an "Update" tab to the settings that reads releases from git.hibbit.net (public Gitea/Forgejo API), shows the changelog rendered as Markdown, and on "Updaten" downloads the installer, runs it silently and restarts kniip. |
|
false |
Update-tab met changelog
Uitgangspunten
- git.hibbit.net heeft een Gitea/Forgejo-API (
/api/v1/versiongeeft28.3.0). Releases:GET https://git.hibbit.net/api/v1/repos/rogier/kniip/releases?limit=20. De repo moet publiek worden; nu geeft die URL 404. - Per release gebruiken we deze velden:
tag_name(v1.2.0),name,body(markdown-changelog),published_at,draft,prerelease,html_urlenassets[]. Uitassets[]zoeken wename=Kniip-Setup-*.exeen de bijbehorendebrowser_download_urlop. - Alleen handmatig controleren: bij het openen van de tab en met de knop "Opnieuw controleren". Er komt geen achtergrondcontrole.
- Huidige versie:
Assembly.GetEntryAssembly().GetName().Version, gezet via-p:Versionin build.ps1. NietInformationalVersion, want daar zet de .NET 8 SDK een+commithashachter.
flowchart LR
Tab[Update-tab geopend] --> Api["GET releases API"]
Api --> Compare{"Nieuwere versie?"}
Compare -->|ja| Show["Changelog van alle nieuwere versies + knop Updaten"]
Compare -->|nee| Current["'Je hebt de nieuwste versie' + changelog huidige versie"]
Show --> Download["Installer downloaden naar TEMP met voortgang"]
Download --> Exit["Vensters sluiten, installer /VERYSILENT starten, kniip afsluiten"]
Exit --> Restart["Installer start kniip --updated"]
Nieuwe bestanden
src/Kniip/Update/UpdateChecker.cs- Record
ReleaseInfo(Version Version, string Tag, string Title, DateTimeOffset? Date, string Body, string HtmlUrl, string? InstallerUrl, long InstallerSize). Task<IReadOnlyList<ReleaseInfo>> GetReleasesAsync(CancellationToken): haalt de releases op via één statischeHttpClient(zoals in ZiplineUploader.cs) met User-Agentkniip/<versie>. Drafts, prereleases en tags die niet als versie te lezen zijn vallen af. Gesorteerd van nieuw naar oud.static Version CurrentVersion, genormaliseerd naar 3 delen voor de vergelijking.
- Record
src/Kniip/Update/UpdateInstaller.csTask<string> DownloadAsync(ReleaseInfo, IProgress<double>, CancellationToken)downloadt naar%TEMP%\kniip-update\Kniip-Setup-<versie>.exe. Daarna controleren we of de bestandsgrootte gelijk is aansizevan de asset.Start(string path)start de installer met/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /CLOSEAPPLICATIONS.UsePreviousTasksbehoudt de eerder gekozen integraties.
src/Kniip/Update/MarkdownRenderer.cs: zet markdown om naar een WPFFlowDocumentvia Markdig (nieuwe NuGet-referentie in Kniip.csproj). Een eigen walker over de AST ondersteunt:- koppen, alinea's, opsommingen (ook genummerd en genest) en citaten
- codeblokken en inline code (Consolas, grijze achtergrond), vet, cursief en doorhalen
- links:
Hyperlinkdie de browser opent, metProcess.StartzoalsOpenUrlinSettingsWindow - horizontale lijnen
- kleuren en lettertypen uit de bestaande resources (
AccentBrush,SubtleTextBrush, Segoe UI)
Wijzigingen
- src/Kniip/Settings/SettingsWindow.xaml: nieuwe
TabItem Header="Update"na "Editor", met:CardTitle"Update", met daaronder "Geïnstalleerde versie: 1.0.0" en een statusregel (Hint).- Knoppen
AccentButton"Updaten naar x.y.z" (verborgen als er geen update is),SecondaryButton"Opnieuw controleren" enFlatButton"Releasepagina". ProgressBar(verborgen) voor de download.- Changelog in een
FlowDocumentScrollViewermet vaste hoogte (~300) en een rand. De tab staat al in eenScrollViewer, dus de viewer heeft een vaste hoogte nodig.
- src/Kniip/Settings/SettingsWindow.xaml.cs:
- In
Tabs_SelectionChangedstart de eerste keer dat de Update-tab wordt gekozen de controle (CheckForUpdatesAsync). Het resultaat blijft bewaard zolang het venster open is. - Changelog: per nieuwere release een kop "Versie x.y.z, d MMMM yyyy" met de body eronder. Is er geen update, dan tonen we de notes van de huidige versie. Is er een fout of offline, dan tonen we een melding in de statusregel.
Update_Click:- Bevestigen met "kniip wordt afgesloten en bijgewerkt".
- Downloaden met voortgang. Tijdens het downloaden zijn de knoppen uitgeschakeld en annuleert sluiten van het venster de download.
App.Instance.TryExitForUpdate(). Lukt dat, danUpdateInstaller.StartenShutdown.
- In
- src/Kniip/App.xaml.cs:
- Splits
ExitApplicationop inbool TryCloseAllWindows(). Die stopt als er een screencast loopt of als een editor het sluiten tegenhoudt, zodat we de installer pas starten als kniip echt kan stoppen. - Nieuw argument
--updatedinHandleArguments: toont de ballon "kniip is bijgewerkt naar versie x.y.z" en gedraagt zich verder als--tray.
- Splits
- installer/Kniip.iss: extra
[Run]-regel die kniip opnieuw start na een stille installatie:Filename: "{app}\{#AppExe}"; Parameters: "--updated"; Flags: nowait; Check: WizardSilent - README.md, sectie "Een nieuwe versie publiceren": de releasebeschrijving (markdown) wordt de changelog in kniip, de installerbijlage moet
Kniip-Setup-<versie>.exeheten, en de repo moet publiek zijn voor de updatecontrole.
Randgevallen
- Draai je kniip als losse exe (niet geïnstalleerd), dan installeert de update in
%LOCALAPPDATA%\Programs\Kniip. Dat is acceptabel; het staat in de bevestiging. - Een release zonder installerbijlage: geen knop Updaten, wel een link naar de releasepagina.
- Een oude download in
%TEMP%\kniip-updatewordt overschreven.