Skip to content

v2.21.0 — Analytics Fix + QA Hardening

Choose a tag to compare

@tiagotrindade tiagotrindade released this 11 Jun 05:32
· 121 commits to main since this release

What's Changed

  • Restores the masked license key in launch telemetry (regression from v2.20.0 — used to correlate launches with license status, as in v2.18.x)

Windows — UX overhaul

  • Restored the Organize button on the Mover page — the primary action was unreachable outside the Wizard since the 2.19 visual refactor
  • Unified page headers across Mover / Events / Rename / Google Photos: utilities left, stats centre, search + primary action right; duplicated source pickers and Scan buttons removed from the Events and Rename toolbars
  • Progressive disclosure on every tool page: destination options stay dormant until a scan loads files; filters, search and stat tiles appear only when they mean something
  • Folder-pattern presets compacted to name + sample path — Copy/Move mode now sits above the fold
  • Move mode shows a warning that originals are removed from the source folder
  • Sidebar: grouped navigation (Wizard / tools / Activity), pane toggle removed, broken calendar glyphs fixed, smaller BETA badge; the Win32 Help menu is retired (Check for updates moved to Settings → About)
  • Preview column shows a 3-step guide on first launch; the onboarding dialog now opens over the visible, maximized app
  • Consistent modal scan progress on Mover / Events / Rename (determinate bar, percentage, working Cancel)
  • Thumbnails toggle added to the Events and Rename toolbars; source/destination pickers colour-coded everywhere

Windows — fixes

  • Settings were silently reset on every launch (theme, wizard/onboarding completion never persisted) — fixed
  • Pages keep their state when switching sections — scan results are no longer lost on navigation
  • Events footer no longer clips the unmatched-files option
  • Launch telemetry carries the masked license key again (parity with macOS)

macOS 14+ (Apple Silicon + Intel) · Signed & notarized · Auto-update via Sparkle
Windows 10/11 x64 · FolioSort-2.21.0-windows.zip (see Install First.html inside) · Auto-update via NetSparkle

macOS — QA Hardening (DMG rebuilt 2026-06-11)

The macOS DMG on this release was rebuilt to include all 20 fixes from the full line-by-line code audit (3 HIGH, 7 MEDIUM, 10 LOW):

Reliability

  • ExifTool daemon no longer deadlocks on warning-heavy Google Takeout imports (stderr pipe is now drained)
  • Network transfers recover from mid-file failures — partial files left by a dropped NAS connection no longer make every retry fail
  • Correct dates in every timezone: files without EXIF dates (file creation/modification fallback) now land in the same folder/slot as an EXIF-dated photo taken at the same wall-clock moment (Mover, Rename and Events)

Fixes

  • Event overwrites are now restorable via Undo, and originals are recovered if the copy fails
  • Event progress no longer freezes while hashing multi-GB files
  • Restored sessions correctly detect network/iCloud volumes again (monitoring + resilient retry re-enabled)
  • Google Takeout Move mode no longer leaves no-date originals behind silently
  • {ShutterSpeed} / {ISO} / {Aperture} template tokens no longer create unintended folders
  • Refunded/disabled license keys no longer receive the offline grace period
  • Activity log now rotates at 10 MB

Polish

  • Sidecar files (.xmp/.aae) shared by RAW+JPEG pairs stay with both parents
  • GPS/description/people metadata from Takeout JSON is written even when no timestamp exists
  • Cancelling a Takeout run mid-operation now shows a summary of what was already done
  • Built-in profile presets now update with the app
  • Takeout exports' own artifacts (HTML, PDF…) no longer appear as "no date" orphans
  • Events results now show files kept in source because no event matched
  • Safer EXIF date parsing, geocoding rate-limit hardening, dead code removal

macOS — UX overhaul (DMG rebuilt 2026-06-12)

The macOS DMG on this release was rebuilt again with a top-to-bottom UX pass on top of the v2.21.0 hardening fixes. Nine focused commits, no functional regressions, 23 tests green:

Confidence & flow

  • Module state survives window close/reopen — scan results and configuration no longer evaporate when you ⌘W and reopen from the Dock
  • Preview pane leads with the numbers210 files → 14 folders · 2.1 GB next to the file tree, so you know what you're about to commit at a glance
  • Unified primary action — every module's CTA follows the same pattern: Organize 210 files / Rename 210 files / Process 210 files, disabled (and visibly dimmed) until there's a valid preview, with help text on hover explaining any blocker
  • Sidebar Mover renamed to Organize so the Wizard's "Organize Files" and the section both speak the same language

Less noise

  • Mover middle column: Safety & Integrity and Metadata Fallback collapse by default — each shows a one-line summary of the current choice (e.g. Verify XXHash64 · Ask each time) so you know what's active without expanding
  • Wizard Review now shows up to 5 example file mappings + the 210 files → 14 folders summary + a + N more footer, instead of a single example representing the whole batch
  • Section captions (SOURCE / DESTINATION / PREVIEW …) bumped to a single design-system style that crosses WCAG AA

Validation surfaces where you need it

  • Events: sub-events outside their parent event's time window are now marked inline (orange triangle, tint, border) so you can fix them in place — not just flagged in a footer banner
  • Time range (UTC) gets a tooltip explaining it matches the EXIF timestamps baked into your photos
  • Toolbar search prompts now name their scope: Search 210 scanned files when there's something to search, Scan a folder to search when there isn't

Polish

  • Check for Updates… button added to Settings → About (was previously only reachable from the macOS menu)
  • Sidebar labels truncate cleanly at narrow widths instead of overlapping the BETA badge
  • Minimum window bumped 900→1000×640 — the three-pane modules genuinely need the breathing room

Commits: de383d7b978ab5 (9 total).