diff --git a/CHANGELOG.md b/CHANGELOG.md index ac0da66..49bc9c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,21 @@ All notable changes to Aperture Image Viewer are documented here. The format fol ## [Unreleased] +## [0.8.1-beta1] - 2026-08-21 + +### Added +- **About + updater** on the hamburger menu — current version (installed/portable), GitHub + release check, Update / Update (prerelease) when a newer build is available, progress and + errors. Running from AppData swaps in place (Midget-style rename dance); a portable copy + downloads the new exe next to the current one. +- **AppData install** — hamburger **Install Aperture on this PC…** copies to + `%LocalAppData%\Programs\Aperture\`, adds a Start menu shortcut (optional Desktop), and + **Uninstall…** reverses it. No `.md` file association — Aperture is not an editor. +- **Start with Windows** — opt-in checkbox on the same Settings surface. Writes or deletes + `HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Aperture`; off by default. After + install or update the Run value is rewritten to the AppData exe so logon does not keep a + Downloads path. + ## [0.8.0-beta1] - 2026-07-14 ### Added diff --git a/ROADMAP.md b/ROADMAP.md index 7245a98..2788bee 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -5,13 +5,17 @@ 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. +- [x] **AppData install + Start menu** — hamburger Install copies to + `%LocalAppData%\Programs\Aperture\Aperture.exe`, adds Start-menu (optional Desktop) + shortcuts, and Uninstall reverses it. In-app update check/apply lives on the hamburger + About surface: in-place swap when running from that copy, portable apply otherwise. -- [ ] **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. Survives + install/update by rewriting the Run value to the AppData exe. + +- [ ] **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/Aperture.App.csproj b/src/Aperture.App/Aperture.App.csproj index 10f7884..81725b2 100644 --- a/src/Aperture.App/Aperture.App.csproj +++ b/src/Aperture.App/Aperture.App.csproj @@ -16,15 +16,22 @@ true Assets\aperture.ico Aperture - 0.8.0-beta1 + 0.8.1-beta1 Aperture Image Viewer Aperture Image Viewer A fast local image & video browser for Windows. Funcular Labs Funcular Labs © 2026 Funcular Labs + + false + + + + diff --git a/src/Aperture.App/App.xaml.cs b/src/Aperture.App/App.xaml.cs index b0b829c..f324862 100644 --- a/src/Aperture.App/App.xaml.cs +++ b/src/Aperture.App/App.xaml.cs @@ -2,6 +2,7 @@ using System.Windows; using System.Windows.Threading; using Aperture.App.Services; +using Aperture.App.Updates; using Aperture.App.ViewModels; using Aperture.Core.Library; using Aperture.Core.Storage; @@ -30,8 +31,19 @@ protected override void OnStartup(StartupEventArgs e) if (string.IsNullOrWhiteSpace(overrideDir)) LegacyDataMigration.Run(AperturePaths.DefaultDataDir, AperturePaths.LegacyReelDataDir); + // A "move" install launches the AppData copy with --finish-move + // so it can delete the original once that process has exited. + var args = e.Args; + for (var i = 0; i < args.Length; i++) + { + if (args[i] == "--finish-move" && i + 1 < args.Length) + RegistrationService.FinishMove(args[++i]); + } + _library = new LibraryService(dataDir); var thumbnails = new ThumbnailService(_library); + UpdateService.CleanupOldBinaries(); + RegistrationService.RefreshAutostartToInstalledCopy(); _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..08e0a9a 100644 --- a/src/Aperture.App/MainWindow.xaml +++ b/src/Aperture.App/MainWindow.xaml @@ -353,23 +353,49 @@ + StaysOpen="False" AllowsTransparency="True" HorizontalOffset="-180" + Opened="OnSettingsOpened"> + - + + FontWeight="SemiBold" FontSize="13" TextWrapping="Wrap" /> + + +