Skip to content

Releases: purelogiccode/BatchConvertToRVZ

release_2.4.1

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 14 Jul 02:14

Bug Fixes

  • Fixed crash when DolphinTool executable is missing or inaccessible:
    When DolphinTool.exe could not be found or launched, the error handling code itself would crash with InvalidOperationException: 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 SetProcessErrorMode is 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.10.50.0

Full Changelog: release_2.4.0...release_2.4.1

release_2.4.0

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 13 Jul 05:17

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 manual ReportBugAsync calls 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 ILogger directly instead of Action<string> and Func<string, Exception?, Task> delegates.
  • ConversionService, ExtractionService, and VerificationService log through Serilog with source context via .ForContext<T>().
  • Global exception handlers in App.xaml.cs log through Serilog and use a dedicated TryReportFatal method 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

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 21 Jun 15:45

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

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 06 Jun 03:19

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.exe for 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.exe and 7za_arm64.exe executables for ARM64 builds
  • Removed unused References folder

Full Changelog: release_2.2.0...release_2.3.0

release_2.2.0

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 24 May 05:09

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, stackTrace fields)
  • 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 SystemInfo model (BaseDirectory, TempPath, ExceptionType, ExceptionMessage, etc.)

Error Reporting

  • Added automatic bug report calls across ConversionService, ExtractionService, and VerificationService when processing fails
  • Added bug report calls in MainWindow for drag-and-drop errors, file add failures, and URL open errors

FileService Cleanup

  • Streamlined FileService to a pure utility with no dependencies — removed Action<string> logger parameter and all wrapper methods (file operations now use System.IO directly 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.cs now exposes internals to the test project (InternalsVisibleTo)
  • Async naming convention: TryDeleteFileTryDeleteFileAsync, TryDeleteDirectoryTryDeleteDirectoryAsync
  • UpdateService and BugReportService methods made internal for testability
  • Removed .DotSettings.user files from tracking; added to .gitignore

Full Changelog: release_2.1.0...release_2.2.0

release_2.1.0

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 17 Apr 00:38
  • 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

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 14 Apr 01:23
  • 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

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 13 Apr 20:59

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

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 05 Apr 05:26
  • 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

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 04 Apr 05:07
  • Add support for additional disc image formats (.gcm, .wbfs)