This repository was archived by the owner on Jul 6, 2026. It is now read-only.
Repository navigation
release_1.6.0
·
41 commits
to master
since this release
🧪 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