Releases: drpetersonfernandes/BatchConvertToCHD
release_2.9.0
New Features
- 7-Zip fallback extraction for .7z archives — When SharpCompress fails to extract a
.7zfile, the application now automatically retries using the bundled7za.exetool. This improves compatibility with archives that SharpCompress cannot handle. - ARM64 support for 7-Zip — Added
7za_arm64.exefor ARM64 systems, selected automatically on ARM64 processors. - Smarter temporary directory selection — The application now prefers drives that have enough free space for the operation, rather than simply picking the drive with the most total free space. Network drives are also excluded from temp directory selection.
Improvements
- Retry logic for archive extraction — File writes during extraction now retry up to 3 times on transient I/O errors (e.g., network drops).
- Disk space pre-checks before fallback copy — When retrying a failed conversion via a temp directory copy, the application now calculates the required space and verifies the temp drive has enough room before starting the copy.
- Fewer false bug reports — Disk space errors are no longer reported as bugs. The application now detects these and shows a clear message instead.
- Better error messages for invalid archives — Improved detection and reporting of corrupt, incomplete, or unsupported archive files.
- Updated SharpCompress to 0.49.1.
Bug Fixes
- Fixed unreachable error handler for invalid archives — A catch block for
InvalidFormatExceptionwas being shadowed by a generic exception handler and would never execute. Invalid archives now correctly return an "invalid or incomplete" error message.
Full Changelog: release_2.8.0...release_2.9.0
release_2.8.0
Storage & Performance
- Smart temp directory selection: Temporary files now go to the drive with the most available free space (instead of always using the system temp drive). This prevents running out of space on small system drives.
- Pre-operation disk space checks: Before starting conversions or extractions, the app now checks available disk space on both the output drive and the temp drive, warning you before you run out of space mid-operation.
- Disk space error detection: When chdman or maxcso fails due to insufficient disk space, the app now shows a clear error message with actionable advice instead of a generic failure.
Stability & Error Handling
- Graceful handling of missing/corrupt files: Missing or unreadable CUE, GDI, and TOC files now log a warning and skip the file rather than crashing the application.
- Referenced file validation: Before attempting conversion, referenced disc image files (BIN files from CUE sheets, track files from GDI/TOC) are now verified to exist. Missing references are reported and the file is skipped cleanly.
- Cancellation vs disk space distinction: Cancelled operations no longer get misreported as disk space errors, and genuine disk-full scenarios are properly identified.
- Process cleanup in finally blocks: All external processes (chdman, maxcso, psxpackager) are now guaranteed to be killed on failure, cancellation, or success — preventing orphaned processes and locked files.
- SharpCompress update: Updated to v0.48.1. Known corrupt or encrypted archives now immediately throw without attempting a time-wasting fallback extraction.
Testing (238 unit tests)
- Added comprehensive tests for
AppHttpClient(thread safety, TLS 1.2/1.3, singleton behavior) - Added comprehensive tests for
UpdateService(version parsing, rate limiting, pre-release skipping, network errors) - Added tests for cancellation exception handling and disk space exception detection
- Added tests for
PathUtils.GetBestTempDirectoryandGetPossibleTempBasePaths - Added edge-case tests for
FileItem,BugReportService, andPathUtils.SanitizeFileName
UI
- Added tooltips to DataGrid column headers, About window links, and buttons
Full Changelog: release_2.7.0...release_2.8.0
release_2.7.0
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
release_2.6.2
What's New in v2.6.2
Bug Fixes
- Fixed GDI file parsing for filenames with spaces — Corrected an off-by-one error in
GameFileParserwhen reconstructing filenames from GDI track entries that contain spaces. - Added missing file checks — The app now gracefully skips files that are deleted or moved after being queued, instead of crashing during processing.
- Fixed file size formatting — File sizes are now formatted with invariant culture, ensuring consistent decimal separators across different system locales.
New Features
- Added comprehensive unit tests — Introduced a new
BatchConvertToCHD.Testsproject coveringGameFileParser,ArchiveService,FileItem, and more to improve stability and catch regressions early.
Maintenance
- Updated build and test dependencies.
Full Changelog: release_2.6.1...release_2.6.2
release_2.6.1
- Integrated
SharedBugReportServiceandReportBugAsynccalls across ArchiveService, UpdateService, MainWindow, and related error paths. - Updated BugReportService payload to match API model (removed extraneous fields).
Full Changelog: release_2.6.0...release_2.6.1
release_2.6.0
This release focuses on improving code quality, application stability, and user experience with better error handling and documentation.
🛠️ Better Error Reporting
- Enhanced bug reporting with detailed system information (OS version, architecture, etc.)
- Structured error payloads for faster issue resolution
- Improved stack trace formatting
🚀 Stability & Performance
- Fixed PSXPackager crashes during PBP file extraction
- Improved application shutdown process - no more hanging processes
- Better handling of browser launch failures when checking for updates (URL is now copied to clipboard)
- Optimized HTTP connections for update and stats reporting
📝 Code Quality
- Added comprehensive documentation throughout the codebase
- Centralized file extension handling for better maintainability
- Refactored archive extraction (ZIP, 7Z, RAR) for improved security and reliability
- Removed unused configuration constants
🎨 UI Polish
- Fixed typos in interface labels ("successfull" → "successful")
- Improved console log styling
- Better organization of UI resources
📦 Dependencies
- Updated SharpCompress library to v0.47.4
Full Changelog: release_2.5.1...release_2.6.0
release_2.5.1
- Moved command-line argument processing for input folder from App.xaml.cs to MainWindow.xaml.cs for direct application.
- Removed outdated startup event handling in App.xaml.cs.
release_2.5.0
🚀 New Features
- Modern Side-by-Side Dashboard: A completely redesigned interface featuring a dual-pane layout. View settings and file lists on the left while monitoring real-time logs on the right.
- Interactive File Selection: You can now see exactly which files were found in your source folder. Use the new DataGrid view to manually select or deselect specific files before starting a batch process.
- CloneCD (.ccd) Support: Added native support for CloneCD images. The app now intelligently detects
.ccdfiles and ensures the correctcreatecdcommand is used. - Command-Line Input Support: You can now pass a folder path as a command-line argument to automatically set the input directory on startup.
- GDI Extraction: Added a dedicated option to extract Dreamcast/Naomi CHD files back to the
.gdiformat. - Directory Structure Preservation: When processing subfolders, the application now mirrors your original folder hierarchy in the output directory.
🛠 Improvements
- Multi-Disc Handling: Improved logic for
.pbpfiles and archives containing multiple games; the app will now extract and convert all discs found within a single container. - Enhanced Dependency Check: On startup, the app now performs a critical check for
chdman.exeand optional tools, providing clear notifications if anything is missing. - Smart Log Truncation: Optimized the logging engine to handle massive batch jobs without slowing down the UI by using a smarter memory-efficient truncation strategy.
- Improved File Parsing: Rewrote the CUE, GDI, and TOC parsers to better handle unquoted filenames and files containing spaces.
- Windows 7 Compatibility: Updated the network stack to force TLS 1.2/1.3, ensuring the "Check for Updates" feature works on older operating systems.
- Empty Folder Cleanup: Added an option to automatically remove empty subdirectories left behind after successful conversions or moves.
🐛 Bug Fixes
- Security: Added path traversal protection during archive extraction.
- Stability: Improved error handling for "Access Denied" issues caused by antivirus software blocking
chdman. - API Limits: Added handling for GitHub API rate limits during update checks.
- UI Responsiveness: Implemented chunked file loading to prevent the UI from freezing when scanning folders with thousands of files.
📦 Dependency Updates
- Updated
SharpCompressto v0.47.4 for better archive compatibility and security.
release_2.4.0
🚀 New Features
- Recursive Processing: Added the ability to search for files in subfolders for both the Conversion and Verification processes.
- UI Updates: Added "Search for files in subfolders" checkboxes to the Options group in the main window.
🛠️ Build & Maintenance
- Dependency Update: Upgraded
SharpCompressfrom v0.47.0 to v0.47.2.
release_2.3.0
UI Overhaul: The application receives a modern dark theme with a harmonious color palette, redesigned button styles, custom control templates (checkboxes, radio buttons, tooltips), and a refreshed "About" window with clickable hyperlinks to GitHub and the official website.
New Features: CHD extraction gained a user-selectable output format (Auto/CD/DVD/Hard Disk) along with an option to delete the original CHD after successful extraction.
Bug Fixes & Security: The update checker was refactored to use proper HttpRequestMessage scoping, archive extraction now validates that files cannot be written outside the target directory (path traversal fix), and cancellation handling was improved to ensure processes are fully terminated before cleanup.