release_3.0.0
·
10 commits
to master
since this release
New Features
Tabbed Search Interface
- Replaced the single search engine dropdown with a 4-tab interface: Local Files, Google Web, Bing Web, and Google API
- Each tab works independently — switch between them without losing results
- Status bar now shows the active tab name
Local File Similarity Search
- New Local Files tab that scans your image folder for similar filenames using configurable algorithms
- Three similarity algorithms available: Jaro-Winkler Distance, Levenshtein Distance, and Jaccard Similarity
- Adjustable similarity threshold (10%–90%) from the menu
- Trigram indexing (
NgramIndex) for fast candidate filtering in large directories - Click a local match to instantly assign it as the cover image
System Tray Integration
- Minimize the application to the system tray instead of keeping it in the taskbar
- Tray icon with context menu (Restore / Exit)
- Balloon notification when minimized
Keyboard Shortcuts
- F5: Refresh the missing covers list
- Escape: Exit the application
Image Folder Watcher
- New
ImageFolderWatcherservice monitors the image folder in real-time - Automatically detects when a cover image is saved (via browser download or drag-and-drop)
- Auto-removes matched ROMs from the missing list
- Auto-converts non-PNG images (JPG, BMP, GIF, TIFF, WebP, AVIF, HEIC, HEIF, JXL, JP2) to PNG
- Pre-registration of expected files to prevent race conditions
Delete ROM from Missing List
- New right-click context menu option: Delete corresponding ROM or ISO
- Permanently deletes the ROM file from disk after confirmation
Improvements
Settings & Security
- Settings are now AES-encrypted using a machine-specific PBKDF2-derived key (
settings.dat) - Legacy
settings.xmlis automatically migrated on first launch - API keys are masked in log output
Logging
- Migrated from custom
AppLoggerto Serilog structured logging - Rolling log files with 7-day retention (
app.log) - Real-time log viewer in the Debug Window via
ObservableCollection<LogEntry> - Error reports still sent to the bug report API
Dependency Injection
- Application now uses Microsoft.Extensions.DependencyInjection
SettingsManagerregistered as a singleton
Startup & Shutdown
- Orphaned temp files are cleaned up on startup
- Graceful shutdown with proper disposal of
HttpClient,AudioService,ErrorLogger, andServiceProvider - Global exception handlers for
AppDomain,TaskScheduler, andDispatcher
Google API
- Better error messages for 429 (rate limit), 403 (forbidden), and 400 (bad request) responses
UI Polish
- Extracted reusable styles in
App.xaml(loading overlay, empty state, status bar, etc.) - Added
ProgressRingindicators for missing images check and local search - Improved empty state messages with actionable hints
- New image resources:
brokenimage.png,copy.png,usethis.png,folder.png
Image Processing
- Extended format support: HEIC, HEIF, ICO, SVG, JXL, JP2, AVIF
- Magick.NET resource limits configured (512 MB memory, 4 threads)
- Retry logic for concurrent file access issues
Other
MameManagerrefactored to a static class returningMameDataobjectsSupportedExtensionschanged fromHashSet<string>toList<string>withINotifyPropertyChanged- Filename sanitization to prevent path traversal attacks
FindCorrespondingRomFilewith case-insensitive fallback search
Breaking Changes
- PlaySound service removed — replaced by
IAudioServicewithNullAudioServicefallback - settings.xml no longer used — migrated to encrypted
settings.dat - MameManager is no longer a serializable DTO — use
MameDatainstead
Dependencies Updated
| Package | Old Version | New Version |
|---|---|---|
| MahApps.Metro | 2.4.11 | 3.0.0-rc0529 |
| ControlzEx | — | 7.0.4 |
| Serilog | — | 4.3.1 |
| Serilog.Sinks.File | — | 7.0.0 |
| Serilog.Sinks.Observable | — | 3.0.0 |
| Microsoft.Extensions.DependencyInjection | — | 10.0.9 |
| Microsoft.NET.Test.Sdk | — | 18.7.0 |
Bug Fixes
- Fixed thread safety issues in
ImageFolderWatcherdeduplication logic - Fixed rename handling when source equals target in
ImageFolderWatcher - Fixed PendingRenameTarget reset on auto-remove
- Fixed download failure user notification (now shows a warning dialog)
- Fixed file disappearance logging for PNG conversion
- Fixed blank WebView navigation on startup
- Fixed error handling and logging in event handlers across multiple files
- Fixed cancellation on dispose to prevent resource leaks
Full Changelog: release_2.9.0...release_3.0.0