release_2.8.0
·
32 commits
to master
since this release
Performance
- N-gram indexing for large image folders (50+ files). The similarity engine now builds a trigram index to pre-filter candidate images, dramatically reducing the number of comparisons needed for large collections.
- Early bailout in Levenshtein distance calculation. If the minimum edit distance already exceeds the similarity threshold, computation stops early.
- Jaccard n-grams pre-computed once per query instead of recomputed per candidate.
- ArrayPool in Jaro-Winkler distance replaces array allocations, reducing GC pressure.
- Progressive image loading. Results appear in the UI as soon as each image is loaded, rather than waiting for all images to finish.
Features
- GitHub update checking. On startup, the app checks GitHub for a new release and offers to open the download page if one is available.
- Usage tracking (anonymized, best-effort) helps the developer understand adoption.
- Cross-instance settings synchronization. A static file lock prevents corruption when multiple instances save settings simultaneously.
UI / UX
- Tooltips added throughout the menu, buttons, and controls for better discoverability.
- Delete key handling moved to
PreviewKeyDownto prevent repeats on key hold. - Improved empty states with styled text blocks and clearer "no results" messaging.
- Loading overlay background moved to XAML style for cleaner markup.
- Missing covers label uses shared constant for consistency.
Error Handling & Logging
- Every bare
catch { }block now logs the exception or at minimum explains the failure. - Async naming convention applied to all async event handlers (e.g.,
ClickAsync,SelectionChangedAsync). - Error logging switched from
lock-based toSemaphoreSlim-based for internal log writes (avoiding potential deadlocks with the main log semaphore). - Theme fallback now logs the fallback failure instead of silently ignoring it.
Environment.Exitcalled on shutdown to ensure all background threads terminate.
Removed
MameManagerclass. Replaced byMameDataService.ImageData.ClearCachedContextMenumethod.UseWindowsFormsSDK reference (no longer needed).AppConstants.AccentPrefix, unused app constants, andTabIndexattributes (redundant when usingIsDefault/IsCancel).
Dependencies
ControlzExupdated from 7.0.3 to 7.0.4Magick.NET-Q16-AnyCPUupdated from 14.12.0 to 14.13.0Microsoft.Extensions.DependencyInjectionandAbstractionsupdated from 10.0.5 to 10.0.7
Testing
- New unit test project with 214 tests covering services, models, managers, and constants.
- Tests use xUnit + FluentAssertions + coverlet for coverage collection.
InternalsVisibleToattribute exposes internal methods for testing.
Full Changelog: release_2.7.0...release_2.8.0