Korrektur-Flow + Freigaben-Auswahl + Schreibtest + Schnellwahl-Klartext
Ampel / ampel (push) Failing after 52s

Commander-Befunde (23.07. spaet):
- MANUELLE KORREKTUR (KONZEPT Schritt 5 endlich komplett): Metadaten-Seite
  hat jetzt Titelsuche ueber ALLE Quellen (GET /metadata/search) mit
  Poster-Kacheln; ein Klick uebernimmt den Treffer (POST /metadata/override)
  fuer Karte, Jobs UND merkt ihn sich 30 Tage per Disc-Fingerabdruck —
  dieselbe Disc wird beim naechsten Einlegen sofort richtig erkannt
- PC/NAS per Klick: SMB-Freigaben eines Rechners auflisten
  (GET /storage-mounts/shares via smbclient) statt //host/share raten
- Berechtigungs-PRUEFUNG beim Einhaengen: Schreibtest, Warnung bei
  nur-lesbaren Zielen (API + UI + Log)
- "Standard-Unterordner" verstaendlich gemacht: heisst jetzt "Schnellwahl
  beim Rippen" mit Erklaertext; kryptisches Basis-Feld raus
- Preview zeigt Poster; Fingerprint fuer Cache/Override vereinheitlicht
  (billiges Label+Groesse statt Mount-Titel)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-07-23 21:34:34 +02:00
parent 37711f87c1
commit 6b7d391737
9 changed files with 440 additions and 48 deletions
+28
View File
@@ -37,6 +37,34 @@ class OMDbClient:
self.api_key = get_settings().get("omdbApiKey") or settings.omdb_api_key
self.session = requests.Session()
def suche(self, title: str) -> list:
"""Roh-Kandidaten für die manuelle Korrektur (unscharfe s=-Suche)."""
if not self.api_key:
return []
try:
antwort = self.session.get(
OMDB_BASE_URL,
params={"apikey": self.api_key, "s": title, "r": "json"},
timeout=10,
).json()
except Exception:
return []
if antwort.get("Response") != "True":
return []
ergebnisse = []
for e in (antwort.get("Search") or [])[:5]:
poster = e.get("Poster", "")
ergebnisse.append({
"title": e.get("Title", ""),
"year": parse_year(e.get("Year", "")),
"poster": poster if poster != "N/A" else "",
"overview": "",
"type": "tv" if e.get("Type") == "series" else "movie",
"source": "omdb",
"id": e.get("imdbID", ""),
})
return ergebnisse
def lookup(self, title: str, year: Optional[int] = None) -> Optional[Dict]:
"""Sucht per Titel (t=), liefert normalisierte Metadaten oder None."""
if not self.api_key: