release_3.1.0
·
36 commits
to master
since this release
New Features
Improved CloneCD (.ccd) Support
- Full CloneCD disc image conversion support via the new CCDSharp library
.ccdfiles are now converted to CHD by generating a CUE/BIN pair from the.ccd/.imgset and then passing through chdman- CloneCD files inside archives (
.zip,.7z,.rar) are automatically detected and converted - When processing archives,
.imgfiles that belong to a CloneCD set are no longer independently converted (avoiding duplicate output) - Original
.ccd,.img,.sub, and.cdtfiles are cleaned up when "Delete originals" is enabled
CSOSharp (replaces maxcso.exe)
- CSO/CISO decompression is now handled by the CSOSharp library
- Supports both CSO v1 (deflate/zlib) and CSO v2/ZSO (LZ4) formats
- Removes the
maxcso.exedependency — no more x64-only limitation for CSO files - ARM64 users can now process
.csofiles (previously unavailable)
PBPSharp (replaces psxpackager.exe)
- PBP extraction is now handled by the PBPSharp library
- Supports single-disc and multi-disc PBP files with full SFO metadata parsing
- Generates CUE sheets that match the original psxpackager output
- Removes the
psxpackager.exedependency
Improvements
CHD Conversion
- Non-ASCII file paths (Japanese, Chinese, etc.) are now handled by copying files to a temporary ASCII-safe path before conversion, avoiding chdman encoding issues
- Automatic retry with
createdvdwhen chdman reports "Unrecognized track type" on acreatecdattempt - Added
-us 2352flag for.rawfiles to specify the sector size explicitly - Improved error reporting when chdman exits with a non-zero code but produces a valid output file
- Added file size validation (must be divisible by sector size 2048) before conversion to catch corrupt files early
- Non-ASCII file paths in CUE/GDI/TOC files are now handled with encoding fallback (Shift-JIS, GB2312, Windows-1252)
Robustness
KillChdmanProcessesmethod added to clean up lingering chdman processes when file deletion retries are exhausted- File operation retry count increased from 3 to 5
- Disk space warnings are now logged as informational messages instead of warnings (reducing false bug reports)
- Bug report API sink now filters out informational messages (disk space, rate-limiting, etc.)
- Updated SharpCompress from 0.50.0 to 0.50.1
Code Quality
- Replaced
objectlock fields with the newLocktype for improved thread safety semantics - Replaced
string.Contains()andstring ==comparisons with explicitStringComparison.Ordinalthroughout - Replaced
Task.Run()fire-and-forget patterns with_ = Task.Run()discard to suppress CS4014 warnings - Added
.ConfigureAwait(false)to library-level async calls - Reduced public API surface: many classes and members changed from
publictointernal - Added Meziantou.Analyzer for code analysis
UI
- Simplified status bar: removed MAXCSO and PSXPACKAGER dependency indicators (no longer needed)
- Updated About window links to reference CSOSharp, PBPSharp, and CCDSharp
Bug Fixes
- Fixed PBP magic value validation and SFO offset parsing in PBPSharp
- Fixed CUE/GDI/TOC file reading for non-UTF-8 encodings (added fallback through Shift-JIS, GB2312, Windows-1252)
- Fixed
int.TryParsecall to useCultureInfo.InvariantCulturefor timeout parsing - Fixed
ex.Message.Contains()to useStringComparison.Ordinalfor consistent behavior
Dependencies Removed
| Removed | Replaced By |
|---|---|
maxcso.exe |
CSOSharp library |
psxpackager.exe |
PBPSharp library |
Resources/BASE.PBP, Resources/DATA.PSP, etc. |
No longer needed (PBPSharp handles extraction) |
Full Changelog: release_3.0.0...release_3.1.0