From c8200dead5b36bbaa8c1a3fe07673a55ba5f5e96 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Fri, 21 Aug 2026 11:28:54 -0500 Subject: [PATCH 1/3] feat: About+updater on hamburger, Start with Windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit About and a GitHub-releases updater live on the existing hamburger settings popup (the version header), not a separate Window. The updater idea is adapted from Markdown Midget (version parse/compare, UpdateOffer, win-x64 asset feed, Authenticode, portable apply) rather than a chrome copy. Aperture assets are Aperture-v{tag}-win-x64.exe; prereleases stay in the feed so current beta users can update. Apply is portable — there is no installer yet — and a Start-with-Windows Run-key is retargeted at the new exe when that checkbox was on. Start with Windows is a Settings checkbox next to Include videos / Group by date. Source of truth is HKCU\...\Run\Aperture (quoted ProcessPath); registry failures never throw. Off by default. Product choice: with no stable GitHub release yet, the newest-release line shows the newest prerelease tag rather than "none published". UNVERIFIED: live Authenticode on a downloaded GitHub asset; end-to-end apply/restart; hamburger layout on a short display (WPF, not exercised in UI). --- CHANGELOG.md | 7 + ROADMAP.md | 14 +- src/Aperture.App/App.xaml.cs | 1 + src/Aperture.App/MainWindow.xaml | 33 +- src/Aperture.App/MainWindow.xaml.cs | 3 + src/Aperture.App/Services/UpdateService.cs | 307 ++++++++++++++++++ src/Aperture.App/ViewModels/MainViewModel.cs | 257 +++++++++++++++ src/Aperture.Core/Startup/WindowsStartup.cs | 123 +++++++ src/Aperture.Core/Updates/ReleaseFeed.cs | 73 +++++ src/Aperture.Core/Updates/UpdateOffer.cs | 50 +++ src/Aperture.Core/Updates/UpdateVersion.cs | 60 ++++ tests/Aperture.Core.Tests/UpdateTests.cs | 229 +++++++++++++ .../WindowsStartupTests.cs | 123 +++++++ 13 files changed, 1270 insertions(+), 10 deletions(-) create mode 100644 src/Aperture.App/Services/UpdateService.cs create mode 100644 src/Aperture.Core/Startup/WindowsStartup.cs create mode 100644 src/Aperture.Core/Updates/ReleaseFeed.cs create mode 100644 src/Aperture.Core/Updates/UpdateOffer.cs create mode 100644 src/Aperture.Core/Updates/UpdateVersion.cs create mode 100644 tests/Aperture.Core.Tests/UpdateTests.cs create mode 100644 tests/Aperture.Core.Tests/WindowsStartupTests.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index ac0da66..430ad8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to Aperture Image Viewer are documented here. The format fol ## [Unreleased] +### Added +- **About + updater** on the hamburger menu — current version, GitHub release check, Update / + Update (prerelease) when a newer build is available, progress and errors. Apply is portable + (new exe next to the current one) because there is no installer yet. +- **Start with Windows** — opt-in checkbox on the same Settings surface. Writes or deletes + `HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Aperture`; off by default. + ## [0.8.0-beta1] - 2026-07-14 ### Added diff --git a/ROADMAP.md b/ROADMAP.md index 7245a98..e3f592c 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -5,13 +5,15 @@ dates. Items are checked off as they ship (each lands a `CHANGELOG.md` entry whe ## Distribution & lifecycle -- [ ] **Real installer & updater** — a proper Windows installer (Start-menu entry, clean uninstall, - file associations where they make sense) to replace the bare framework-dependent single-file `.exe`, - plus an in-app update check/apply so test users don't have to re-download by hand each beta. +- [ ] **Real installer** — a proper Windows installer (Start-menu entry, clean uninstall, + file associations where they make sense) to replace the bare framework-dependent single-file `.exe`. + In-app update check/apply now lives on the hamburger About surface (portable apply). -- [ ] **Start with Windows + tray behavior** — an opt-in "launch at login" setting, and an option to - close/minimize to the background / system tray instead of exiting, so Aperture can stay warm for - instant opens. Both **off by default**. +- [x] **Start with Windows** — opt-in "launch at login" checkbox on the hamburger Settings + surface (`HKCU\Software\Microsoft\Windows\CurrentVersion\Run`). Off by default. + +- [ ] **Tray behavior** — option to close/minimize to the background / system tray instead of + exiting, so Aperture can stay warm for instant opens. Off by default. ## Tags & metadata diff --git a/src/Aperture.App/App.xaml.cs b/src/Aperture.App/App.xaml.cs index b0b829c..3819f9f 100644 --- a/src/Aperture.App/App.xaml.cs +++ b/src/Aperture.App/App.xaml.cs @@ -32,6 +32,7 @@ protected override void OnStartup(StartupEventArgs e) _library = new LibraryService(dataDir); var thumbnails = new ThumbnailService(_library); + UpdateService.CleanupOldBinaries(); _viewModel = new MainViewModel(_library, thumbnails); var window = new MainWindow { DataContext = _viewModel }; diff --git a/src/Aperture.App/MainWindow.xaml b/src/Aperture.App/MainWindow.xaml index 792bf47..2a29142 100644 --- a/src/Aperture.App/MainWindow.xaml +++ b/src/Aperture.App/MainWindow.xaml @@ -353,15 +353,16 @@ + StaysOpen="False" AllowsTransparency="True" HorizontalOffset="-180" + Opened="OnSettingsOpened"> - + + +