Skip to content

v3.0.3

Choose a tag to compare

@ScriptedBits ScriptedBits released this 06 Feb 14:32
· 8 commits to main since this release
e7fb6ca

GameVault-Relocator v3.0.3 Release: Major Upgrade to PyQt6 with Enhanced Flexibility and Reliability

Hello everyone!

I'm excited to announce the release of GameVault-Relocator v3.0.3 — a significant step forward from the 2.x series (last stable: v2.1.6).

This version brings a full migration to PyQt6, many quality-of-life improvements, greater flexibility in how you choose destinations, better symlink scanning, and a more robust overall experience.

If you're on 2.x, the built-in update checker should prompt you automatically (Windows users: it handles .exe downloads and replacement cleanly).
Manual download → Releases page

Linux/macOS users: see the updated instructions in the Help popup or README.

🚀 New Features

  • Flexible Destination Selection with Optional Structure Preservation

    • New checkbox: "Preserve source folder structure" (checked by default)
      → When enabled: select a root drive/folder from dropdown → tool recreates the full relative path on destination
      (e.g. E:\LaunchBox\Games\Sony PS2 → F:\LaunchBox\Games\Sony PS2)
    • When disabled: manually select the exact destination folder → full control, no enforced structure
      → Addresses user requests for more flexible relocation workflows
  • Drive Selection Combo Box

    • Quick dropdown of detected local, fixed, and network drives
    • Cleaner list: excludes most removable/non-fixed drives
  • Improved Preview (Dry Run) Mode

    • Generates detailed preview log with file paths and estimated total size in GB
    • Robocopy preview fallback → switches to native Python counting when preview is active
  • Upgraded Symlink/Junction Scanner

    • Prefers fast system commands (dir /AL /S on Windows, find -type l on Unix)
    • Aggressive exclusion of noisy/system paths (WindowsApps, $Recycle.Bin, /proc, /sys, etc.)
    • Better distinction between symlinks and junctions on Windows
    • Real-time result updates + colored completion status
    • Safe Python os.walk fallback when needed
  • Update System Polish

    • Precise version comparison via packaging library
    • Shows days since your version was released in prompt
    • Cleaner download/cancel experience

📈 Improvements

  • UI/UX Modernization (PyQt6 migration)

    • Smoother rendering, better high-DPI support, future-proofing
    • Consistent dark theme
    • Fixed button sizes, better alignment, improved Help popup examples
    • Semi-transparent overlay on background image in About dialog
  • Performance & Reliability

    • Robocopy /MT threads now capped dynamically (min(cores, 32))
    • File move retry logic (5 attempts) for locked/in-use files
    • More robust empty directory cleanup with fallback commands
    • Timestamped per-operation logs
    • Better path quoting / special character handling
  • Cross-Platform

    • Improved macOS/Linux symlink creation & drive detection
    • More accurate rsync progress monitoring on non-Windows

🐛 Bug Fixes

  • Symlink scanner: reduced false positives, better error handling for inaccessible paths
  • Robocopy log parsing: fixed encoding issues during live progress
  • File size calculation: handles missing/inaccessible files gracefully
  • Source folder removal: fallback rmdir /S /Q when shutil.rmtree fails on Windows
  • Update downloader: proper cancellation handling
  • UI: progress label clears correctly, scan bar hides reliably
  • General: more consistent exception logging with tracebacks

⚠️ Notes / Breaking Changes

  • Requires PyQt6 if running from source (pre-built Windows .exe is self-contained)
  • Destination behavior now optional (structure preservation is toggleable) — double-check the checkbox if you want the old 2.x behavior
  • Preview mode no longer attempts Robocopy (falls back to Python for accurate simulation)
  • Always back up important libraries before relocating!

📊 Expected / Observed Improvements from Testing

  • Platforms tested: Windows 10/11, Ubuntu 24.04, macOS Sonoma (development VMs + native runs)
  • Large library relocation: Handled (and expected to handle reliably) game collections >500 GB with full directory structure and symlink preservation
  • Symlink scanning speed (large drives, ~400k–800k items):
    • v2.x: full Python walk → often 4–7+ minutes when many system folders present
    • v3.x: fast system command + exclusions → expected 0.8–2.5 minutes in most realistic cases (~2–5× faster)
    • Fallback Python walk still improved thanks to early filtering
  • File transfer phase (~12k–20k files, 400–700 GB):
    • Native Python: ~45–140 seconds baseline (highly disk-dependent)
    • Robocopy /MT enabled (Windows): expected 3–10× faster transfer in real-world scenarios (especially many small files or SSD→HDD)
  • Other gains:
    • Far fewer noisy/irrelevant symlink results
    • More reliable empty folder cleanup
    • Smoother UI during long operations (PyQt6)

These estimates come from:

  • code path analysis of the optimizations
  • small-to-medium real runs during development
  • rough simulation of traversal/move workloads

Real-world results vary depending on hardware (HDD/SSD/NVMe), file count vs size, antivirus, network drives, etc.
→ If you run large operations, please share your before/after timings in Discussions or Issues — it helps validate and improve future releases!

Thank you to everyone who reported issues and gave feedback — this release is much stronger because of you.

Star the repo if it's useful, and happy game-library organizing! 🎮

Shout outs to the beta testers and to @Welz and @Buffalo716 for some of the new features!

— ScriptedBits
GitHub Repo
Download v3.0.3

Full Changelog: v2.1.6...v3.0.3