Skip to content
This repository was archived by the owner on Jul 6, 2026. It is now read-only.

Releases: purelogiccode/GameCoverScraper

release_3.0.0

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 06 Jul 00:43

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_1.7.1...release_3.0.0

release_1.7.1

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 21 Jun 15:06

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_ABORT and CO_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

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 25 May 05:31

Sound Playback Refactor

  • Replaced System.Windows.Media.MediaPlayer with NAudio for audio playback, improving reliability and simplifying event handling.
  • Added explicit error logging for sound playback failures.

Update Check Service Improvements

  • Refactored UpdateCheckService for testability: extracted ParseReleaseResponse and made ParseVersion internal, added optional HttpClient injection.
  • 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-AnyCPU 14.13.0 → 14.13.1
  • MessagePack 3.1.4 → 3.1.6
  • Microsoft.Web.WebView2 1.0.3912.50 → 1.0.3967.48
  • coverlet.collector 10.0.0 → 10.0.1 (tests)
  • FluentAssertions 8.9.0 → 8.10.0 (tests)
  • Added NAudio 2.3.0

Full Changelog: release_1.6.0...release_1.7.0

release_1.6.0

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 10 May 03:26

🧪 Unit Tests

  • Added a new test project (GameCoverScraper.Tests) with unit tests for SettingsManager, ImageData, AppLogger, ImageSaveService, ObjectToBoolConverter, and WebSearchService.

🔒 Thread Safety

  • SettingsManager properties are now fully thread-safe with lock synchronization.
  • PlaySound service uses thread-safe locking for MediaPlayer creation 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).
  • ApplicationStatsService now handles HttpRequestException for network errors.
  • Added global exception handlers (AppDomain.UnhandledException and DispatcherUnhandledException) to catch and log any unhandled bugs.

🌐 WebView2 Improvements

  • WebView2 initialization now includes automatic retry logic (up to 2 retries) for E_ABORT errors.
  • Better error messages and download prompts when WebView2 Runtime is missing or fails to initialize.
  • Extracted PromptWebView2Download helper 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

  • WebView2 is now properly disposed (stops navigation, navigates to about:blank, then disposes) to prevent the process from staying alive after closing.
  • PlaySound.Shutdown() cleans up the MediaPlayer on 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 *Async naming convention (e.g., MainWindow_LoadedAsync, BtnCheckForMissingImages_ClickAsync, ConvertImageToPngAsync, HandleApiSearchAsync, FetchImagesWithRetryAsync, etc.).
  • Removed unused WebSearchService static property from App.
  • 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

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 12 Apr 04:01

✨ 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/ImageHeight and ThumbnailSize properties
  • Refactored Bug Reporting Service

    • Converted BugReport to an interface-based service with dependency injection
    • Added legacy compatibility for smooth migration
    • Removed duplicate bug report logging in MameManager for cleaner error tracking
  • Better Resource Management

    • Moved shared styles and resources to App.xaml for reuse across the application
    • Fixed potential memory leaks in DebugWindow event handlers
    • Ensured proper HttpClient disposal
    • Added ConfigureAwait(false) to async calls for better performance

🔧 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.NET to latest stable version

release_1.4.0

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 05 Apr 23:25

🚀 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) into App.xaml to improve maintainability and visual consistency across the application.

🛠️ WebView2 Improvements

  • Initialization Reliability: Improved the WebView2 startup process by moving it to the Loaded event 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_ABORT and "Runtime Not Found" scenarios, providing users with clear instructions and download links if the component is missing.

🧹 Refactoring & Architecture

  • Service Consolidation: Created WebSearchService and ImageSaveService to decouple business logic from the MainWindow code-behind.
  • Namespace Cleanup: Moved ObjectToBoolConverter to the Services namespace and updated references across XAML files.
  • Code Modernization:
    • Implemented [GeneratedRegex] for improved performance in filename cleaning.
    • Updated LINQ queries to use static lambdas where possible to reduce allocations.
    • Adopted C# 12 collection expressions in SettingsManager.
  • Dependency Updates: Updated several NuGet packages, including Magick.NET (v14.11.1), Microsoft.Web.WebView2 (v1.0.3856.49), and Polly (v8.6.6).

🛡️ Stability & Bug Reporting

  • Enhanced Error Logging: Integrated BugReport.LogErrorAsync across all critical paths, including MAME data parsing, clipboard operations, API search failures, and file system interactions.
  • Robust Networking: Improved BugReport service with specific catch blocks for JsonException, IOException, and InvalidOperationException to ensure the reporter itself doesn't crash during failure states.

📝 Miscellaneous

  • Cleanup: Removed unused properties from GoogleImageInfo and deleted obsolete partial class files.

release_1.3.5

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 12 Feb 23:30

Add specific handling for 403 status.

release_1.3.4

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 18 Jan 16:43
  • Refactor WebView2 error handling
  • Remove unused bug report logging

release_1.3.3

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 09 Jan 03:07
  • Enhance file locking handling
  • Improve WebView2 error management

release_1.3.2

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 03 Jan 23:38
  • 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.