Releases: SysAdminDoc/Images
Releases · SysAdminDoc/Images
Release list
v0.2.20
v0.2.19
Fixed: removed the floating viewer top command bar with Compare and Export actions so image viewing keeps the top of the viewport clear.
v0.2.15
0.2.15
Internal
- AsyncRelayCommand catches non-cancellation exceptions — Exceptions from command methods now log + toast instead of propagating through
async voidtoDispatcherUnhandledExceptionand terminating the app. StaticCommandFaultedevent enables graceful error reporting. - ApplyRotationToFile and ApplyCropSelection converted to async — Both now yield to the dispatcher after
BeginOperationStatusso the operation status overlay renders before the heavy I/O begins. - BackgroundTaskTracker evicts idle per-name entries — Completed task entries are removed from
_byNamewhen Running reaches 0, preventing unbounded dictionary growth during long sessions.
Theme
- PerspectiveCorrectionWindow uses themed overlay brushes — Handle strokes, polygon fills, and label backgrounds now use
AccentBrush,AccentSelectionBrush,TextBrush, andFloatingChromeBrushinstead of hardcoded Mocha hex values. Overlays now adapt correctly to Latte and HighContrast themes.
v0.2.14
Correctness
- GoBack/GoForward no longer corrupt history on failed navigation
- OpenRecentArchiveCommand converted to AsyncRelayCommand (crash fix)
- SaveAsCopyAsync captures source path before yield (TOCTOU race fix)
- AnnotationsWindow.LoadPreview handles corrupt/unsupported files
- MainWindow MotionVideoPlayer adds UriKind.Absolute
- QuarantineExtrasButton_Click catches I/O exceptions
- Window_Drop removes dead async keyword
Theme
- ViewerSurfaceBrush added to all three theme dictionaries
- CrashDialog success state uses themed SuccessPanelBrush
- ReferenceBoardWindow uses themed AccentPanelBrush and SurfacePanelBrush
Internal
- CancellationTokenSource disposed on window close (4 windows)
- NetworkEgressService.LoadPersistedEntries dispatches to UI thread
- RestartSlideshowTimer reuses existing DispatcherTimer
v0.2.11
v0.2.11 — 2026-05-05
Self-contained document-preview runtime release.
Changed
- Bundled Ghostscript runtime — portable and installer artifacts now include app-local Ghostscript 10.07.0 so PDF, EPS, PS, and AI previews work on clean machines without requiring users to find and install Ghostscript separately.
- Ghostscript license/provenance notes — release documentation now identifies the bundled AGPL Ghostscript runtime, the installed license path, the official Artifex source package, and the SHA-256 values used to verify the runtime installer (
8af854e2d62f9a3a674331321b347118a83928a3726631e458194121cf3bbeec), bundledgsdll64.dll(1dce67538777ab2f312890f9a2f0ffcff6a4c58ef1149dc6a44f8bd97b31030d), and source archive (ddace4e1721f967a55039baff564840225e0baa1d4f5432247ca1ccd1473b7c1).
Bundled third-party runtime
- Ghostscript upstream release: https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/tag/gs10070
- Ghostscript licensing: https://artifex.com/licensing/
- Bundled runtime license file after install/extract:
Codecs\Ghostscript\doc\COPYING - Matching source archive attached here:
ghostscript-10.07.0.tar.xz
v0.2.10
v0.2.10 — 2026-05-05
Performance, reliability, workflow, and product-polish release.
Changed
- Improvement tracking — added a repo-local improvement plan that tracks the 15 engineering, UX, reliability, and CI follow-up items from the May 2026 quality review.
- CI verification — added a pull-request/push CI workflow for whitespace diff checks, version metadata sync, vulnerable-package scanning, Release build, tests, and CLI smoke commands.
- Release metadata gate — moved version-sync validation into a reusable PowerShell script shared by CI and the release workflow.
- Shell and clipboard integration — About, crash recovery, settings, and viewer actions now use shared helpers for opening files/folders/URLs and copying text, reducing duplicated process and clipboard handling.
- Update-check testability — update checks now have seams for HTTP, clock, retry-state recording, and state-file behavior, plus non-network tests for release parsing and transient failure policy.
- Folder preview and sorting — folder-preview thumbnail orchestration now lives in a focused controller, and the viewer exposes app-owned folder sort modes for natural name, reverse name, modified date, created date, size, and extension grouping.
- Premium interaction polish — folder-sort menus now show the active sort with checked menu states, settings changes provide tone-aware saved feedback, and OCR overlay styling now uses shared theme tokens.
- Recycle Bin confirmation preference — the delete confirmation now offers a "don't ask again" checkbox, and Settings can restore confirmation before future Recycle Bin deletes.
- Clipboard import testability — paste-from-clipboard handling now uses a focused import service with deterministic seams for file lists, image data, storage, naming, and clipboard-temp pruning.
- Viewer state coverage —
MainViewModelnow supports isolated settings, clipboard, delete, confirmation, and navigator dependencies for regression tests covering folder-preview sort state, filmstrip persistence, paste opening, and Recycle Bin confirmation preferences. - Recycle Bin delete extraction — Recycle Bin confirmation, "don't ask again" persistence, missing-file handling, and send-failure reporting now live in a focused delete service with direct regression coverage.
- Rename safety — extension-unlocked renames now reject unsupported target extensions before touching disk, keeping the viewer and folder navigator in sync.
- Metadata loading extraction — photo metadata HUD loading now lives in a focused controller with cancellation, stale-result, timeout, and dispatcher-state coverage.
- External-edit reload extraction — external file-watch debounce and reload feedback now live in a focused controller with coverage for coalescing, canceled reloads, failed reload feedback, and watcher creation failures.
- OCR workflow extraction — OCR busy/overlay state, cancellation, stale-result guards, local extraction feedback, and overlay-line conversion now live in a focused controller with direct async coverage.
- Update-check UI extraction — latest-release state, manual/background update feedback, command invalidation, and release-page opening now live in a focused controller with direct coverage.
- Folder-preview cancellation coverage — thumbnail loading now has a deterministic test seam with regression coverage for clear and superseded-refresh cancellation paths.
- ViewModel relay coverage —
MainViewModelnow has an internal controller-injection seam with regression coverage for metadata, OCR, and update-check relay properties. - UI state hardening — refresh remains available when the current file was removed externally, and regression tests now cover rename debounce, stale-folder recovery, and command enablement states.
- Diagnostics status pane — About now summarizes OCR, Ghostscript, Magick.NET, logs, storage, and update-check state in a compact status section with regression-tested status composition.
- Diagnostics actions — the About diagnostics section now lets users copy system info, copy the codec report, open logs, and open the app data folder directly from the status pane.
- First-run guidance — the empty viewer state now explains local privacy defaults, broad format support, OCR readiness, document-preview requirements, and Settings/Diagnostics recovery links before a file is opened.
- Operation status feedback — manual reload, Save a copy, and GPS metadata stripping now share a visible busy status, with mutating image commands disabled until the operation completes.
- Update-check transparency — manual and background update checks now expose busy status through the main UI, suppress duplicate manual checks, and show when GitHub Releases is being contacted.
- Decode/navigation feedback — file-open dialog decodes and multi-page page turns now use the shared operation-status surface before slower document or page loads begin.
- Load/navigation responsiveness — Open Image and next/previous navigation now decode cache misses off the UI thread, await any in-flight preload instead of duplicating work, and update same-folder preview selection in place instead of rebuilding thousands of thumbnail items on every arrow press.
- Secondary empty/error states — unsupported clipboard data, empty recent folders, and stale recent-folder paths now show persistent, actionable side-panel feedback instead of relying only on transient toasts.
- Secondary recovery feedback — thumbnail-generation failures and offline update checks now retain actionable status, including failed thumbnail placeholders and no-upload reassurance for network failures.
- Background task ownership — thumbnail generation, metadata reads, preload decodes, clipboard-temp pruning, and thumbnail-cache eviction now run through a shared tracker with diagnostics-visible running/completed/failed/canceled counts.
- Update/cache observability — manual and background update checks are now included in tracked background work, and diagnostics now shows thumbnail-cache size, file count, temp-file count, cap, and last eviction sweep.
- Storage and cache test seams — app storage roots, default settings construction, and default thumbnail-cache construction now have deterministic seams and tests for fallback/unavailable-storage behavior.
- Thumbnail cache controls — About diagnostics now lets users open the thumbnail cache folder or clear disposable cached thumbnails with confirmation, progress feedback, and automatic diagnostics refresh.
- Settings persistence hardening — settings corruption recovery now uses collision-resistant quarantine names, with tests for corruption reset, schema migration, unavailable storage, and primitive setting defaults.
- Large-folder stress coverage — navigation and folder-preview tests now cover thousands of files, volatile folder changes, enumeration failure recovery, and bounded thumbnail requests.
- Generated codec corpus — decode/export regression tests now generate PNG, JPEG, WebP, TIFF, GIF/APNG, and SVG samples at runtime, avoiding binary fixtures while protecting codec upgrades.
- Product differentiator scopes — added a design scope for local semantic search, duplicate cleanup, compare/overlay, archive/book navigation, peek launch mode, viewer-side adjustments, technical pixel tools, and metadata/culling workflows.
- Distribution trust plan — scoped WinGet and Scoop publishing, checksum continuity, code-signing options, SmartScreen expectations, and user verification copy for the next stable release.
- Integration policy — documented the no-code-copied optional-runtime gate for licenses, redistribution rights, CVE tracking, binary provenance, process isolation, network behavior, and release impact.
- Archive/book foundation — ZIP and CBZ files now open as read-only archive books using built-in .NET ZIP support, with natural page ordering, page-count controls, a page scrubber, unsafe-entry filtering, and recursive-archive guardrails.
- Archive read position and history — archive books now remember the last viewed page locally, continue there on reopen, and surface a side-panel book history with page progress.
- Archive cover handling — archive books now promote explicit cover/front/folder image entries before natural page order and report cover provenance in decoder details.
- Archive reader controls — active archive books now get a side-panel book-controls card, narrow edge page-turn click zones, and reader-mode arrow/Home/End key routing for page turns.
- Archive runtime review — documented the RAR/7z dependency policy and approved SharpCompress 0.47.4 as the managed MIT reader for read-only RAR/CBR and 7z/CB7 archive books.
- RAR/7z archive expansion — RAR/CBR and 7z/CB7 books now open through SharpCompress with the same unsafe-entry filtering, nested-archive skipping, document-entry skipping, per-entry byte cap, corrupt-archive recovery copy, diagnostics provenance, and generated 7z regression coverage as the ZIP/CBZ foundation.
- Manga page turns — archive books now have a persisted right-to-left page-turn mode that swaps physical edge zones and Left/Right Arrow routing without changing semantic next/previous controls.
- Clean scan preview — archive books now offer a persisted, preview-only high-contrast grayscale filter for yellowed or low-contrast scanned pages without modifying source archives.
- Two-page archive spreads — archive books now have a persisted spread mode that keeps explicit covers single, pairs natural pages, respects right-to-left composition, and advances by spread.
- Gallery workbench — the viewer now has a keyboard-first
Ggallery overlay for the current folder with multi-column thumbnails, quick filtering, sort shortcuts, per-thumbnail context actions, current-item selection, and Enter-to-open behavior. - **Asset smart ...