Verschiebe "--cookies-from-browser" nach Preset-Einstellungen

This commit is contained in:
Akamaru
2025-12-03 14:29:09 +01:00
parent 31889a44a2
commit 5c9fbcea7d
3 changed files with 104 additions and 62 deletions

View File

@@ -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,

View File

@@ -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("<b>Authentifizierungsmethode:</b>")
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 = (
"<b>Version:</b> 1.4<br>"
"<b>Version:</b> 2.0<br>"
"<b>&copy; 2025 Akamaru</b><br>"
"<b>Sourcecode:</b> <a href='https://git.ponywave.de/Akamaru/video-download-helper'>https://git.ponywave.de/Akamaru/video-download-helper</a><br>"
"<b>Erstellt mit Hilfe von Claude, GPT &amp; Gemini</b>"
@@ -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(),

12
main.py
View File

@@ -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])