Skip to content

Releases: purelogiccode/XISOStudio

XISO Studio 3.0.1

Choose a tag to compare

@github-actions github-actions released this 01 Oct 15:11

October 2026

The reliability patch for 3.0.0. Environmental failures — files held open by antivirus,
download managers, or cloud sync, and unreadable system mounts on Linux/macOS — no longer
auto-upload bug reports, and CSO/ZAR/CHD progress is reported synchronously so percentages are
monotonic and in order.

Bug Fixes

  • Locked files no longer generate bug reports. A tested image whose move to _success/_failed
    fails with a sharing violation is still reported as failed and the batch continues, but the event
    is logged at Information level instead of Error, so the bug-report sink (which forwards Warning and
    above) no longer uploads it as an application defect. The same classification now applies when the
    source cannot be opened for testing and the cloud-copy fallback also fails with a sharing violation
    (OrchestratorService.TestEntriesCoreAsync, OrchestratorService.CopyFileWithCloudRetryAsync).
  • Inaccessible temp roots are skipped without a warning on Linux/macOS. DriveInfo.GetDrives()
    returns system mounts (/root, /.snapshots, /sys/kernel/tracing, …) that the current user cannot
    read; the startup cleanup scan logged each UnauthorizedAccessException at Warning, so every launch
    auto-uploaded several bogus reports. TempFolderCleanupHelper.FindOrphanedWorkDirectories now logs
    them at Debug and skips the remaining patterns for that root.
  • Progress reports are delivered in order. The CSO, ZAR, and CHD progress adapters used
    Progress<T>, which posts callbacks to the thread pool when no UI synchronization context is
    present. Concurrent callbacks raced on the "last reported percentage" and could emit values out of
    order (for example 54% before 49%). All adapters now use the new synchronous
    SynchronousProgress<T> (XisoSharpService, ChdService, XisoIntegrityService), so percentages
    are monotonic and every step is delivered in order on the reporting thread.
  • Platform-dependent tests fixed. Windows-only cases (drive letters, file-locking retry behavior)
    are skipped on Unix, the disk-monitor exclusion test compares roots exactly (the Unix / root trims
    to an empty string), and the deep-ZAR test accepts a macOS path-too-long failure; CI is green on
    Windows, Linux, and macOS again.

Upgrading

Download the archive for your platform and replace the previous files. There are no configuration,
format, or workflow changes — 3.0.1 is a drop-in replacement for 3.0.0. The application reports
version 3.0.1 (AssemblyVersion/FileVersion).


Full Changelog: release_3.0.0...release_3.0.1

release_3.0.0

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 30 Sep 06:01

3.0.0

September 2026

The cross-platform CHD & logging release. The application was ported from WPF to
Avalonia and now runs on Windows, Linux, and macOS (x64 and ARM64), and
CHDSharp is integrated as a second in-process engine:
Xbox and Xbox 360 ISOs can be converted to CHD v5, and Xbox DVD CHD files can be integrity-tested
and explored without extraction. All logging runs through Serilog with
automatic bug reporting, and the Convert and Test views now offer per-file selection lists with
XISO/ZAR/CSO/CHD output formats.

