Skip to content

Releases: purelogiccode/RetroGameCoverDownloader

release_1.4.0

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 13 Jul 04:35

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

  • RetryOnForbidden now defaults to false to 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., .gitmodules fetch uses its own retry policy)

Other Improvements

  • Data paths migrated from app folder to %LocalAppData%
  • Log buffer size capped at 100K characters
  • UiLogSink thread 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

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 10 May 16:31

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

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 17 Feb 18:55
  • 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

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 25 Jan 18:58

Improve handling of large repositories with fallback tree traversal, enhance error handling, and refactor code for static analysis.

release_1.1

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 04 Jan 02:20

Initial release