From c140fdfe989afd7f70af3ff8700d3546e764d2f8 Mon Sep 17 00:00:00 2001 From: Dusk-92 Date: Thu, 3 Sep 2026 21:31:20 +0200 Subject: [PATCH] Clean obsolete MPQ fallback caches --- remote_packages.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/remote_packages.py b/remote_packages.py index 481e740..96732cf 100644 --- a/remote_packages.py +++ b/remote_packages.py @@ -277,6 +277,19 @@ def _package_cache_dir(target_dir, package_id): ) +def remove_package_cache(target_dir, package_id): + """Remove one tool-owned package cache without touching installed files.""" + cache_dir = _package_cache_dir(target_dir, package_id) + if os.path.isdir(cache_dir): + shutil.rmtree(cache_dir, ignore_errors=True) + + parent = os.path.dirname(cache_dir) + try: + os.rmdir(parent) + except OSError: + pass + + def _safe_cache_filename(filename): if not isinstance(filename, str) or not filename: raise RemotePackageError("Invalid package-cache filename.") @@ -1770,6 +1783,21 @@ def managed_mod_is_current(target_dir, mod_id, revision): return str(installed_revision) == str(revision) +def managed_mpq_is_usable(target_dir, mod_id): + """True when a managed single-file MPQ still has a valid MPQ header.""" + if not managed_mod_is_installed(target_dir, mod_id): + return False + files = _load_managed_manifest(target_dir, mod_id) + if len(files) != 1: + return False + path = os.path.join(target_dir, files[0]) + try: + _verify_mpq(path) + return True + except RemotePackageError: + return False + + def managed_mpq_is_current(target_dir, mod_id, revision): """Cheap integrity check for an already installed managed MPQ.""" if not managed_mod_is_current(target_dir, mod_id, revision):