Releases: purelogiccode/BatchConvertToRVZ
Release list
release_2.4.1
Bug Fixes
-
Fixed crash when DolphinTool executable is missing or inaccessible:
WhenDolphinTool.execould not be found or launched, the error handling code itself would crash withInvalidOperationException: No process is associated with this object.instead of reporting the real problem (e.g. "file not found"). The cleanup logic now safely handles cases where the external process was never started. (292 reports) -
Fixed crash on Windows editions where
SetProcessErrorModeis unavailable:
The error dialog suppression feature (which prevents DolphinTool from showing blocking message boxes) now fails silently on systems that lack this kernel32.dll entry point, instead of crashing the application. (1 report)
Upgraded Dependencies
- SharpCompress
0.49.1→0.50.0
Full Changelog: release_2.4.0...release_2.4.1
release_2.4.0
What's New
Screenshot Capture (F8)
Press F8 to capture a screenshot of the application window. Screenshots are saved as PNG files in the Screenshot folder inside the application directory. This is handy for sharing your setup, reporting UI issues, or documenting settings.
Serilog Logging Infrastructure
The entire logging system has been migrated to Serilog with structured logging:
- On-screen log viewer — Messages still appear in real time via a custom
UiLogSink. - Rolling daily log files — All messages are written to
%LocalAppData%\BatchConvertToRVZ\logs\with 14-day retention and 10 MB size limits. - Automatic bug reporting — Warning and Error level events are automatically forwarded to the bug report API through a dedicated
BugReportSink. No more manualReportBugAsynccalls scattered across services.
Redesigned Settings Panels
GroupBox controls have been replaced with collapsible Expander panels that are collapsed by default. This reduces visual clutter in the Convert, Verify, and Extract tabs, showing only the settings you need when you need them.
Updated Color Scheme
- Terminal output is now white (
#ffffff) instead of green — cleaner and more readable. - All action buttons (Start, Cancel, About, Exit) now share a unified cyan/sky-blue color palette (
#00bcd4), replacing the previous multi-color scheme.
Process Error Dialog Suppression
A new ProcessHelper.SuppressErrorDialogs() method prevents Windows error dialogs (like "Ignore and continue?") from blocking batch operations when DolphinTool encounters issues. The error mode is set before spawning DolphinTool processes.
Improved Error Dialog Safety
The blocking .GetAwaiter().GetResult() call for showing MessageBox from non-UI threads has been replaced with a safer Application.Current.Dispatcher.Invoke() pattern, eliminating potential deadlocks.
Code Cleanup
- Removed XML documentation comments from service classes.
- Service constructors now accept
ILoggerdirectly instead ofAction<string>andFunc<string, Exception?, Task>delegates. ConversionService,ExtractionService, andVerificationServicelog through Serilog with source context via.ForContext<T>().- Global exception handlers in
App.xaml.cslog through Serilog and use a dedicatedTryReportFatalmethod for direct bug reporting on fatal crashes.
Dependencies
- Serilog 4.4.0
- Serilog.Sinks.File 7.0.0
- Microsoft.NET.Test.Sdk updated to 18.7.0
Upgrade Notes
- No migration steps required. This release is backwards-compatible with previous version settings and workflows.
- Log files are automatically created and managed — no user configuration needed.
Full Changelog: release_2.3.1...release_2.4.0
release_2.3.1
Bug Fixes
-
Fixed false bug reports for missing DolphinTool.exe - The application no longer reports missing DolphinTool.exe as a bug. It now only displays a local error message, since this is a deployment issue (the file was not included with the application) rather than an application bug.
-
Fixed crash when browsing a non-existent extraction folder - Added a directory existence check before attempting to list files. Previously, selecting or entering a folder path that doesn't exist would cause an unhandled
DirectoryNotFoundException. The application now gracefully handles this case and displays an appropriate message.
Full Changelog: release_2.3.0...release_2.3.1
release_2.3.0
Improved 7z Archive Extraction Reliability
Some 7z archives (particularly large or heavily compressed files) would fail to extract due to a limitation in SharpCompress's LZMA decoder, causing the application to crash with an OperationCanceledException.
This version adds a fallback mechanism:
- If SharpCompress fails to extract a 7z archive, the application automatically retries using
7za.exe(7-Zip standalone) - If both extractors fail, the file is marked as corrupt instead of crashing
- Native ARM64 support via
7za_arm64.exefor Windows on ARM devices
Other Changes
- Updated SharpCompress from 0.48.1 to 0.49.1
- Updated Microsoft.NET.Test.Sdk to 18.6.0
- Added standalone
7za.exeand7za_arm64.exeexecutables for ARM64 builds - Removed unused
Referencesfolder
Full Changelog: release_2.2.0...release_2.3.0
release_2.2.0
Testing
- New unit test project (
BatchConvertToRVZ.Tests) with xUnit and Coverlet coverage - Tests covering models (
FileItem,GitHubRelease) and services (FileService,BugReportService,UpdateService,SharedHttpHandler)
Bug Report Improvements
- Refactored bug report payload to match the API schema (proper
message,applicationName,version,environment,stackTracefields) - Added structured sections in bug report messages (Environment Details, Error Details, Exception Details)
- Added truncation of message (4000 chars) and stack trace (8000 chars) fields to prevent oversized requests
- Removed unused fields from
SystemInfomodel (BaseDirectory,TempPath,ExceptionType,ExceptionMessage, etc.)
Error Reporting
- Added automatic bug report calls across
ConversionService,ExtractionService, andVerificationServicewhen processing fails - Added bug report calls in
MainWindowfor drag-and-drop errors, file add failures, and URL open errors
FileService Cleanup
- Streamlined
FileServiceto a pure utility with no dependencies — removedAction<string>logger parameter and all wrapper methods (file operations now useSystem.IOdirectly at call sites)
Enhanced Shutdown Reliability
- Window closing logic no longer blocks when the app is already shutting down via
Application.Current.Shutdown() - Added fallback to
Environment.Exit(0)if graceful shutdown fails, with a 3-second force-exit timeout
Folder Path Validation
- Input folder and verification folder validation now checks for null/empty paths and folder existence before file enumeration
- Clear error messages logged when folder paths are invalid
Verification: Include Subfolders
- New "Include subfolders" checkbox on the Verification tab — allows recursive scanning for RVZ files
- Verification file count message now indicates whether subfolders were included
UI Polish
- Added tooltips across the UI: file list labels, Select/Deselect buttons, statistic cards, extraction overlay, and output format selector
- Improved drag-and-drop tooltip hints on DataGrids
Dependencies
- SharpCompress updated from 0.47.4 to 0.48.1
Internals & Maintainability
AssemblyInfo.csnow exposes internals to the test project (InternalsVisibleTo)- Async naming convention:
TryDeleteFile→TryDeleteFileAsync,TryDeleteDirectory→TryDeleteDirectoryAsync UpdateServiceandBugReportServicemethods madeinternalfor testability- Removed
.DotSettings.userfiles from tracking; added to.gitignore
Full Changelog: release_2.1.0...release_2.2.0
release_2.1.0
- Update services to pass exceptions to bug reports for better error details
- Expand SystemInfo model with processor count, paths, and structured exception fields
- Refactor exception reporting in BugReportService and remove redundant helper methods
- Remove unused methods from FileService and simplify report building in MainWindow
Full Changelog: release_2.0.1...release_2.1.0
release_2.0.1
- Add ExceptionType and ExceptionDetails properties to SystemInfo model
- Refactor BugReportService to include exception info in reports using SystemInfo
- Wrap verification files list refresh in Dispatcher.InvokeAsync for UI safety
release_2.0.0
Major Features
- New Extraction Feature: Added a dedicated tab for extracting RVZ files back to ISO, WBFS, GCZ or WIA formats
- Drag & Drop Support: Added drag-and-drop capability for file selection in all tabs
- Selectable File Lists: Added DataGrid controls to individually select/deselect files for conversion, verification, and extraction
User Interface Improvements
- Resizable Layout: Split window with resizable log viewer using a grid splitter
- Consistent Styling: Moved style definitions to App.xaml for better maintainability and consistency
- Enhanced Tooltips: Added detailed tooltips for all UI elements to improve usability
- Adjustable Window Size: Updated window dimensions optimized for the new feature set
Technical Improvements
- Modular Services: Added specialized services for file operations, conversions, verifications, and extractions
- Improved Error Handling: Enhanced bug reporting and error handling across all operations
- Asynchronous Operations: Better async file operations and thread safety
- Robust Cancellation: Improved cancellation support with proper token propagation
- Enhanced Archive Handling: Better extraction of ZIP, 7Z, and RAR archives with security improvements
Bug Fixes
- International Support: Fixed number parsing for international locale support
- UI Freeze Prevention: Added shutdown flag to skip log UI updates when closing to avoid freezes
- Better Extension Detection: Improved handling of compound extensions like .nkit.iso
- Safer Archive Extraction: Prevent ZipSlip vulnerabilities by trimming leading slashes from archive entry paths
- Smoother Progress Tracking: Fixed progress bar jumping by improving counter update logic
Code Quality
- Documentation: Added comprehensive XML documentation to classes and methods
- Thread Safety: Added locks and improved async methods to prevent UI freezes and deadlocks
- Shared HTTP Handler: Implemented SharedHttpHandler for connection pooling across services
- Proper Cleanup: Enhanced dispose pattern implementation for resources
- Validation: Added UI validations for file selection, folder nesting, and missing dependencies
release_1.9.0
- Add ConcurrentDictionary-based progress tracking for smooth overall progress bar
- Improve log viewer to only auto-scroll when user is at bottom, and use efficient Clear() instead of substring operations
- Add cancellation support to stream copying operations (80KB buffer)
- Fix MessageBox.Show thread safety by wrapping in Dispatcher.Invoke
- Add NormalizeVersion method for consistent 4-component version comparisons
- Make TryDeleteDirectory async with Task.Delay for better responsiveness
- Fix compound extension handling for .nkit.iso files
release_1.8.1
- Add support for additional disc image formats (.gcm, .wbfs)