Add no-tkinter Windows fallback

This commit is contained in:
Melbar
2026-05-07 18:05:16 +02:00
parent 0a8741ea87
commit 5c4cc5b477
2 changed files with 46 additions and 2 deletions
+43 -2
View File
@@ -712,8 +712,7 @@ class MezzanineApp:
def run_ui() -> int:
if tk is None:
print("Tkinter ist nicht verfuegbar. Bitte Datei per CLI uebergeben.")
return 1
return run_no_tk_fallback()
root = tk.Tk()
app = MezzanineApp(root)
if len(sys.argv) > 1 and os.path.isfile(sys.argv[1]):
@@ -722,6 +721,48 @@ def run_ui() -> int:
return 0
def run_no_tk_fallback() -> int:
if len(sys.argv) > 1 and os.path.isfile(sys.argv[1]):
print("Tkinter ist nicht verfuegbar. Starte Drag-and-Drop-Datei direkt im CLI-Modus.")
return run_cli(sys.argv[1], OUTPUT_BASE_DIR)
print("Tkinter ist nicht verfuegbar. Oeffne Windows-Dateidialoge als Fallback.")
selected = choose_paths_with_powershell()
if selected is None:
print("Keine Quelle ausgewaehlt.")
return 1
input_file, output_dir = selected
return run_cli(input_file, output_dir)
def choose_paths_with_powershell() -> tuple[str, str] | None:
script = r"""
Add-Type -AssemblyName System.Windows.Forms
$open = New-Object System.Windows.Forms.OpenFileDialog
$open.Title = 'Basis-Video auswaehlen'
$open.Filter = 'Video-Dateien (*.mov;*.mxf;*.mp4;*.mkv;*.ts;*.m2ts;*.vob)|*.mov;*.mxf;*.mp4;*.mkv;*.ts;*.m2ts;*.vob|Alle Dateien (*.*)|*.*'
if ($open.ShowDialog() -ne [System.Windows.Forms.DialogResult]::OK) { exit 2 }
$folder = New-Object System.Windows.Forms.FolderBrowserDialog
$folder.Description = 'Ausgabeordner auswaehlen'
$folder.SelectedPath = 'H:\VOD'
if ($folder.ShowDialog() -ne [System.Windows.Forms.DialogResult]::OK) { exit 2 }
Write-Output $open.FileName
Write-Output $folder.SelectedPath
"""
result = subprocess.run(
["powershell", "-NoProfile", "-STA", "-Command", script],
capture_output=True,
text=True,
check=False,
)
if result.returncode != 0:
return None
lines = [line.strip() for line in result.stdout.splitlines() if line.strip()]
if len(lines) < 2:
return None
return lines[0], lines[1]
def main() -> int:
if len(sys.argv) > 2 and sys.argv[1] == "--cli":
return run_cli(sys.argv[2], OUTPUT_BASE_DIR)