Skip to content

Releases: LRGEX/Compress

v1.7.1

Choose a tag to compare

@LRG4YOU LRG4YOU released this 12 Aug 17:24

🔧 Fixes

  • AES-256 encrypted ZIP detection: 7-Zip-created encrypted ZIPs now correctly
    detected via CompressionMethod::AES + PasswordRequired error (the zip crate's
    encrypted() flag misses AES-256). Password prompt appears for these archives.
  • Encrypted ZIP extraction: pre-scan loop now uses password when summing file
    sizes (was hitting encrypted entries first and erroring before extraction started).
  • Progress watchdog: corrupt archives that cause the decoder to stall now show
    "Archive appears corrupt" after 15s instead of hanging forever.
  • RAR4 support: confirmed working (tested with real RAR4 archive from unrar.rs test data).
  • Compiler warnings: reduced from 27 to 15 via cargo fix.

Download LRGEX-Compress

v1.7.0

Choose a tag to compare

@LRG4YOU LRG4YOU released this 12 Aug 16:32

✨ New Features

  • Integrity checksum: .zgx archives now include zstd XXHash64 checksum verification on extract.
    Detects storage corruption, bad transfers, and bit rot before you lose data. Zero measurable
    speed cost (~6ms per 256MB — within run-to-run noise).
  • RAR extraction rewritten in pure Rust: replaces the vendored C unrar library with
    unrar-rs (pure Rust, no C dependencies). Adds:
    • Symbolic link preservation (asks admin once, recreates links exactly)
    • mtime + ctime restore on extracted files
    • Windows attributes restore (ReadOnly, Hidden, etc.)
    • Instant mid-file cancel (custom Writer aborts on cancel flag)
    • Multi-volume support (part1.rar, part2.rar, ...)
  • 7z metadata restore: extracted 7z files now preserve mtime, ctime (when carried),
    and Windows attributes.
  • 7z symlink support: symlinks stored as reparse points in .7z archives are now
    detected and recreated (with path-traversal guard for security).
  • Instant feedback on click: the progress window now shows an animated sweep the
    moment you click Compress or Extract — no more frozen 0% bar while the engine spins up.
  • Encrypted archive support: password-protected RAR, 7z, and ZIP archives now
    prompt for a password. GUI shows a masked password dialog with auto-focus.
    CLI: -p <password> flag works in any position.
    Example: lrgex-compress -x -p secret archive.rar

