Releases: purelogiccode/RetroGameCoverDownloader
Release list
release_1.4.0
Modern UI with Dark Theme
The application has been rebuilt on WPF-UI FluentWindow with a sleek dark theme and dynamic resources, giving it a modern look consistent with Windows 11 styling.
Structured Logging with Serilog
All logging has been migrated to Serilog with structured (message-template) format. Logs are buffered for UI display, persisted to disk, and routed to a dedicated bug-report sink that captures warnings and errors for automated issue reporting.
Improved 401 Handling — Auto Token Prompt
When the GitHub API returns a 401 Unauthorized error (e.g., expired or invalid token), the app now automatically prompts you with a message box and token dialog. Enter a new token and the systems list reloads automatically — no need to restart.
Settings Storage: JSON + DPAPI Encryption
Settings have moved from XML-based AES encryption to JSON serialization with Windows DPAPI encryption. The settings file is now stored in %LocalAppData%\RetroGameCoverDownloader\. A new File → Open AppData Folder menu item lets you browse logs, screenshots, and config directly.
Screenshot Hotkey (F8)
Press F8 anytime to capture a screenshot of the foreground window. Screenshots are saved to the Screenshots folder in the app's LocalAppData directory.
Refined Error Handling & UI Feedback
- ERROR/WARNING prefixes are stripped from status bar messages for cleaner UI feedback
- The systems list is no longer cleared on an empty fetch — preventing UI flicker during transient failures
- Consecutive 401 prompts are suppressed to avoid spamming the user across multiple branch retries
- Log buffer is capped to prevent unbounded memory growth
Removed Progress Callbacks from GitHubService
The IGitHubService interface has been simplified — the Action<string> log callback parameter has been removed from GetAvailableSystemsAsync, GetSystemFilesAsync, and DownloadFileAsync. Services now log through Serilog directly, reducing API surface and making the codebase easier to maintain.
Retry & Rate Limiting
RetryOnForbiddennow defaults tofalseto avoid hammering GitHub after 403 responses- When a 403 rate limit is hit, the app falls through to the next branch or cached data instead of throwing
- Configurable retry settings per call (e.g.,
.gitmodulesfetch uses its own retry policy)
Other Improvements
- Data paths migrated from app folder to
%LocalAppData% - Log buffer size capped at 100K characters
UiLogSinkthread safety fixes and recursive logging prevention- Duplicate 401 prompts prevented via thread-safe guard
- Asynchronous dispatcher invoke for long-running UI handler callbacks
- Test dependencies updated (Microsoft.NET.Test.Sdk 18.7.0, coverlet.collector 10.0.1)
Full Changelog: release_1.3.0...release_1.4.0
release_1.3.0
New Features
- Proxy Support — Configure an HTTP proxy (host, port, username, password) via a new settings dialog for environments that require it.
- File Extension Filtering — New dialog to customize which file extensions are recognized as ROM files when scanning folders.
- Settings Encryption — Sensitive data (GitHub token, proxy password) is now encrypted using Windows DPAPI before being saved to disk.
- Systems List Caching — The available systems list is cached locally, resulting in faster startup and offline resilience.
- Retry with Exponential Backoff — Transient network errors (timeouts, 5xx, 429) are automatically retried with intelligent exponential backoff.
- Circuit Breaker — Protects against hammering distressed servers during outages by tracking consecutive failures and pausing requests.
Improvements
- Better Error Messages — More descriptive error messages and improved GitHub rate-limit handling throughout the app.
- Network Resilience — Fallback logic when hitting GitHub rate limits or transient errors, reducing failed operations.
- GitHub Branch Detection — Improved automatic detection of the correct repository branch for downloads.
- Cancellation Handling — More robust cancellation propagation across all services.
- Download Process Optimization — Optimized the download pipeline for better performance and reliability.
- Logging & Diagnostics — Refined logging context and improved error handling across the application.
Testing
- Comprehensive Unit Test Suite — Added a full xUnit test project covering models, services, helpers, converters, commands, ViewModels, settings manager, and integration tests.
- Improved Testability — Refactored services with injectable dependencies to support proper unit testing.
- Disposal Tests — Added tests to verify proper resource cleanup.
Code Quality
- Applied code analysis suggestions and cleaned up unused code (removed
AsyncRelayCommand, dead code, etc.). - Improved MVVM structure with better separation of concerns.
- Generated regex compiled at build time for better performance.
Full Changelog: release_1.2.0...release_1.3.0
release_1.2.0
- Implement circuit breaker and retry logic with exponential backoff for resilient downloads.
- Propagate cancellation tokens across services.
- Optimize regex with source generation.
release_1.1.1
Improve handling of large repositories with fallback tree traversal, enhance error handling, and refactor code for static analysis.