New Features
- Per-file conversion timeout: set a time limit (in minutes) to abort conversions that hang or take too long.
- Single-instance enforcement: the app now prevents launching multiple instances simultaneously.
- Orphaned process cleanup: leftover
chdman,maxcso, andpsxpackagerprocesses are killed on exit.
Reliability Improvements
- Retry logic for file copying with exponential backoff (3 attempts) to handle transient I/O errors.
- Better error handling for archives: clear messages for corrupt, incomplete, encrypted/password-protected, and unsupported archives instead of generic failures.
- Cross-drive path safety:
GetSafeRelativePathprevents crashes when input and output folders are on different drives. - Cancellation token safety: thread-safe access to
CancellationTokenSourcevia locking prevents race conditions. - chdman path validation: conversion now verifies
chdman.exeexists before launching the process.
UI / UX
- Named WPF styles for consistent theming (header, labels, stat cards, buttons, About window).
- Tooltips added throughout the UI for better discoverability.
- Status bar dependency indicators now use theme-aware resource brushes instead of hardcoded colors.
Code Quality
- Comprehensive unit tests added for services (
BugReportService,StatsService,UpdateService), models (GitHubRelease,PbpExtractionResult), config (AppConfig), and utilities (PathUtils,FileExtensions,GameFileParser). - Centralized
AppHttpClientreplaces duplicated per-serviceHttpClientinstances, ensuring consistent TLS 1.2/1.3 and connection pooling. - Removed obsolete code: unused interfaces (
IExternalProcessService,IFileOperationsService), models (ProcessOptions,ProcessResult), and stub test. - Removed
.cdiextension from supported formats (never used in practice).
Dependencies
- SharpCompress: 0.47.4 → 0.48.0
- Microsoft.NET.Test.Sdk: 18.4.0 → 18.5.1
Full Changelog: release_2.6.2...release_2.7.0