diff --git a/backend/converter.py b/backend/converter.py index 1ae989b..08c3d09 100644 --- a/backend/converter.py +++ b/backend/converter.py @@ -6,6 +6,7 @@ Runs on the Proxmox host (srv2) where qemu-img, 7z, unzip, tar are available. from __future__ import annotations +import logging import os import re import shutil @@ -17,6 +18,8 @@ from typing import Optional STAGING_IN = Path("/mnt/converter/in") STAGING_OUT = Path("/mnt/converter/out") +logger = logging.getLogger("backend.converter") + DISK_EXTENSIONS = {".vmdk", ".qcow2", ".qcow", ".img", ".raw", ".vhd", ".vhdx"} ARCHIVE_EXTENSIONS = {".7z", ".zip", ".rar", ".tar.gz", ".tgz", ".tar", ".gz", ".bz2", ".xz"} @@ -77,6 +80,16 @@ def extract_if_needed(filename: str) -> Path: stem = stem[:-len(e)] break + # If already extracted, skip re-extraction + expected_dir = STAGING_IN / stem + if expected_dir.is_dir() and any( + f.suffix.lower() in DISK_EXTENSIONS + for f in expected_dir.rglob("*") + if f.is_file() + ): + logger.info("Already extracted: %s", expected_dir) + return expected_dir + # Snapshot STAGING_IN before extraction before = set(STAGING_IN.iterdir()) if STAGING_IN.exists() else set()