New Features

  • Cross-platform UI — WPF replaced with Avalonia (same dark theme, colors, fonts, layout,
    and control styling) with one net10.0 codebase. Six release archives are produced:
    win-x64/win-arm64, linux-x64/linux-arm64, and osx-x64/osx-arm64. All imaging
    libraries are pure managed code, so conversion, integrity testing, and exploration work
    identically everywhere. Windows-only integrations degrade gracefully: the read/write speed
    monitor shows N/A (Windows performance counters), file/folder pickers and links use the OS-native
    dialogs, and the 7-Zip CLI fallback is bundled for every platform — 7za.exe/7za_arm64.exe on
    Windows, 7zz_linux_x64/7zz_linux_arm64 on Linux, and the universal 7zz_osx on macOS — with a
    system 7z on PATH as a further fallback.
  • CHD output format — the Convert tab's Output Format selector gains CHD (.chd,
    Compressed Hunks of Data). The optimized game partition is encoded by ChdEncoder.EncodeRaw
    (CHDSharp) with the chdman createdvd preset — 4096-byte hunks, 2048-byte units, the
    lzma,zlib,huff,flac codec list, and the DVD metadata tag. Non-optimized (Redump) inputs are
    rewritten to the game partition first, so Skip $SystemUpdate and Delete Originals work exactly
    as they do for XISO/ZAR/CSO. Check Output Integrity deep-verifies the new CHD — every hunk is
    decompressed and every checksum and hash is validated — before the conversion is reported as
    successful.
  • CHD integrity testing — .chd files are testable, limited to Xbox DVD images. The container
    is verified with Chd.CheckFile (header-only, or every hunk and checksum with Perform Deep Scan), and the Xbox filesystem is audited over the decompressed image through XISOSharp
    (AuditXiso(IBlockDevice)). CD/GD-ROM/hard-disk CHDs and differential child CHDs are rejected
    with a clear message.
  • CHD exploration — the Explorer opens .chd files through a keep-open ChdImageStream
    (hunks decompressed on demand) and lists and copies out entries with the XISOSharp stream APIs.
    Both game-partition-only CHDs (produced by this app) and full Redump-image CHDs (produced by
    chdman createdvd) are supported — partition offsets are auto-detected.
  • Serilog logging pipeline — three sinks: the on-screen log viewer (UiLogSink), a rolling daily
    file log (%LocalAppData%\XISOStudio\logs\log-*.txt, 10 MB per file, 14 files retained),
    and a bug-report sink (BugReportSink) that forwards every Warning-or-higher event to the Bug
    Report API. Avalonia's internal diagnostics are routed through the same pipeline
    (AvaloniaSerilogSink) instead of the Trace-based default. The custom ILogger/LoggerService
    abstraction was removed.
  • Complete bug reports — every report contains === Environment Details === (date, application
    name/version, OS version, architecture, bitness, Windows version, processor count, base directory,
    temp path), === Error Details ===, and — when an exception is attached — === Exception Details ===
    (type, message, source, and stack trace, including nested and aggregate exceptions). The API's
    environment and stackTrace fields are populated as well.
  • Fatal-error reporting — global handlers (AppDomain.UnhandledException,
    DispatcherUnhandledException, TaskScheduler.UnobservedTaskException) report through the same
    pipeline, and fatal shutdown paths send a blocking report before the process exits.
  • Selectable file lists — after choosing an input folder, the Convert view lists every supported
    file (.iso, .zip, .7z, .rar) and the Test view lists every ISO, each with a
    Select checkbox, file name (relative to the input folder), and formatted size. Only ticked
    files are processed. Select All / Deselect All buttons toggle the whole list in one click,
    and toggling Search Subfolders refreshes the list immediately (the list also refreshes after
    each batch so it reflects deleted originals and files moved to _success/_failed).
  • Compressed output formats — the Convert tab now produces ZAR (.zar, ZArchive/zstd,
    loadable directly in Xenia canary) and CSO (.cso, CISO v2/LZ4, byte-identical to
    xdvdfs compress) in addition to optimized XISO. ZAR streams the game-partition tree straight
    into the archive; CSO repacks non-optimized inputs to a temporary XISO first. Skip $SystemUpdate,
    Delete Originals, and integrity checking apply to all formats, and the file list stays
    ISO/archive-only.

