Add generic-mode URL validation and UI
Introduce a "generic_mode" option to allow validating/downloading from non-YouTube sites and wire it through the UI, config, and validation logic. Key changes: - Add generic_mode default to ConfigManager and persist setting from DownloadSettingsDialog (checkbox + help text). - Extend validate_video_url to accept a generic_mode flag and allow any http/https URL with a domain when enabled; pass this flag from Analysis and Download flows. - Update YTSageApp to load/save generic_mode, update URL placeholder and settings tooltip behavior, and refresh tooltip when settings change. - Improve robustness in FormatTableMixin: handle None/incorrect types for format_note, abr, resolution, ext, and codec values to avoid type errors and ensure consistent display. - Add localization entries for generic mode, placeholder, and related help text across multiple language files and update the in-app default localization strings. These changes enable broader site support via yt-dlp while hardening UI format handling and keeping user settings persistent.
This commit is contained in:
@@ -195,6 +195,24 @@ class DownloadSettingsDialog(QDialog):
|
||||
speed_group_box.setLayout(speed_layout)
|
||||
layout.addWidget(speed_group_box)
|
||||
|
||||
# --- Generic Mode Section ---
|
||||
generic_mode_group_box = QGroupBox(_("settings.generic_mode"))
|
||||
generic_mode_layout = QVBoxLayout()
|
||||
|
||||
self.generic_mode_enabled = ConfigManager.get("generic_mode") or False
|
||||
|
||||
self.generic_mode_checkbox = QCheckBox(_("settings.enable_generic_mode"))
|
||||
self.generic_mode_checkbox.setChecked(self.generic_mode_enabled)
|
||||
generic_mode_layout.addWidget(self.generic_mode_checkbox)
|
||||
|
||||
generic_mode_help_label = QLabel(_("settings.generic_mode_help"))
|
||||
generic_mode_help_label.setWordWrap(True)
|
||||
generic_mode_help_label.setStyleSheet("color: #cccccc; margin: 5px; font-size: 11px;")
|
||||
generic_mode_layout.addWidget(generic_mode_help_label)
|
||||
|
||||
generic_mode_group_box.setLayout(generic_mode_layout)
|
||||
layout.addWidget(generic_mode_group_box)
|
||||
|
||||
# --- Output Format Settings Section ---
|
||||
output_format_group_box = QGroupBox(_("settings.output_format_settings"))
|
||||
output_format_layout = QVBoxLayout()
|
||||
@@ -349,6 +367,10 @@ class DownloadSettingsDialog(QDialog):
|
||||
"""Returns whether force output format is enabled."""
|
||||
return self.force_format_checkbox.isChecked()
|
||||
|
||||
def get_generic_mode_enabled(self) -> bool:
|
||||
"""Returns whether generic mode is enabled."""
|
||||
return self.generic_mode_checkbox.isChecked()
|
||||
|
||||
def get_preferred_format(self) -> str:
|
||||
"""Returns the selected preferred format (lowercase)."""
|
||||
format_map = {0: "mp4", 1: "webm", 2: "mkv"}
|
||||
@@ -405,6 +427,8 @@ class DownloadSettingsDialog(QDialog):
|
||||
def accept(self) -> None:
|
||||
"""Override accept to save format settings."""
|
||||
try:
|
||||
ConfigManager.set("generic_mode", self.get_generic_mode_enabled())
|
||||
|
||||
# Save output format settings
|
||||
force_format = self.get_force_format_enabled()
|
||||
preferred_format = self.get_preferred_format()
|
||||
|
||||
Reference in New Issue
Block a user