Skip to content

release_1.4.0

Latest

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 13 Jul 04:35
· 2 commits to master since this release

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