fix(windows): Dauerscan der Disc, aufblitzende Fenster, Docker-Einstellung uebernommen
Ampel / ampel (push) Successful in 1m30s
Ampel / ampel (push) Successful in 1m30s
Commander: „liest er die disc NOCHMAL ein das macht aber keinen sinn, wenn er
sie bereits erkannt hat. Außerdem öffnen sich nun immer irgendwelche fenster
ganz kurz im hintergrund."
## Beides war dieselbe Schleife
In der Disc-Wache stand:
except OSError:
continue
Damit blieb `bekannt[pfad]` ungesetzt, und im naechsten Durchlauf war
`vorher is None` — also wieder „Erststart, liegt schon eine Disc drin". **Ein
einziger fehlgeschlagener Lesevorgang loeste einen neuen Vor-Scan aus.**
Und der scheitert regelmaessig: Waehrend der Vor-Scan laeuft, haelt
makemkvcon das Laufwerk (gemessen: /devices braucht dann 14 s statt 5). Also
Scan haelt das Laufwerk -> Statusabfrage scheitert -> naechster Durchlauf
haelt es fuer den ersten -> neuer Scan. Eine Schleife, die sich selbst am
Leben haelt.
Und weil derselbe makemkvcon-Aufruf in `prescan.py` als EINZIGER kein
`creationflags=OHNE_FENSTER` hatte, blitzte bei jeder Runde eine Konsole auf.
Das war meine Zeile von heute Vormittag.
Die Entscheidung steckt jetzt in `disc_entscheidung()` — pure Funktion, also
ohne Laufwerk pruefbar. Zwei getrennte Fragen statt einer: Haben wir dieses
Laufwerk je gelesen, und was war zuletzt drin? Ein Fehlschlag beantwortet die
zweite nicht und darf die erste nicht zuruecksetzen.
Nachgemessen: Ein Tabwechsel loest KEINEN neuen Scan aus (8 Erkennungen
vorher, 8 nachher). Meine erste Zaehlung von „7 vs 8" war ein Messfehler —
zwei verschieden grosse Abfragefenster.
## Aus dem Docker-Betrieb uebernommen
`docker/worker/entrypoint.sh` setzt vor jedem Worker-Start zwei Dinge:
`app_Key` und `app_UpdateEnable`. Der Key war schon uebernommen, die zweite
nicht — auf dem Rechner des Commanders nachgesehen: NICHT gesetzt.
Das ist MakeMKVs Web-Kontakt; darueber holt es die Disc-Schluessel fuer
4K-UHD nach (Meldung 3338, auf Windows gemessen). „Fuer Windows umschreiben"
heisst hier: Registry statt settings.conf, DWORD statt Text — die
Nachbarwerte (`app_BackupDecrypted`) zeigen die Form.
Gesetzt wird NUR, was fehlt: Wer den Web-Kontakt bewusst abgeschaltet hat,
behaelt ihn abgeschaltet. Ein Waechter-Test vergleicht kuenftig die
`app_*`-Namen aus der entrypoint.sh gegen die Windows-Seite — sonst driften
die beiden Betriebe auseinander.
871 Tests gruen, ruff sauber.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
f0d39b4d04
commit
aeb3128a85
@@ -10,6 +10,7 @@ import subprocess
|
||||
from typing import Dict, List, Optional
|
||||
|
||||
from rippy import drives as _laufwerks_schicht
|
||||
from rippy.platform.winlauf import OHNE_FENSTER
|
||||
from rippy.rip.makemkv_aufruf import quelle as makemkv_quelle
|
||||
from rippy.rip.makemkv_aufruf import text_von
|
||||
from rippy.tools import katalog as werkzeug_katalog
|
||||
@@ -115,12 +116,14 @@ def disc_wurzel(device_path: str):
|
||||
ergebnis = subprocess.run(
|
||||
["mount", "-t", "udf", "-o", "ro", device_path, mountpoint],
|
||||
capture_output=True, text=True, timeout=30,
|
||||
creationflags=OHNE_FENSTER,
|
||||
)
|
||||
if ergebnis.returncode != 0:
|
||||
return None, lambda: None
|
||||
|
||||
def abhaengen():
|
||||
subprocess.run(["umount", mountpoint], capture_output=True, timeout=15)
|
||||
subprocess.run(["umount", mountpoint], capture_output=True, timeout=15,
|
||||
creationflags=OHNE_FENSTER)
|
||||
|
||||
return mountpoint, abhaengen
|
||||
|
||||
@@ -331,7 +334,8 @@ class PreScan:
|
||||
["cdparanoia", "-Q", device_path],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=10
|
||||
timeout=10,
|
||||
creationflags=OHNE_FENSTER,
|
||||
)
|
||||
for line in result.stdout.split('\n'):
|
||||
if 'track' in line.lower():
|
||||
@@ -369,7 +373,14 @@ class PreScan:
|
||||
result = subprocess.run(
|
||||
[makemkv, "-r", "--noscan", "--minlength=300", "info", makemkv_quelle(device_path)],
|
||||
capture_output=True,
|
||||
timeout=120 # binaer lesen — Begruendung in text_von
|
||||
timeout=120, # binaer lesen — Begruendung in text_von
|
||||
# OHNE_FENSTER: Sonst blitzt bei JEDER Disc-Erkennung
|
||||
# eine Konsole auf. Rippy laeuft als Fenster-Programm
|
||||
# ohne eigene Konsole — Windows legt fuer ein
|
||||
# Konsolenprogramm dann eine NEUE an, und die ist
|
||||
# sichtbar (Commander 29.08.2026: „nun oeffnen sich
|
||||
# immer irgendwelche fenster ganz kurz").
|
||||
creationflags=OHNE_FENSTER,
|
||||
)
|
||||
for line in text_von(result.stdout).split('\n'):
|
||||
if line.startswith('TINFO:'):
|
||||
|
||||
Reference in New Issue
Block a user