Skip to content

release_2.8.0

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 12 May 03:28
· 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 PreviewKeyDown to 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 to SemaphoreSlim-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.Exit called on shutdown to ensure all background threads terminate.

Removed

  • MameManager class. Replaced by MameDataService.
  • ImageData.ClearCachedContextMenu method.
  • UseWindowsForms SDK reference (no longer needed).
  • AppConstants.AccentPrefix, unused app constants, and TabIndex attributes (redundant when using IsDefault/IsCancel).

Dependencies

  • ControlzEx updated from 7.0.3 to 7.0.4
  • Magick.NET-Q16-AnyCPU updated from 14.12.0 to 14.13.0
  • Microsoft.Extensions.DependencyInjection and Abstractions updated 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.
  • InternalsVisibleTo attribute exposes internal methods for testing.

Full Changelog: release_2.7.0...release_2.8.0