Skip to content

release_3.0.0

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 06 Jul 00:40
· 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 ImageFolderWatcher service 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.xml is automatically migrated on first launch
  • API keys are masked in log output

Logging

  • Migrated from custom AppLogger to 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
  • SettingsManager registered as a singleton

Startup & Shutdown

  • Orphaned temp files are cleaned up on startup
  • Graceful shutdown with proper disposal of HttpClient, AudioService, ErrorLogger, and ServiceProvider
  • Global exception handlers for AppDomain, TaskScheduler, and Dispatcher

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 ProgressRing indicators 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

  • MameManager refactored to a static class returning MameData objects
  • SupportedExtensions changed from HashSet<string> to List<string> with INotifyPropertyChanged
  • Filename sanitization to prevent path traversal attacks
  • FindCorrespondingRomFile with case-insensitive fallback search

Breaking Changes

  • PlaySound service removed — replaced by IAudioService with NullAudioService fallback
  • settings.xml no longer used — migrated to encrypted settings.dat
  • MameManager is no longer a serializable DTO — use MameData instead

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 ImageFolderWatcher deduplication 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