Skip to content

Releases: purelogiccode/RVZStudio

v2.5.1

Choose a tag to compare

@github-actions github-actions released this 11 Oct 14:55

RVZStudio 2.5.1 is a maintenance release that fixes out-of-memory failures when encoding with
the highest Zstd compression levels and updates the built-in RVZSharp engine to 1.1.1.

Fixes

  • Fixed encoding with the maximum Zstd level (22) and many parallel workers failing with an
    OutOfMemoryException. The engine no longer reserves the level's full compression window per
    worker (up to ~128 MiB each at level 22); the window is now sized to the chunk being encoded.
  • Out-of-memory conditions during encoding, decoding or verification are now logged as expected
    resource limits instead of spurious bug reports; the DolphinTool fallback still completes the
    operation when memory is exhausted.

Packaging and documentation

  • Release bundles keep the framework-dependent single-file layout and the
    release_<version>_<rid>.zip naming for win-x64, win-arm64, linux-x64, linux-arm64,
    osx-x64 and osx-arm64; they are now written to the RVZStudio/bin/Release release path so
    older bundles stay available next to the new one.
  • The documentation site and the repository wiki are published from the same docs/ folder and
    now share a side menu for easier navigation.

v2.5.0

Choose a tag to compare

@github-actions github-actions released this 10 Oct 12:50

RVZStudio 2.5.0 is the first cross-platform release: the WPF/Windows-only application has been
rebuilt on Avalonia UI and now runs on Windows, Linux and macOS on both x64 and ARM64.

Highlights

  • Cross-platform UI — the same application now ships for Windows, Linux and macOS, and
    automatically locates the platform-specific helper executables.
  • Native RVZSharp engine — the built-in RVZSharp
    library is now the primary engine for encoding, decoding and verification (100% managed codecs),
    with DolphinTool as an automatic fallback. Input files are pre-validated against their real
    container magic bytes so invalid data is never wrapped into a broken RVZ.
  • Disc Explorer tab — browse the file system of ISO, RVZ, WIA, GCZ, CISO, WBFS, TGC and NFS
    images without extracting them; copy files/folders out and compute per-file SHA-256 hashes. The
    log viewer is hidden while this tab is active so the tree gets the full width.
  • Archive extraction with 7za fallback — ZIP, 7Z and RAR archives are extracted with
    SharpCompress first; when SharpCompress cannot read an archive, the bundled 7-Zip 7za
    console tool is used as a fallback. 7-Zip 26.04 binaries are bundled for all six platforms
    (Windows/Linux/macOS × x64/ARM64).
  • Structured logging — all logging goes through Serilog with an on-screen log viewer,
    rolling daily log files and automatic bug reports for warnings and errors.
  • Update checks, usage statistics and bug reporting — the application checks GitHub releases on
    startup, sends anonymous launch statistics and reports unexpected errors to the developer.
  • Screenshot capture — press F8 to save a PNG of the application window.
  • Donate button — support development directly from the header.
  • Compact single-file bundles — release packages are framework-dependent single-file binaries
    (the .NET 10 runtime is required) with the helper tools, license, readme and these notes included.

Improvements

  • Smooth overall progress bar, per-file progress, statistics cards and write-speed display.
  • Drag and drop files onto the Conversion, Verification or Extraction tab.
  • Wii discs with multiple partitions expose a partition selector in the Disc Explorer.
  • Native extraction of ISO, WIA, GCZ, WBFS, CISO and TGC without DolphinTool.
  • Scrub option zeroes non-game Wii partitions before encoding for smaller RVZ files.
  • Verification logs CRC-32, MD5 and SHA-1 of the decoded image for every verified file.

Fixes

  • Fixed a startup error in the tab-selection handler that logged a spurious bug report on every
    launch.
  • Fixed message boxes failing when shown from a background thread after a batch operation.
  • Fixed cancellation during verification sometimes being reported as a completed batch.
  • Fixed temporary extraction folders and orphaned 7za processes being left behind when an archive
    could not be extracted or an operation was cancelled.
  • Fixed .nkit.gcz files producing a .nkit.rvz output name instead of .rvz.
  • Fixed drag-and-drop of files from several folders refusing to start the operation.
  • Fixed "Copy Out" of a folder from a disc image not sanitizing the folder name.
  • Fixed fatal error dialogs closing before they could be read.
  • Removed stale Avalonia.Diagnostics 11.x package that conflicted with Avalonia 12.
  • Native SkiaSharp/HarfBuzz debug symbols are no longer shipped in release packages.

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.1 → 0.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: TryDeleteFile → TryDeleteFileAsync, TryDeleteDirectory → TryDeleteDirectoryAsync
  • 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