Improvements

  • Every catch block now logs — previously silent cleanup, retry, and ignore paths log at an
    appropriate level, and public service methods log failures with context.
  • Fewer false reports — expected user/environmental problems (corrupt or password-protected
    archives, missing files, unsupported images, disk-space/network errors) are logged at Information
    level so they never generate bug reports; genuine failures are logged at Warning/Error/Fatal.
  • Diagnostics on disk — the rolling log file records the startup version and the full session log
    for troubleshooting.
  • Single source of truth for supported files — the SupportedFiles filter is shared by the UI
    lists and the orchestrator folder scans, so the UI can never offer a file the converter cannot handle.
  • Responsive with large folders — list items are added in chunks of 100 on the UI thread, so
    folders with thousands of files stay responsive.
  • New orchestrator API — IOrchestratorService.ConvertFilesAsync and TestFilesAsync process an
    explicit file list; the folder-scanning ConvertAsync/TestAsync remain for compatibility.
  • Side-by-side layout — the Convert and Test views (folder pickers, options, and the selectable
    file list) now occupy the left panel, while the log viewer / XISO explorer fills the right panel,
    with a draggable splitter between them. On the Explorer tab the file picker and the explorer list
    share the full window width and the log panel is hidden.
  • Collapsible Options — the Options panel on both tabs is an Expander styled to match the
    theme; click its header to collapse or expand it and give the file list more room.
  • Theme-consistent list styling — new FileListDataGridStyle and related styles match the dark
    terminal theme.
  • Bundled 7-Zip fallback on every platform — the 7-Zip CLI fallback is no longer Windows-only:
    release archives now ship the official 7-Zip console binary for the matching platform
    (7za.exe/7za_arm64.exe, 7zz_linux_x64/7zz_linux_arm64, or the universal 7zz_osx), with
    7-Zip-License.txt, so complex/unsupported archives extract out of the box on Linux and macOS
    too; a system 7z on PATH remains as a further fallback.

Breaking Changes

  • CUE/BIN input support was removed. The bundled bchunk.exe and the .cue file type are gone:
    the application now supports only .iso (Redump full-disc images) and already-optimized XISO
    files, plus the archive formats (.zip, .7z, .rar). .cue/.bin files are no longer listed
    or processed. The application and test projects report version 3.0.0
    (AssemblyVersion/FileVersion) so the update checker sees this release over 2.8.0.

Bug Fixes

A full review of the XISOStudio and XISOStudio.Tests projects found and fixed
38 verified defects. The most significant ones:

Data safety

  • Archive deletion predicate was too loose — an archive could be deleted when only one of its
    images was converted, losing the unprocessed contents. The extractor now reports skipped entries
    (ArchiveExtractionResult), and the archive is removed only when every entry was extracted and
    every extracted image was converted or explicitly skipped by the user.
  • Same-named inputs overwrote each other — two inputs sharing a base name (for example
    Disc1/game.iso and Disc2/game.iso) mapped to one output path; the engines delete a pre-existing
    output, so the second conversion destroyed the first and both originals were then deleted. Output
    paths are now reserved per batch (game.iso, game (2).iso, …).
  • Invalid inputs were treated as failures and could count toward deletion — engines now return a
    distinct FileProcessingStatus.InvalidInput, which never deletes the source and keeps archives alive.
  • Test temp copies leaked when the cloud copy failed or the user canceled the cloud retry; the
    cleanup finally now covers every exit path.

Conversion correctness

  • Skip $SystemUpdate was ignored for already-optimized inputs written as CSO/CHD — those inputs
    are now rewritten through the $SystemUpdate filter before compression.
  • Wrong XGD partition offset for Redump-type-5 images with an unknown/unreadable video PVD — the
    dead GetXgdType fallback is now reachable, so XGD2 offsets are selected correctly.
  • Split CISO cloud copies dropped the .1 part marker and only copied part 1; every part is now
    copied with its original numbering, and a split set is recognized as such.
  • Free-space pre-checks used the uncompressed size for compressed outputs, rejecting conversions
    that would easily fit; compressed formats now use a size-aware estimate.
  • **Temp-path and zip-slip path comparisons were case-insensi...
Read more

release_2.8.0

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 28 Sep 00:32

2.8.0

The XISOSharp release. All XISO encoding, decoding, integrity testing, and exploration now
run in-process through the XISOSharp library.
The bundled extract-xiso.exe/xdvdfs.exe engines and the in-repo XDVDFS implementation were removed.

New Features

  • In-process XISOSharp conversion engine — XisoSharpService converts via XisoReader.Rewrite.
    Redump/XGD1/XGD2/XGD3 and hybrid partition offsets are auto-detected; video partitions, padding, and
    inter-file gaps are removed. Already-optimized images (optimized tag present) are skipped automatically.
  • XISOSharp integrity service — XisoIntegrityService performs a deep structural audit of the
    XDVDFS tree (XisoReader.AuditXiso) and reports per-entry issues, plus the optional sequential
    deep surface scan.
  • Explorer migrated to XisoExplorer — browsing, double-click to open, and drag-and-drop
    extraction now use XisoExplorer/ExplorerNode, with ordinal-ignore-case sorting.
  • Smaller distribution — extract-xiso.exe (40 KB) and xdvdfs.exe (3.6 MB) are no longer bundled.

