diff --git a/config.py b/config.py
index 40cb088..16172c1 100644
--- a/config.py
+++ b/config.py
@@ -51,11 +51,7 @@ DEFAULT_CONFIG = {
"ignore_config": False,
"remux_mkv": False,
"embed_metadata": False,
- "use_ffmpeg_location": False,
- "cookies_from_browser": {
- "enabled": False,
- "browser": "chrome"
- }
+ "use_ffmpeg_location": False
},
"hide_default_presets": False,
"enable_adn_tab": False,
diff --git a/dialogs.py b/dialogs.py
index faeaee4..de06f77 100644
--- a/dialogs.py
+++ b/dialogs.py
@@ -4,10 +4,10 @@ Dialog-Klassen für den Video Download Helper
"""
import os
import subprocess
-from PyQt5.QtWidgets import (QDialog, QVBoxLayout, QFormLayout, QLineEdit, QTextEdit,
- QPushButton, QComboBox, QCheckBox, QTabWidget, QWidget,
- QHBoxLayout, QGroupBox, QLabel, QDialogButtonBox,
- QFileDialog, QMessageBox)
+from PyQt5.QtWidgets import (QDialog, QVBoxLayout, QFormLayout, QLineEdit, QTextEdit,
+ QPushButton, QComboBox, QCheckBox, QTabWidget, QWidget,
+ QHBoxLayout, QGroupBox, QLabel, QDialogButtonBox,
+ QFileDialog, QMessageBox, QRadioButton, QButtonGroup)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon
from config import get_base_path, SERIES_TEMPLATE
@@ -148,27 +148,89 @@ class PresetDialog(QDialog):
# Tab 4: Authentifizierung
auth_tab = QWidget()
- auth_layout = QFormLayout()
-
- # Login-Felder
+ auth_layout = QVBoxLayout()
+
+ # Radio-Button-Gruppe für Authentifizierungsmethode
+ auth_method_label = QLabel("Authentifizierungsmethode:")
+ auth_layout.addWidget(auth_method_label)
+
+ self.auth_button_group = QButtonGroup()
+ self.auth_none_radio = QRadioButton("Keine Authentifizierung")
+ self.auth_userpass_radio = QRadioButton("Username/Passwort")
+ self.auth_cookies_radio = QRadioButton("Cookies vom Browser")
+
+ self.auth_button_group.addButton(self.auth_none_radio, 0)
+ self.auth_button_group.addButton(self.auth_userpass_radio, 1)
+ self.auth_button_group.addButton(self.auth_cookies_radio, 2)
+
+ auth_layout.addWidget(self.auth_none_radio)
+ auth_layout.addWidget(self.auth_userpass_radio)
+ auth_layout.addWidget(self.auth_cookies_radio)
+
+ # Username/Passwort-Gruppe
+ self.userpass_group = QGroupBox("Username/Passwort")
+ userpass_layout = QFormLayout()
+
self.username_edit = QLineEdit(self.preset_data.get("username", ""))
- self.username_edit.setPlaceholderText("Optional: Benutzername für Login (-u)")
- auth_layout.addRow("Benutzername:", self.username_edit)
-
+ self.username_edit.setPlaceholderText("Benutzername für Login (-u)")
+ userpass_layout.addRow("Benutzername:", self.username_edit)
+
pw_hbox = QHBoxLayout()
self.password_edit = QLineEdit(self.preset_data.get("password", ""))
self.password_edit.setEchoMode(QLineEdit.Password)
- self.password_edit.setPlaceholderText("Optional: Passwort für Login (-p)")
+ self.password_edit.setPlaceholderText("Passwort für Login (-p)")
self.show_pw_cb = QCheckBox("Passwort anzeigen")
self.show_pw_cb.toggled.connect(self.toggle_password_visible)
pw_hbox.addWidget(self.password_edit)
pw_hbox.addWidget(self.show_pw_cb)
- auth_layout.addRow("Passwort:", pw_hbox)
-
+ userpass_layout.addRow("Passwort:", pw_hbox)
+
pw_hint = QLabel("Hinweis: Passwörter werden im Klartext lokal gespeichert!")
pw_hint.setStyleSheet("color: red;")
- auth_layout.addRow(pw_hint)
-
+ userpass_layout.addRow(pw_hint)
+
+ self.userpass_group.setLayout(userpass_layout)
+ auth_layout.addWidget(self.userpass_group)
+
+ # Cookies-Gruppe
+ self.cookies_group = QGroupBox("Cookies vom Browser")
+ cookies_layout = QFormLayout()
+
+ self.browser_combo = QComboBox()
+ self.browser_combo.addItem("Chrome", "chrome")
+ self.browser_combo.addItem("Firefox", "firefox")
+ cookies_layout.addRow("Browser:", self.browser_combo)
+
+ cookies_hint = QLabel("Nutzt Cookies aus dem angegebenen Browser (--cookies-from-browser)")
+ cookies_layout.addRow(cookies_hint)
+
+ self.cookies_group.setLayout(cookies_layout)
+ auth_layout.addWidget(self.cookies_group)
+
+ # Verbinde Radio-Buttons mit Update-Methode
+ self.auth_button_group.buttonToggled.connect(self.update_auth_fields_state)
+
+ # Bestimme, welche Methode initial ausgewählt werden soll
+ cookies_enabled = self.preset_data.get("cookies_from_browser", {}).get("enabled", False)
+ has_username = bool(self.preset_data.get("username", ""))
+ has_password = bool(self.preset_data.get("password", ""))
+
+ if cookies_enabled:
+ self.auth_cookies_radio.setChecked(True)
+ # Browser auswählen
+ browser = self.preset_data.get("cookies_from_browser", {}).get("browser", "chrome")
+ idx = self.browser_combo.findData(browser)
+ if idx >= 0:
+ self.browser_combo.setCurrentIndex(idx)
+ elif has_username or has_password:
+ self.auth_userpass_radio.setChecked(True)
+ else:
+ self.auth_none_radio.setChecked(True)
+
+ # Initial state setzen
+ self.update_auth_fields_state()
+
+ auth_layout.addStretch()
auth_tab.setLayout(auth_layout)
tabs.addTab(auth_tab, "Authentifizierung")
@@ -283,6 +345,14 @@ class PresetDialog(QDialog):
def toggle_password_visible(self, checked):
self.password_edit.setEchoMode(QLineEdit.Normal if checked else QLineEdit.Password)
+ def update_auth_fields_state(self):
+ """Aktiviert/Deaktiviert die Authentifizierungs-Gruppen basierend auf Radio-Button-Auswahl."""
+ is_userpass = self.auth_userpass_radio.isChecked()
+ is_cookies = self.auth_cookies_radio.isChecked()
+
+ self.userpass_group.setEnabled(is_userpass)
+ self.cookies_group.setEnabled(is_cookies)
+
def toggle_format_selection(self, checked):
# Diese Methode setzt Flags, wenn die Format-Auswahl aktiviert wird
pass
@@ -292,6 +362,10 @@ class PresetDialog(QDialog):
self.dual_audio_group.setEnabled(checked)
def get_preset_data(self):
+ # Bestimme Authentifizierungsmethode
+ is_userpass = self.auth_userpass_radio.isChecked()
+ is_cookies = self.auth_cookies_radio.isChecked()
+
return {
"name": self.name_edit.text(),
"description": self.description_edit.text(),
@@ -303,8 +377,12 @@ class PresetDialog(QDialog):
"episode": self.episode_edit.text(),
"custom_path": self.custom_path_edit.text(),
"is_audio": self.is_audio_cb.isChecked(),
- "username": self.username_edit.text(),
- "password": self.password_edit.text(),
+ "username": self.username_edit.text() if is_userpass else "",
+ "password": self.password_edit.text() if is_userpass else "",
+ "cookies_from_browser": {
+ "enabled": is_cookies,
+ "browser": self.browser_combo.currentData() if is_cookies else "chrome"
+ },
"referer": self.referer_edit.text(),
"hls_ffmpeg": self.hls_ffmpeg_cb.isChecked(),
"sublang": self.sublang_edit.text(),
@@ -441,30 +519,6 @@ class OptionenDialog(QDialog):
flags_layout.addWidget(self.cb_use_ffmpeg_location)
flags_layout.addWidget(QLabel("Nutzt den konfigurierten FFmpeg-Pfad für yt-dlp."))
- # Cookies from Browser
- self.cb_cookies_from_browser = QCheckBox("--cookies-from-browser")
- cookies_config = self.selected_flags.get("cookies_from_browser", {"enabled": False, "browser": "chrome"})
- self.cb_cookies_from_browser.setChecked(cookies_config.get("enabled", False))
- self.cb_cookies_from_browser.toggled.connect(self.toggle_browser_combo)
- flags_layout.addWidget(self.cb_cookies_from_browser)
-
- # Browser-Auswahl
- browser_layout = QHBoxLayout()
- browser_layout.addWidget(QLabel("Browser:"))
- self.browser_combo = QComboBox()
- self.browser_combo.addItem("Chrome", "chrome")
- self.browser_combo.addItem("Firefox", "firefox")
- # Vorbelegen
- browser = cookies_config.get("browser", "chrome")
- idx = self.browser_combo.findData(browser)
- if idx >= 0:
- self.browser_combo.setCurrentIndex(idx)
- self.browser_combo.setEnabled(self.cb_cookies_from_browser.isChecked())
- browser_layout.addWidget(self.browser_combo)
- browser_layout.addStretch()
- flags_layout.addLayout(browser_layout)
- flags_layout.addWidget(QLabel("Nutzt Cookies aus dem angegebenen Browser."))
-
tab_flags.setLayout(flags_layout)
tabs.addTab(tab_flags, "yt-dlp-Flags")
@@ -472,7 +526,7 @@ class OptionenDialog(QDialog):
tab_info = QWidget()
info_layout = QVBoxLayout()
info_text = (
- "Version: 1.4
"
+ "Version: 2.0
"
"© 2025 Akamaru
"
"Sourcecode: https://git.ponywave.de/Akamaru/video-download-helper
"
"Erstellt mit Hilfe von Claude, GPT & Gemini"
@@ -540,10 +594,6 @@ class OptionenDialog(QDialog):
file_path = dialog.selectedFiles()[0]
self.ffmpeg_path_input.setText(file_path)
- def toggle_browser_combo(self, checked):
- """Aktiviert/Deaktiviert die Browser-ComboBox basierend auf der Checkbox."""
- self.browser_combo.setEnabled(checked)
-
def get_values(self):
return (
self.output_dir_input.text(),
@@ -552,11 +602,7 @@ class OptionenDialog(QDialog):
"ignore_config": self.cb_ignore_config.isChecked(),
"remux_mkv": self.cb_remux_mkv.isChecked(),
"embed_metadata": self.cb_embed_metadata.isChecked(),
- "use_ffmpeg_location": self.cb_use_ffmpeg_location.isChecked(),
- "cookies_from_browser": {
- "enabled": self.cb_cookies_from_browser.isChecked(),
- "browser": self.browser_combo.currentData()
- }
+ "use_ffmpeg_location": self.cb_use_ffmpeg_location.isChecked()
},
self.hide_defaults_cb.isChecked(),
self.mkvmerge_path_input.text(),
diff --git a/main.py b/main.py
index e63d32b..384f7aa 100644
--- a/main.py
+++ b/main.py
@@ -521,8 +521,8 @@ class MainWindow(QMainWindow):
# FFmpeg-Pfad
if flags.get("use_ffmpeg_location") and self.config.get("ffmpeg_path"):
cmd.extend(["--ffmpeg-location", self.config.get("ffmpeg_path")])
- # Cookies from Browser
- cookies_config = flags.get("cookies_from_browser", {})
+ # Cookies from Browser (aus Preset)
+ cookies_config = preset.get("cookies_from_browser", {})
if isinstance(cookies_config, dict) and cookies_config.get("enabled", False):
browser = cookies_config.get("browser", "chrome")
cmd.extend(["--cookies-from-browser", browser])
@@ -755,8 +755,8 @@ class MainWindow(QMainWindow):
# FFmpeg-Pfad
if flags.get("use_ffmpeg_location") and self.config.get("ffmpeg_path"):
extra_args.extend(["--ffmpeg-location", self.config.get("ffmpeg_path")])
- # Cookies from Browser
- cookies_config = flags.get("cookies_from_browser", {})
+ # Cookies from Browser (aus Preset)
+ cookies_config = preset.get("cookies_from_browser", {})
if isinstance(cookies_config, dict) and cookies_config.get("enabled", False):
browser = cookies_config.get("browser", "chrome")
extra_args.extend(["--cookies-from-browser", browser])
@@ -1011,8 +1011,8 @@ class MainWindow(QMainWindow):
extra_args.extend(["--downloader", "ffmpeg", "--hls-use-mpegts"])
if flags.get("use_ffmpeg_location") and self.config.get("ffmpeg_path"):
extra_args.extend(["--ffmpeg-location", self.config.get("ffmpeg_path")])
- # Cookies from Browser
- cookies_config = flags.get("cookies_from_browser", {})
+ # Cookies from Browser (aus Preset)
+ cookies_config = preset.get("cookies_from_browser", {})
if isinstance(cookies_config, dict) and cookies_config.get("enabled", False):
browser = cookies_config.get("browser", "chrome")
extra_args.extend(["--cookies-from-browser", browser])