diff --git a/apps/tesm/pyproject.toml b/apps/tesm/pyproject.toml index e2a7b3c..dbec82f 100644 --- a/apps/tesm/pyproject.toml +++ b/apps/tesm/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "tesm" -version = "2.3.1" +version = "2.3.2" description = "TESM -- Verwaltung und Ueberwachung von PoE-Endgeraeten und Aruba-Switchen" requires-python = ">=3.11" dependencies = [ diff --git a/apps/tesm/src/tesm/blueprints/fileshare.py b/apps/tesm/src/tesm/blueprints/fileshare.py index 84fad52..b706e78 100644 --- a/apps/tesm/src/tesm/blueprints/fileshare.py +++ b/apps/tesm/src/tesm/blueprints/fileshare.py @@ -224,6 +224,9 @@ def save_form(token: str): if not zielordner.is_dir(): return {"error": f"Den Ordner '{ordner}' gibt es in dieser Freigabe nicht."}, 400 if wunschname: + # Eingegeben wird der Name ohne Endung; die kommt von hier. Wer + # sie mittippt, bekommt sie nicht doppelt -- und wer eine falsche + # tippt, bekommt trotzdem eine Datei, die sich oeffnen laesst. name = service.safe_filename(wunschname) if not name.lower().endswith(".pdf"): name += ".pdf" diff --git a/apps/tesm/src/tesm/services/fileshare.py b/apps/tesm/src/tesm/services/fileshare.py index 0f241eb..b1de9dd 100644 --- a/apps/tesm/src/tesm/services/fileshare.py +++ b/apps/tesm/src/tesm/services/fileshare.py @@ -548,6 +548,10 @@ def list_directory(mount: Mount, relative: str = "") -> dict[str, Any]: else: record["previewable"] = entry.suffix.lower() in PREVIEW_MIME record["preview_kind"] = preview_kind(entry.name) + # Getrennt, damit die Oberflaeche nur den Namen zum Bearbeiten + # gibt und die Endung danebenstellt. + record["stem"] = entry.stem + record["suffix"] = entry.suffix files.append(record) except OSError as exc: raise FileshareError(f"Verzeichnis nicht lesbar ({exc}).") from exc @@ -656,8 +660,26 @@ def make_directory(mount: Mount, relative: str, name: str) -> Path: def rename_entry(mount: Mount, relative: str, new_name: str) -> Path: + """Benennt um und behaelt die Endung der Datei. + + Eingegeben wird nur der Name ohne Endung. Eine Datei, die danach auf + ``.pdf.txt`` oder auf gar nichts endet, waere auf einer Windows-Freigabe + praktisch kaputt -- sie oeffnet sich nicht mehr mit dem richtigen + Programm. Verzeichnisse haben keine Endung; dort bleibt der Name, wie er + eingegeben wurde. + + Wer die Endung trotzdem mittippt, bekommt sie nicht doppelt. + """ path = resolve_path(mount, relative) - target = path.parent / safe_filename(new_name) + endung = path.suffix if path.is_file() else "" + gewuenscht = (new_name or "").strip() + if endung and gewuenscht.lower().endswith(endung.lower()): + gewuenscht = gewuenscht[: -len(endung)] + if not gewuenscht: + raise FileshareError("Der Name darf nicht leer sein.") + target = path.parent / safe_filename(gewuenscht + endung) + if target == path: + return path if target.exists(): raise FileshareError("Ein Eintrag mit diesem Namen existiert bereits.") path.rename(target) diff --git a/apps/tesm/src/tesm/templates/tesm/fileshare.html b/apps/tesm/src/tesm/templates/tesm/fileshare.html index c43220b..6cdd8f2 100644 --- a/apps/tesm/src/tesm/templates/tesm/fileshare.html +++ b/apps/tesm/src/tesm/templates/tesm/fileshare.html @@ -133,7 +133,8 @@ {% endif %}