From e4ab9f96dad9e2f449a22ffc659e10c9a9a817df Mon Sep 17 00:00:00 2001 From: Akamaru Date: Tue, 6 May 2025 19:45:38 +0200 Subject: [PATCH] Verbessere die Ausgabe von Preset-Informationen und aktualisiere die Log-Ausgabe. --- main.py | 169 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 125 insertions(+), 44 deletions(-) diff --git a/main.py b/main.py index f504778..ea315c3 100644 --- a/main.py +++ b/main.py @@ -1671,54 +1671,15 @@ class MainWindow(QMainWindow): 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): preset = self.get_current_preset() if not preset: self.cmd_preview.setText("Kein Preset ausgewählt.") return + + # Zeige Preset-Informationen in der Ausgabe an + self.show_preset_info(preset) + if self.config["use_local_ytdlp"]: ytdlp_path = os.path.join(get_base_path(), "bin", "yt-dlp.exe") if not os.path.exists(ytdlp_path): @@ -1776,8 +1737,37 @@ class MainWindow(QMainWindow): # Wenn ein eigener Pfad im Preset definiert ist, diesen verwenden custom_path = self.custom_path_input.text() or preset.get("custom_path", "") 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: output_path = os.path.join(output_dir, output_filename) cmd.extend(["-o", output_path]) @@ -1796,6 +1786,97 @@ class MainWindow(QMainWindow): command_string = " ".join(formatted_cmd) masked_command = mask_sensitive_data(command_string) 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): # Wenn bereits ein Download läuft und der Button als "Abbrechen" angezeigt wird