Verbessere die Ausgabe von Preset-Informationen und aktualisiere die Log-Ausgabe.

This commit is contained in:
Akamaru
2025-05-06 19:45:38 +02:00
parent e9a8e4cc4e
commit e4ab9f96da

169
main.py
View File

@@ -1671,54 +1671,15 @@ class MainWindow(QMainWindow):
self.update_cmd_preview() self.update_cmd_preview()
def get_output_filename(self, preset):
if preset.get("has_series_template", False):
template = preset.get("series_template", SERIES_TEMPLATE)
series = self.series_input.text() or preset.get("series", "")
season = self.season_input.text() or preset.get("season", "1")
episode = self.episode_input.text() or preset.get("episode", "1")
custom_path = self.custom_path_input.text() or preset.get("custom_path", "")
# Stelle sicher, dass der Pfad mit einem Trennzeichen endet, wenn er nicht leer ist
if custom_path and not custom_path.endswith("/") and not custom_path.endswith("\\"):
custom_path += "/" # Verwende / als universellen Pfadtrenner
output_name = template
output_name = output_name.replace("{series}", series)
output_name = output_name.replace("{season}", season)
output_name = output_name.replace("{episode}", episode)
# Entferne {path} Platzhalter, da custom_path jetzt als output_dir verwendet wird
output_name = output_name.replace("{path}", "")
# {extension} durch .%(ext)s ersetzen (auch rückwärtskompatibel)
output_name = output_name.replace("{extension}", ".%(ext)s")
# Falls jemand %(ext)s nicht im Template hat, ergänzen wir es am Ende
if "%(ext)s" not in output_name:
output_name += ".%(ext)s"
# Entferne doppelte Schrägstriche
while "//" in output_name:
output_name = output_name.replace("//", "/")
while "\\\\" in output_name:
output_name = output_name.replace("\\\\", "\\")
self.log_output.append("Ausgabedatei-Komponenten:")
self.log_output.append(f" Template: {template}")
self.log_output.append(f" Serie: {series}")
self.log_output.append(f" Staffel: {season}")
self.log_output.append(f" Folge: {episode}")
self.log_output.append(f" Eigener Pfad: {custom_path}")
self.log_output.append(f"Generierter Dateiname: {output_name}")
return output_name
# Debug-Ausgabe auch im Nicht-Serienfall
output_name = "%(title)s.%(ext)s"
# Kein custom_path mehr in output_name, da dies bereits als output_dir verwendet wird
self.log_output.append("Ausgabedatei-Komponenten:")
self.log_output.append(f" Template: {output_name}")
self.log_output.append(f" Eigener Pfad: {self.custom_path_input.text() or preset.get('custom_path', '')}")
self.log_output.append(f"Generierter Dateiname: {output_name}")
return output_name
def update_cmd_preview(self): def update_cmd_preview(self):
preset = self.get_current_preset() preset = self.get_current_preset()
if not preset: if not preset:
self.cmd_preview.setText("Kein Preset ausgewählt.") self.cmd_preview.setText("Kein Preset ausgewählt.")
return return
# Zeige Preset-Informationen in der Ausgabe an
self.show_preset_info(preset)
if self.config["use_local_ytdlp"]: if self.config["use_local_ytdlp"]:
ytdlp_path = os.path.join(get_base_path(), "bin", "yt-dlp.exe") ytdlp_path = os.path.join(get_base_path(), "bin", "yt-dlp.exe")
if not os.path.exists(ytdlp_path): if not os.path.exists(ytdlp_path):
@@ -1776,8 +1737,37 @@ class MainWindow(QMainWindow):
# Wenn ein eigener Pfad im Preset definiert ist, diesen verwenden # Wenn ein eigener Pfad im Preset definiert ist, diesen verwenden
custom_path = self.custom_path_input.text() or preset.get("custom_path", "") custom_path = self.custom_path_input.text() or preset.get("custom_path", "")
output_dir = custom_path if custom_path else self.config["output_dir"] output_dir = custom_path if custom_path else self.config["output_dir"]
# Generiere den Dateinamen ohne Debug-Ausgaben
if preset.get("has_series_template", False):
template = preset.get("series_template", SERIES_TEMPLATE)
series = self.series_input.text() or preset.get("series", "")
season = self.season_input.text() or preset.get("season", "1")
episode = self.episode_input.text() or preset.get("episode", "1")
custom_path = self.custom_path_input.text() or preset.get("custom_path", "")
# Stelle sicher, dass der Pfad mit einem Trennzeichen endet, wenn er nicht leer ist
if custom_path and not custom_path.endswith("/") and not custom_path.endswith("\\"):
custom_path += "/" # Verwende / als universellen Pfadtrenner
output_name = template
output_name = output_name.replace("{series}", series)
output_name = output_name.replace("{season}", season)
output_name = output_name.replace("{episode}", episode)
# Entferne {path} Platzhalter, da custom_path jetzt als output_dir verwendet wird
output_name = output_name.replace("{path}", "")
# {extension} durch .%(ext)s ersetzen (auch rückwärtskompatibel)
output_name = output_name.replace("{extension}", ".%(ext)s")
# Falls jemand %(ext)s nicht im Template hat, ergänzen wir es am Ende
if "%(ext)s" not in output_name:
output_name += ".%(ext)s"
# Entferne doppelte Schrägstriche
while "//" in output_name:
output_name = output_name.replace("//", "/")
while "\\\\" in output_name:
output_name = output_name.replace("\\\\", "\\")
output_filename = output_name
else:
output_filename = "%(title)s.%(ext)s"
output_filename = self.get_output_filename(preset)
if output_dir: if output_dir:
output_path = os.path.join(output_dir, output_filename) output_path = os.path.join(output_dir, output_filename)
cmd.extend(["-o", output_path]) cmd.extend(["-o", output_path])
@@ -1796,6 +1786,97 @@ class MainWindow(QMainWindow):
command_string = " ".join(formatted_cmd) command_string = " ".join(formatted_cmd)
masked_command = mask_sensitive_data(command_string) masked_command = mask_sensitive_data(command_string)
self.cmd_preview.setText(masked_command) self.cmd_preview.setText(masked_command)
def show_preset_info(self, preset):
"""Zeigt Informationen zum ausgewählten Preset in der Ausgabe an."""
self.log_output.clear()
self.log_output.append(f"Preset: {preset['name']}")
if preset.get("description"):
self.log_output.append(f"Beschreibung: {preset['description']}")
# Ausgabepfad
custom_path = self.custom_path_input.text() or preset.get("custom_path", "")
output_dir = custom_path if custom_path else self.config["output_dir"]
self.log_output.append(f"Ausgabeverzeichnis: {output_dir or '(Standard)'}")
# Serien-Informationen
if preset.get("has_series_template", False):
self.log_output.append("\nSerien-Einstellungen:")
template = preset.get("series_template", SERIES_TEMPLATE)
series = self.series_input.text() or preset.get("series", "")
season = self.season_input.text() or preset.get("season", "1")
episode = self.episode_input.text() or preset.get("episode", "1")
self.log_output.append(f" Template: {template}")
self.log_output.append(f" Serie: {series}")
self.log_output.append(f" Staffel: {season}")
self.log_output.append(f" Folge: {episode}")
# Generiere Beispiel-Dateinamen
output_name = template
output_name = output_name.replace("{series}", series)
output_name = output_name.replace("{season}", season)
output_name = output_name.replace("{episode}", episode)
output_name = output_name.replace("{path}", "")
output_name = output_name.replace("{extension}", ".mp4")
self.log_output.append(f" Beispiel-Dateiname: {output_name}")
# Preset-Argumente
self.log_output.append("\nArgumente:")
self.log_output.append(f" {preset['args']}")
# Besondere Eigenschaften
special_features = []
if preset.get("is_audio", False):
special_features.append("Audio-Preset")
if preset.get("username"):
special_features.append("Authentifizierung")
if preset.get("referer"):
special_features.append("Referer")
if preset.get("hls_ffmpeg", False):
special_features.append("HLS-ffmpeg")
if preset.get("sublang") or preset.get("embed_subs") or preset.get("subformat"):
special_features.append("Untertitel")
if preset.get("use_format_selection", False):
special_features.append("Format-Auswahl")
if preset.get("use_dual_audio", False):
special_features.append("Dual-Audio")
if special_features:
self.log_output.append("\nBesondere Eigenschaften:")
self.log_output.append(f" {', '.join(special_features)}")
def get_output_filename(self, preset):
"""Generiert den Ausgabedateinamen basierend auf dem Preset und den aktuellen Einstellungen."""
if preset.get("has_series_template", False):
template = preset.get("series_template", SERIES_TEMPLATE)
series = self.series_input.text() or preset.get("series", "")
season = self.season_input.text() or preset.get("season", "1")
episode = self.episode_input.text() or preset.get("episode", "1")
custom_path = self.custom_path_input.text() or preset.get("custom_path", "")
# Stelle sicher, dass der Pfad mit einem Trennzeichen endet, wenn er nicht leer ist
if custom_path and not custom_path.endswith("/") and not custom_path.endswith("\\"):
custom_path += "/" # Verwende / als universellen Pfadtrenner
output_name = template
output_name = output_name.replace("{series}", series)
output_name = output_name.replace("{season}", season)
output_name = output_name.replace("{episode}", episode)
# Entferne {path} Platzhalter, da custom_path jetzt als output_dir verwendet wird
output_name = output_name.replace("{path}", "")
# {extension} durch .%(ext)s ersetzen (auch rückwärtskompatibel)
output_name = output_name.replace("{extension}", ".%(ext)s")
# Falls jemand %(ext)s nicht im Template hat, ergänzen wir es am Ende
if "%(ext)s" not in output_name:
output_name += ".%(ext)s"
# Entferne doppelte Schrägstriche
while "//" in output_name:
output_name = output_name.replace("//", "/")
while "\\\\" in output_name:
output_name = output_name.replace("\\\\", "\\")
return output_name
# Im Nicht-Serienfall einfach den Standardnamen zurückgeben
return "%(title)s.%(ext)s"
def start_download(self): def start_download(self):
# Wenn bereits ein Download läuft und der Button als "Abbrechen" angezeigt wird # Wenn bereits ein Download läuft und der Button als "Abbrechen" angezeigt wird