This repository was archived by the owner on Jul 6, 2026. It is now read-only.
Repository navigation
Releases: purelogiccode/GameCoverScraper
Releases · purelogiccode/GameCoverScraper
Release list
release_3.0.0
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_1.7.1...release_3.0.0
release_1.7.1
Improved WebView2 Error Handling
- Added handling for
CO_E_SERVER_EXEC_FAILURE: The app now gracefully handles this Windows COM error that can occur when WebView2 Runtime is corrupted or improperly installed. Users will see a clear message prompting them to reinstall WebView2 Runtime. - Automatic retry on initialization failure: WebView2 initialization now retries up to 2 times on transient errors (
E_ABORTandCO_E_SERVER_EXEC_FAILURE) before showing an error dialog. - Reduced unnecessary error reporting: Removed redundant automatic bug reports for expected WebView2 initialization failures (missing runtime, aborted initialization). These are user environment issues, not application bugs.
Dependency Updates
| Package | Previous | Updated |
|---|---|---|
| Microsoft.Web.WebView2 | 1.0.3967.48 | 1.0.4022.49 |
| Magick.NET-Q16-AnyCPU | 14.13.1 | 14.14.0 |
| MessagePack | 3.1.6 | 3.1.7 |
| Microsoft.NET.Test.Sdk | 18.5.1 | 18.6.0 |
--
Full Changelog: release_1.7.0...release_1.7.1
release_1.7.0
Sound Playback Refactor
- Replaced
System.Windows.Media.MediaPlayerwith NAudio for audio playback, improving reliability and simplifying event handling. - Added explicit error logging for sound playback failures.
Update Check Service Improvements
- Refactored
UpdateCheckServicefor testability: extractedParseReleaseResponseand madeParseVersioninternal, added optionalHttpClientinjection. - Improved error handling for timeouts and network errors.
New Unit Tests
- Added comprehensive unit test suite covering:
- UpdateCheckService — valid/invalid version parsing, release response parsing, HTTP success/failure/timeout scenarios
- UpdateCheckService edge cases — empty tags, prerelease labels, whitespace, double prefixes, multiline release notes
- BugReportService — log file creation, environment details, exception info, inner exceptions, context messages
- UpdateInfo model — default values and property settability
Dependency Updates
Magick.NET-Q16-AnyCPU14.13.0 → 14.13.1MessagePack3.1.4 → 3.1.6Microsoft.Web.WebView21.0.3912.50 → 1.0.3967.48coverlet.collector10.0.0 → 10.0.1 (tests)FluentAssertions8.9.0 → 8.10.0 (tests)- Added
NAudio2.3.0
Full Changelog: release_1.6.0...release_1.7.0
release_1.6.0
🧪 Unit Tests
- Added a new test project (
GameCoverScraper.Tests) with unit tests forSettingsManager,ImageData,AppLogger,ImageSaveService,ObjectToBoolConverter, andWebSearchService.
🔒 Thread Safety
SettingsManagerproperties are now fully thread-safe withlocksynchronization.PlaySoundservice uses thread-safe locking forMediaPlayercreation and cleanup.
🛡️ Improved Error Handling & Reporting
- Bug Report Service now sends detailed environment information with each report: OS version, architecture, bitness, processor count, base directory, and temp path.
- Structured exception details including inner exceptions, source, and stack traces.
- Added a fallback local logging mechanism when the BugReport service is not yet initialized (e.g., crash during startup).
ApplicationStatsServicenow handlesHttpRequestExceptionfor network errors.- Added global exception handlers (
AppDomain.UnhandledExceptionandDispatcherUnhandledException) to catch and log any unhandled bugs.
🌐 WebView2 Improvements
- WebView2 initialization now includes automatic retry logic (up to 2 retries) for
E_ABORTerrors. - Better error messages and download prompts when WebView2 Runtime is missing or fails to initialize.
- Extracted
PromptWebView2Downloadhelper for cleaner error dialog handling.
♿ Accessibility
- Added ToolTips to virtually all UI elements — menus, buttons, text fields, image previews, status bar, and more — improving discoverability and usability.
🖱️ UI Stability
- Added a 300ms debounce for item removal from the missing covers list to prevent accidental double-deletes.
- Delete key now ignores key repeats (
IsRepeat: false). - Proper cleanup of all resources (timers,
FileSystemWatcher,CancellationTokenSource) on window closing.
🧹 Clean Shutdown
WebView2is now properly disposed (stops navigation, navigates toabout:blank, then disposes) to prevent the process from staying alive after closing.PlaySound.Shutdown()cleans up theMediaPlayeron exit.- All open windows are explicitly closed on application exit.
Environment.Exit(0)is called as a safety net to ensure the process terminates even if background threads are running.
📝 Code Quality
- Renamed numerous async methods to follow the
*Asyncnaming convention (e.g.,MainWindow_LoadedAsync,BtnCheckForMissingImages_ClickAsync,ConvertImageToPngAsync,HandleApiSearchAsync,FetchImagesWithRetryAsync, etc.). - Removed unused
WebSearchServicestatic property fromApp. - Cleaned up null-check patterns and simplified disposal code.
🔐 Security
- Improved path traversal prevention in filename sanitization — iteratively removes
..sequences to block crafted inputs like"....".
Full Changelog: release_1.5.0...release_1.6.0
release_1.5.0
✨ New Features & Improvements
-
Enhanced Error Handling & Stability
- Added comprehensive try-catch blocks for web search operations and startup sequence
- Improved WebView2 initialization reliability with better error handling
- Implemented validation for
ImageWidth/ImageHeightandThumbnailSizeproperties
-
Refactored Bug Reporting Service
- Converted
BugReportto an interface-based service with dependency injection - Added legacy compatibility for smooth migration
- Removed duplicate bug report logging in
MameManagerfor cleaner error tracking
- Converted
-
Better Resource Management
- Moved shared styles and resources to
App.xamlfor reuse across the application - Fixed potential memory leaks in
DebugWindowevent handlers - Ensured proper
HttpClientdisposal - Added
ConfigureAwait(false)to async calls for better performance
- Moved shared styles and resources to
🔧 Technical Improvements
- Code Quality: Improved async/await patterns throughout the codebase
- Validation: Added proper validation for image dimensions and thumbnail size settings
- Startup Tracking: Enhanced application statistics tracking with duplicate prevention
📦 Dependencies
- Updated
Magick.NETto latest stable version
release_1.4.0
🚀 New Features
- Enhanced Image Saving: Refactored image saving logic into a dedicated
ImageSaveService. It now includes more robust overwrite confirmations and atomic file operations (using temporary files) to prevent data corruption. - Global UI Styling: Consolidated shared UI styles (like the
ImageSuggestionButtonStyle) intoApp.xamlto improve maintainability and visual consistency across the application.
🛠️ WebView2 Improvements
- Initialization Reliability: Improved the WebView2 startup process by moving it to the
Loadedevent and implementing a state flag to prevent multiple simultaneous initialization attempts. - Custom Data Folder: The WebView2 control now uses a specific folder in
LocalAppData. This resolves common "Operation Aborted" errors caused by permission issues or file locking in the default directory. - Better Error Handling: Added specific handling for
E_ABORTand "Runtime Not Found" scenarios, providing users with clear instructions and download links if the component is missing.
🧹 Refactoring & Architecture
- Service Consolidation: Created
WebSearchServiceandImageSaveServiceto decouple business logic from theMainWindowcode-behind. - Namespace Cleanup: Moved
ObjectToBoolConverterto theServicesnamespace and updated references across XAML files. - Code Modernization:
- Implemented
[GeneratedRegex]for improved performance in filename cleaning. - Updated LINQ queries to use
staticlambdas where possible to reduce allocations. - Adopted C# 12 collection expressions in
SettingsManager.
- Implemented
- Dependency Updates: Updated several NuGet packages, including
Magick.NET(v14.11.1),Microsoft.Web.WebView2(v1.0.3856.49), andPolly(v8.6.6).
🛡️ Stability & Bug Reporting
- Enhanced Error Logging: Integrated
BugReport.LogErrorAsyncacross all critical paths, including MAME data parsing, clipboard operations, API search failures, and file system interactions. - Robust Networking: Improved
BugReportservice with specific catch blocks forJsonException,IOException, andInvalidOperationExceptionto ensure the reporter itself doesn't crash during failure states.
📝 Miscellaneous
- Cleanup: Removed unused properties from
GoogleImageInfoand deleted obsolete partial class files.
release_1.3.5
Add specific handling for 403 status.
release_1.3.4
- Refactor WebView2 error handling
- Remove unused bug report logging
release_1.3.3
- Enhance file locking handling
- Improve WebView2 error management
release_1.3.2
- I have migrated from the ImageSharp library to Magick.NET for image processing operations.
- Enhanced error handling.
- Several dependencies were updated including WebView2 and Polly.