Improvements

  • ARM64 CUE/BIN handling now matches the documentation — .cue/.bin inputs are skipped with a
    clear message on ARM64 (the bundled bchunk.exe is x64-only), instead of attempting to launch it.
    The ARM64 bundle therefore no longer ships bchunk.exe.
  • Output free-space and FAT32 4 GB limit pre-checks before conversion, with partial-output cleanup on failure.
  • Output integrity check (when enabled) validates the produced XISO before reporting success.
  • Device I/O errors (ERROR_IO_DEVICE and localized variants) stop the batch with a drive-health
    message and are excluded from automatic bug reports.
  • Locked archives are retried with exponential backoff (antivirus/download-client locks).
  • Cross-volume file moves fall back to copy + delete when a direct move fails.
  • Local file moves now use the same retry/backoff logic as network moves.
  • More languages in network/disk-space/device error detection (English, German, French, Spanish,
    Italian, and Czech device-not-ready from bug reports).

Bug Fixes

  • The main window is no longer delayed by drive probing — startup cleanup used to run before the
    window was shown; probing every drive with DriveInfo.IsReady can block for ~20 seconds while an
    idle/spinning disk wakes up, which made the app look like it never started. Cleanup now runs after
    the window is visible and off the UI thread (the same fix removes the pause before each batch, since
    the pre-operation cleanup shares the code path).
  • Cloud/OneDrive files keep their original name — when the source is a temporary working copy,
    the converted XISO is written using the original file name instead of the internal temporary name.
  • Skipped (already-optimized) inputs no longer delete an existing output file — the optimized
    check now runs before the output is touched.
  • Replace Originals no longer loses data on skipped conversions — .iso, archive, and CUE/BIN
    originals are deleted only when a converted file was actually produced. Cloud-backed originals are
    now deleted too (previously they were always kept, so Replace Originals silently did nothing for them).
  • Device I/O errors are no longer misclassified as network errors — localized "I/O device error"
    messages now fall through to the drive-health path instead of the network retry path.
  • Temp-folder cleanup failures no longer mask the original error — a folder that remains locked
    after all retries logs a warning instead of throwing from finally blocks.
  • The 7-Zip CLI fallback for unsupported ZIP compression honors cancellation — the shared async
    helper terminates the child process when the batch is cancelled.
  • FAT32 and access-denied move failures are reported with actionable guidance.
  • Better DirectoryNotFoundException/cloud-provider handling across conversion and extraction.

UI Changes

  • The Conversion Method radio buttons were removed; conversion is always performed by XISOSharp.
  • The Convert tab shows a Conversion Engine — Powered by XISOSharp panel with a link to the project.
  • About window, instructions, and links updated to the XISOSharp engine and the new repository URL.

Breaking Changes

  • extract-xiso.exe, xdvdfs.exe, the native XISO writer, and the in-repo XDVDFS parser were removed.
  • The application and test projects report version 2.8.0 (AssemblyVersion/FileVersion) so the
    update checker sees this release over 2.7.x. The file layout is otherwise the same.

Documentation

Internal

  • Added .editorconfig and enabled Meziantou/Roslynator analyzers on both projects; project builds
    with zero warnings.
  • Renamed services for clarity: ExtractFiles → FileExtractorService, MoveFiles → FileMoverService,
    Logger → LoggerService.
  • Consolidated interfaces: IXisoSharpService, IXisoIntegrityService; removed IExtractXisoService,
    IXdvdfsService, INativeIsoIntegrityService.
  • Test suite reorganized around the new services (XisoSharpServiceTests, XisoIntegrityServiceTests).

Full Changelog: release_2.7.1...release_2.8.0

release_2.7.1

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 05 Jul 05:01