🔧 Fixes

  • 7z overwrite+cancel data loss (critical): extracting a .7z over an existing file,
    then cancelling, no longer destroys the user's original file. All 7z extraction now
    uses temp-then-rename (same safe pattern as .zgx and .zip).
  • ctime clobber on every extract (critical): every extracted file was getting
    creation time set to January 1, 1970. The bug was in apply_times_handle
    secs_to_filetime(0) is NOT a zero FILETIME (it's 1601+epoch_offset = 1970-01-01).
    The "NULL if zero" guard never fired. Fixed: branch on the INPUT value, not the
    converted FILETIME.
  • 7z mtime lost: 7z extraction was giving every file NOW() as last-modified time.
    Now reads entry.last_modified_date() from sevenz-rust2 and restores it.
  • Checksum failure silently swallowed: include_checksum(true) was discarding
    the Result with let _ =. Now propagates via .expect() — a checksum failure
    surfaces as an error instead of silently shipping without integrity.
  • Test harness pipe deadlock: integration tests could hang when the spawned exe
    produced >64KB of stdout (pipe buffer fill). Fixed with Stdio::null().

🧪 Quality

  • 49 automated tests covering every format, every metadata field, cancel,
    multi-volume, crash-safety, and overwrite+cancel data-loss scenarios.
    • No #[ignore]d tests hiding gaps — every test runs automatically.
    • RAR + 7z tests auto-detect external tools (WinRAR / 7-Zip) and run when present.
  • Vendored C unrar crate removed (210KB of C source). RAR extraction is 100% pure Rust.
  • License: switched from MIT to GPL-3.0-or-later (unrar-rs is GPL-3.0 + UnRAR restriction).

⚠️ Known Limitations

  • 7z symlinks: requires Administrator or Developer Mode to create symlinks on Windows.
    Without elevation, symlinks in .7z archives are skipped silently.
  • zip ctime: the ZIP format has no creation time field — cannot be preserved.
  • 7z ctime: 7-Zip does not store creation time by default (only with -mtc=on).
    Restored when present, absent when not.
  • RAR4: unrar-rs claims support but could not be tested (WinRAR 7.23 creates RAR5 only).
  • Encrypted archives: password-protected RAR, 7z, and ZIP are supported via GUI
    prompt or -p <password> CLI flag. However, the GUI window stays open briefly after
    extraction completes (auto-close delay). Scripted/headless use with -p blocks until
    the window is closed manually.

Download LRGEX-Compress

v1.6.0

Choose a tag to compare

@LRG4YOU LRG4YOU released this 10 Aug 15:07

✨ New Features

  • 7z extraction: .7z archives now supported (LZMA2, pure Rust)
    • Single-volume .7z — instant extraction with progress
    • Multi-volume .7z.001/.002/... — right-click .001 or .7z to extract
    • Per-chunk cancel (stops mid-file, not just between files)
    • Overwrite confirmation (header-only read, no decompression needed)
    • Path-traversal guard (zip-slip protection)
    • Right-click .7z and .001 → LRGEX → Extract

🔧 Fixes

  • Instant RAR cancel: Cancel now stops RAR extraction mid-file (within 100ms)
    via UCM_PROCESSDATA callback abort — no more waiting for the current file to finish
  • Clean archive names: video.mp4video.zgx (extension stripped)
    • Folders unchanged (myfoldermyfolder.zgx)
    • Dotfiles preserved (.git.git.zgx)

Download LRGEX-Compress

v1.5.3

Choose a tag to compare

@LRG4YOU LRG4YOU released this 10 Aug 08:19

✨ New Features

  • Extract Cancel: Cancel button now works during extraction (all formats)
    • .zgx/.zip: cancel mid-file (byte-level)
    • .rar: cancel between files (C library limitation)
    • Split: cancel during SHA256 verification
    • All formats: shows "Cancelled" (amber) + exits cleanly
  • Split Compress: multi-volume .zgx archives
    • Right-click → LRGEX → Split Compress
    • Per-part SHA256 trailers for integrity
    • Missing parts detected upfront with clear message

🔧 Fixes

  • Auto-update elevation: detects admin/UAC-disabled correctly (is_process_elevated)
  • Update throttle: once per day (prevents 20s hangs on every launch)
  • Declined update: 30-day expiry (re-asks after 30 days)
  • GUI failure state: shows actual error message + Close button
  • Exit code: non-zero on failure/cancel
  • Progress bar stops animating on Failed
  • Version badge moved to top-right (no overlap with buttons)
  • Window fixed size (cannot resize)
  • Friendly error messages for update failures
  • /SILENT shows progress during update

Download LRGEX-Compress

v1.5.2

Choose a tag to compare

@LRG4YOU LRG4YOU released this 10 Aug 03:09

🔧 Fixes

  • Auto-update now works for Program Files installs with UAC disabled (detects elevation, launches directly instead of failing on "runas")
  • Double-click exe shows help instead of silent exit
  • PATH changes broadcast immediately (no reboot needed)
  • Friendly error messages for update failures
  • Removed unnecessary "Signature verified" dialog
  • Installer shows progress during update (/SILENT instead of /VERYSILENT)
  • WM_SETTINGCHANGE broadcast for PATH
  • Choco validExitCodes includes 3010
  • Fixed stale doc comments in update.rs

v1.5.1

Choose a tag to compare

@LRG4YOU LRG4YOU released this 09 Aug 13:23

✨ New Feature: Split Compress

Right-click any folder → LRGEX → Split Compress

  • Choose segment size in MB (quick picks: 50, 100, 700, 4G)
  • Produces MyFolder.part001.zgx, .part002.zgx, etc.
  • Each part has a SHA256 trailer for integrity verification
  • Extract ANY part → auto-detects and extracts the full archive
  • Corrupt part → clear error naming which part to redownload
  • CLI: --split [--size <MB>] <folder>

🔧 Fixes

  • Auto-update fix: write-lock released before launching installer (fixes "process cannot access the file" on some systems)
  • Overwrite confirmation prompts added for both compression and extraction
  • Partial files cleaned up if extraction fails or is cancelled
  • Symlink targets validated inside archives before extraction
  • Read-only files no longer block overwrite (atomic rename clears the attribute)
  • Extraction continues past locked files instead of aborting
  • Multi-volume RAR crash fixed (unrar callback)
  • Crash handler added (VEH writes backtrace to crash-log.txt — no more silent crashes)
  • --help flag added
  • "Don't ask again" for declined updates (per-version skip)
  • Temp files use unique names to prevent collisions between same-name files
  • Archive bit and other Windows attributes preserved exactly on round-trip

🔒 Security

  • Auto-update works for all install types (per-user, Program Files, choco, GitHub)
  • Truncation check allows 64KB slack for zstd/tar trailing buffers
  • Part discovery uses globbing (survives user renaming of parts)
  • Contiguity check: missing middle part detected before extraction
  • MAX_PARTS lowered to 1000 (bounds resource usage)

v1.4.4

Choose a tag to compare

@LRG4YOU LRG4YOU released this 08 Aug 10:53

🔧 Fixes

  • Software renderer only (removes femtovg/OpenGL) — fixes no-UI on VMs without GPU
  • Uninstall icon + installer version info (cosmetic)

v1.4.3

Choose a tag to compare

@LRG4YOU LRG4YOU released this 08 Aug 10:05

LRGEX Compress 1.4.3

v1.4.2

Choose a tag to compare

@LRG4YOU LRG4YOU released this 08 Aug 06:40

🔧 Machine-Wide Install Support (Chocolatey)

  • Installer now uses {autopf} + HKA (Inno Setup dual-mode). Installs per-user
    (no admin) OR machine-wide (admin/choco) from the SAME binary.
  • Chocolatey passes /ALLUSERS for machine-wide install to %ProgramFiles%.
  • Portable download runs per-user to %LOCALAPPDATA% as before.
  • All registry keys use HKA → HKLM when admin, HKCU when per-user.
  • Added chocolateyuninstall.ps1 that calls the Inno uninstaller.
  • Added softwareName to chocolateyinstall.ps1 for upgrade/uninstall detection.

v1.4.1

Choose a tag to compare

@LRG4YOU LRG4YOU released this 07 Aug 02:01

🛡️ Data Integrity — Full Metadata Preservation

LRGEX Compress now preserves your files exactly across a compress → extract round-trip.
Whatever goes into the archive comes out identical — no more "every extracted file shows today's date."

  • LastWriteTime (mtime) preserved on every file and folder — sort-by-date, build systems, sync tools, and incremental backups all keep working correctly.
  • CreationTime (ctime) preserved — the original creation date is restored, not lost.
  • Windows attributes preserved — Hidden, Read-only, System, and Archive flags survive the round-trip. A hidden file extracts hidden; a read-only file extracts read-only.
  • Symbolic links / junctions preserved — links recreate as links. On Windows, creating a link needs Administrator or Developer Mode; LRGEX asks once ("allow admin?") and, if yes, re-launches the extraction elevated to recreate every link exactly. If you decline, links degrade gracefully (never aborts the whole extraction).
  • Directory timestamps restored in a final pass — so writing children into a folder doesn't overwrite the folder's original mtime.
    NTFS alternate data streams are not supported (rarely used; not planned).

⚡ Performance — Extract & Compress Wins

  • Metadata sidecar (.lrgex/meta.bin): one small packed blob at the front of the
    archive replaces 11k+ per-entry metadata headers on big folders. Both compress and
    extract handle roughly half as many tar entries now. Old v1.4.0 archives still read
    correctly via the per-entry fallback.
  • One-syscall metadata restore (SetFileInformationByHandle): mtime + ctime +
    attributes set in a single call on the already-open file handle — no per-file re-open.
  • Direct 4 MB chunked writes on large-file extract (no redundant BufWriter copy).
  • Cache-served metadata on compress walk (DirEntry::metadata() instead of a fresh
    CreateFile per file) — saves thousands of syscalls on big folders.
  • Removed the redundant 4 MB BufWriter on compress output — zstd already emits
    good-sized blocks; the buffer was a pure memcpy of every compressed byte.
  • Tuned zstd multithreadingJobSize(16MB) + OverlapSizeLog(0) at level 1,
    fewer thread handoffs.
  • Dedicated oversubscribed write pool (3× core count) for extraction writes —
    correct sizing for workers that block in CreateFile and Defender scans.

🐞 Fixes

  • Multi-select coordinator hardened: handles WAIT_ABANDONED (previous instance
    crashed holding the mutex) and stale coordinator-PID lockfiles — a second rapid launch
    can no longer silently no-op.
  • Round-trip verified lossless: mtime/ctime/Hidden/ReadOnly/System, Unicode names,
    deeply nested paths, and a 3000-file stress batch (SHA256-checked).

🔒 Security Hardening

  • Signed manifest (detached latest.json.sig): the auto-update manifest is now
    cryptographically signed with Ed25519, preventing a compromised server from injecting
    a fake version or download URL.
  • Download size cap (100 MB): the updater rejects files exceeding 100 MB, preventing
    memory exhaustion from a poisoned manifest pointing at a huge file.
  • Update-channel logging: failed update checks now write to update.log in the
    install folder, so silent update-channel failures are observable.
  • GitHub release asset verification: deploy.ps1 now size-verifies the GitHub
    release asset via the API, not just the exit code.
  • Path-length guard: right-clicking a file with a path longer than 247 characters
    shows a clear error instead of a confusing "not found".
  • Slint attribution: added "Made with Slint" badge (Slint Royalty-free License §2).