New Features

  • New unit tests — Added tests for DiskMonitorService, FileExtractorService, OrchestratorService, and StatsService.

Improvements

  • Better DirectoryNotFoundException handling in ExtractXisoService — Shows a clear message when a drive or path is missing instead of a generic error.
  • Better EndOfStreamException handling in ExtractFiles — Corrupt/incomplete archives now show a "re-download" message.
  • Better xdvdfs error messages — Non-zero exit codes now suggest the ISO may be invalid or corrupt, without sending a bug report.
  • Encrypted archives no longer trigger bug reports — Password-protected archives are treated as environmental errors.
  • CancellationToken passed to temp folder cleanup — Cleanup operations now respect cancellation instead of running unconditionally.

UI Changes

  • Terminal text color changed from green to white.
  • Start button changed from green to cyan.
  • Exit button changed from slate gray to purple.

Internal

  • Added static annotation to lambda expressions where applicable.
  • Microsoft.NET.Test.Sdk updated from 18.6.0 to 18.7.0.

Full Changelog: release_2.7.0...release_2.7.1

release_2.7.0

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 21 Jun 18:31

Improved ISO Compatibility

  • Rebuilt XISO support — Added detection of XDVDFS volumes at Sector 0 for rebuilt XISO images that have no video partition header
  • Secondary signature validation — Now validates both the primary signature at the header offset and the secondary signature at +0x7EC, matching the reference implementations in extract-xiso and xdvdfs
  • Relaxed partition validation — Reduced false negatives when detecting valid Xbox disc images by accepting empty root directories (rootOffset == 0 && rootSize == 0) and removing overly aggressive first-entry validation
  • Expanded scan regions — The sector-by-sector fallback scan now covers 64KB–512MB (previously 8MB–512MB), catching XGD3 partitions that start closer to the beginning of the file
  • Windows-1252 encoding for filenames — Xbox filenames with accented characters (e.g. é, ü, ñ) are now displayed correctly instead of being garbled by ASCII decoding

Disk Space Detection & Error Handling

  • Centralized disk space detection — Consolidated IsDiskSpaceError and IsNetworkError into PathHelper, eliminating duplicate code across OrchestratorService, ExtractXisoService, and ExtractFiles
  • Multilingual network error detection — Added support for German (Netzwerk, nicht mehr verfügbar), French (réseau, n'est plus disponible), Spanish (la red, de red), and Italian (rete) network error messages
  • Improved "device" error filtering — Excludes "The device is not ready" (ERROR_NOT_READY) from network error matches, preventing false positives on disconnected USB drives
  • Inner exception checking — IsNetworkError and IsDiskSpaceError now check InnerException messages, catching wrapped errors from network share failures
  • Centralized temp directory resolution — PathHelper.ResolveTempDirectory provides a single implementation used by both OrchestratorService and ExtractXisoService

Cancellation & Threading Improvements

  • TaskCompletionSource for shutdown — Replaced the polling loop in WaitForOperationToCompleteAsync with TaskCompletionSource, enabling instant detection of operation completion during window close
  • Proper shutdown ordering — _cts.Cancel() now fires after the operation is fully set up, preventing race conditions where cancel is called before the operation starts
  • Fixed cancellation token in process termination — Process kill tasks now use CancellationToken.None since the original token is already cancelled at that point
  • Safe CTS disposal — Wrapped CancellationTokenSource.Dispose() in try-catch to handle ObjectDisposedException during shutdown
  • Thread-safe XisoExplorer — Added _explorerIsoStLock to protect the ISO stream from concurrent access during drag-and-drop, file open, and directory navigation

Memory & Performance

  • ArrayPool for large buffers — Surface scan and file verification now rent 4MB buffers from ArrayPool<byte>.Shared instead of allocating new arrays each time, reducing GC pressure during batch operations
  • Stopwatch for elapsed time — Replaced DateTime.Now subtraction with System.Diagnostics.Stopwatch for accurate, high-resolution operation timing
  • IHttpClientFactory integration — BugReportService, StatsService, and UpdateChecker now receive HttpClient from the DI container via IHttpClientFactory, enabling proper connection pooling and DNS refresh

UI Improvements

  • Subfolder search for ISO testing — Added a "Search for files in subfolders" checkbox to the Test tab, matching the existing behavior on the Convert tab
  • Responsive XISO Explorer columns — The Name column auto-resizes to fill available space when the explorer panel is resized
  • Delayed temp file cleanup — Files extracted for "Open" or drag-and-drop are cleaned up after a 30-second delay instead of immediately, preventing file-in-use errors
  • Async log reading — ReportBugAsync now uses Dispatcher.InvokeAsync for reading the log viewer, avoiding potential deadlocks on the UI thread

Code Quality & Correctness

  • Fixed Utils.WriteBytes — The buffer read offset was always 0, overwriting previously-read bytes; now correctly reads at (int)numBytes
  • Fixed output filename for renamed files — OrchestratorService now uses the original filename (not the temp copy path) when generating the output .iso name
  • Removed Math.Abs from HResult — HResult values for ERROR_DISK_FULL (0x70) and ERROR_HANDLE_DISK_FULL (0x27) are positive; the Math.Abs was a no-op
  • Proper using for HTTP resources — JsonContent and HttpResponseMessage are now disposed correctly in BugReportService
  • BinaryReader leave-open — IsoSt now creates its BinaryReader with leaveOpen: true, preventing the stream from being closed when the reader is disposed
  • Fixed Zip Slip detection — Changed from entryPath.Contains("..") to checking individual path components, preventing false positives on filenames like "my..file.txt"
  • AggregateException formatting — ExceptionFormatter now iterates all inner exceptions in an AggregateException, not just the first one
  • Fixed sharing violation detection — IsFileLocked now uses the HResult code (0x80070020) instead of string matching on the error message

Removed Unused Dependencies

  • Removed System.Text.Encoding.CodePages NuGet package — The encoding provider is registered at startup via CodePagesEncodingProvider.Instance, but the explicit package reference was no longer needed in the main project (added to tests via ModuleInitializer)

Test Coverage

  • 222 tests passing — All existing and new tests pass with zero warnings
  • New tests for: empty root directory handling, rebuilt XISO detection, multilingual network/disk errors, ConvertToPastTense grammar rules, XisoWriter.GetXgdType mapping, and UrlOpenerService error logging

Full Changelog: release_2.6.1...release_2.7.0

release_2.6.1

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 18 Jun 05:33

Features

  • Support for multiple Xbox disc formats: Added detection for XGD1, XGD2, XGD3, and additional disc variants. The converter now tries multiple known partition offsets when reading the XDVDFS volume descriptor, improving compatibility with a wider range of Xbox ISO dumps.

Bug Fixes

  • Fixed missing partition offset in signature scan: The fallback signature scan (FindXisoSignatureOffset) now includes the 0x89D80000 offset, matching the offset used by XisoWriter for Redump type 5 ISOs. Previously, if signature validation failed at the expected offset, the scan would not find this variant.

Full Changelog: release_2.6.0...release_2.6.1

release_2.6.0

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 14 Jun 22:37

New Features

7-Zip CLI Fallback for Unsupported Compression Methods

  • ZIP archives using unsupported compression methods (e.g., ZSTD/method 21) now automatically fall back to 7-Zip CLI extraction
  • If 7-Zip is not installed, provides clear instructions on how to install it or place 7za.exe in the application directory

Multilingual Network Error Detection

  • Added network error detection with support for multiple languages:
    • English: "network", "device", "no longer available"
    • German: "Netzwerk", "nicht mehr verfügbar"
    • French: "réseau", "n'est plus disponible"
    • Spanish: "red"
    • Italian: "rete"
  • Network errors now display helpful guidance to users instead of generic error messages

Improved Disk Space Handling

  • Added ResolveTempDirectory method to automatically find alternative drives when default temp drive lacks space
  • Pre-conversion disk space checks now use IDiskMonitorService for better accuracy
  • TempFolderCleanupHelper now scans all fixed drives for orphaned temp folders

Bug Fixes

Archive Extraction Improvements

  • Fixed bug #56363: 7-Zip fallback for unsupported compression methods
  • Fixed bug #56306: Improved path validation for archive extraction
  • Improved disk space error detection to handle:
    • Negative HResult values
    • Inner exceptions
    • French error messages ("Espace insuffisant", "disque plein")

IO Error Resilience

  • Added retry logic with exponential backoff for transient IO errors in file copy operations
  • Added retry logic for directory enumeration during extraction
  • Handle EndOfStreamException in XDVDFS traversal to return partial results for corrupted ISOs
  • Catch InvalidDataException and NullReferenceException during integrity check and startup

XISO Explorer Improvements

  • Improved disk space handling in XISO Explorer extraction
  • Better error messages for disk space issues

Dependencies

  • Updated Microsoft.Extensions.DependencyInjection to version 10.0.9
  • Updated SharpCompress to version 0.49.1

Full Changelog: release_2.5.0...release_2.6.0

release_2.5.0

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 29 May 03:21

7-Zip CLI Fallback for .7z Archives

SharpCompress can struggle with certain .7z archives (especially those using newer compression methods). This release adds an automatic fallback to the 7-Zip command-line tool when SharpCompress fails.

Smart Temp Drive Selection

When the system temp drive runs low on space during archive extraction, the app now automatically searches alternative local drives with sufficient free space. This prevents failures when processing large archives on systems where the C: drive is nearly full.

Archive Info Pre-Scan

Before extraction, archives are now analyzed to determine their uncompressed size and file count. This enables the drive space check to be smarter and provides a more accurate progress indicator before extraction begins.

Enhanced Error Handling

  • Added bug reporting for failures in ExternalToolService, ExtractXisoService, NativeIsoIntegrityService, and XisoWriter
  • Disk space checks now include a 10% safety buffer (minimum 200MB) to account for filesystem overhead

Under the Hood

  • Upgraded SharpCompress to 0.49.0
  • Over 30 new unit tests covering DisplayInstructions, Formatter, GenerateFilename, and ConvertToPastTense

Full Changelog: release_2.4.0...release_2.5.0

release_2.4.0

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 24 May 02:10

Encrypted Archive Detection

Password-protected archives (ZIP, RAR, 7z) are now automatically detected. Instead of cryptic "bad state" or "end of stream" errors, you'll see a clear message explaining the file is encrypted and guidance on how to extract it manually. This prevents confusion when processing archives downloaded from sites that password-protect their downloads.

File Lock Detection

If an archive is currently open in another program (file explorer preview, antivirus scan, download manager, etc.), the application now detects this before attempting extraction and provides a clear error message asking you to close the locking program.

Retry Logic with Exponential Backoff

Archive analysis and extraction now include automatic retry on transient I/O errors (up to 3 attempts with increasing delays), reducing failures caused by temporary file locks or brief network interruptions.

Drive Readiness Check

Before processing files, the application verifies the target drive is actually ready — preventing confusing errors when working with disconnected external drives or network shares that have gone offline.

Improved Shutdown Handling

  • The application now properly cancels and disposes background operations when closing
  • Added a safety net that force-terminates the process if the UI becomes unresponsive during shutdown (prevents the app from lingering in the background)
  • Closing the window while an operation is running is now smoother and more reliable

Code Quality & Maintainability

  • Extracted GetXgdType method for cleaner Redump ISO type detection
  • BuildFullMessage made testable (now internal static)
  • UpdateChecker now uses injected version string instead of runtime assembly reflection
  • Removed unused ApplicationSettings model and orphaned methods (GetUncompressedArchiveSizeAsync, RobustMoveFileAsync)
  • Added 4 new unit test files, bringing the test suite to 173 passing tests
  • Async methods now follow the Async suffix naming convention
  • NuGet dependencies updated: SharpCompress 0.48.1, Microsoft.Extensions.DependencyInjection 10.0.8

Full Changelog: release_2.3.1...release_2.4.0

release_2.3.1

Choose a tag to compare

@drpetersonfernandes drpetersonfernandes released this 15 Apr 15:42
  • Update Microsoft.Extensions.DependencyInjection to 10.0.6
  • Remove unused TextOptions from App.xaml
  • Fix a bug during application launch