Refactor Dolby Atmos feature to be internal and seamless

This commit is contained in:
Rikrdoga
2025-10-20 10:47:43 -06:00
parent ec4502ad00
commit 2c2cc0283a
7 changed files with 346 additions and 109 deletions
+16 -16
View File
@@ -13,7 +13,7 @@ __KEYS_JSON__ = """
{ {
"version": "1.0.1", "version": "1.0.1",
"keys": [ "keys": [
// Invalid
{ {
"platform": "Fire TV", "platform": "Fire TV",
"formats": "Normal/High/HiFi(No Master)", "formats": "Normal/High/HiFi(No Master)",
@@ -22,7 +22,7 @@ __KEYS_JSON__ = """
"valid": "False", "valid": "False",
"from": "Fokka-Engineering (https://github.com/Fokka-Engineering/libopenTIDAL/blob/655528e26e4f3ee2c426c06ea5b8440cf27abc4a/README.md#example)" "from": "Fokka-Engineering (https://github.com/Fokka-Engineering/libopenTIDAL/blob/655528e26e4f3ee2c426c06ea5b8440cf27abc4a/README.md#example)"
}, },
// Only max MQA.
{ {
"platform": "Fire TV", "platform": "Fire TV",
"formats": "Master-Only(Else Error)", "formats": "Master-Only(Else Error)",
@@ -31,7 +31,7 @@ __KEYS_JSON__ = """
"valid": "True", "valid": "True",
"from": "Dniel97 (https://github.com/Dniel97/RedSea/blob/4ba02b88cee33aeb735725cb854be6c66ff372d4/config/settings.example.py#L68)" "from": "Dniel97 (https://github.com/Dniel97/RedSea/blob/4ba02b88cee33aeb735725cb854be6c66ff372d4/config/settings.example.py#L68)"
}, },
// Invalid
{ {
"platform": "Android TV", "platform": "Android TV",
"formats": "Normal/High/HiFi(No Master)", "formats": "Normal/High/HiFi(No Master)",
@@ -40,7 +40,7 @@ __KEYS_JSON__ = """
"valid": "False", "valid": "False",
"from": "" "from": ""
}, },
// Invalid
{ {
"platform": "TV", "platform": "TV",
"formats": "Normal/High/HiFi/Master", "formats": "Normal/High/HiFi/Master",
@@ -49,13 +49,13 @@ __KEYS_JSON__ = """
"valid": "False", "valid": "False",
"from": "morguldir (https://github.com/morguldir/python-tidal/commit/50f1afcd2079efb2b4cf694ef5a7d67fdf619d09)" "from": "morguldir (https://github.com/morguldir/python-tidal/commit/50f1afcd2079efb2b4cf694ef5a7d67fdf619d09)"
}, },
// Invalid
{ {
"platform": "Android Auto", "platform": "Android Auto",
"formats": "Normal/High/HiFi/Master", "formats": "Normal/High/HiFi/Master",
"clientId": "zU4XHVVkc2tDPo4t", "clientId": "zU4XHVVkc2tDPo4t",
"clientSecret": "VJKhDFqJPqvsPVNBV6ukXTJmwlvbttP7wlMlrc72se4=", "clientSecret": "VJKhDFqJPqvsPVNBV6ukXTJmwlvbttP7wlMlrc72se4=",
"valid": "False", "valid": "True",
"from": "1nikolas (https://github.com/yaronzz/Tidal-Media-Downloader/pull/840)" "from": "1nikolas (https://github.com/yaronzz/Tidal-Media-Downloader/pull/840)"
} }
] ]
@@ -106,14 +106,14 @@ def getVersion():
# Load from gist # Load from gist
# try: try:
# respond = requests.get( respond = requests.get(
# "https://api.github.com/gists/48d01f5a24b4b7b37f19443977c22cd6", timeout=REQUESTS_TIMEOUT_SEC "https://api.github.com/gists/48d01f5a24b4b7b37f19443977c22cd6", timeout=REQUESTS_TIMEOUT_SEC
# ) )
# if respond.status_code == 200: if respond.status_code == 200:
# content = respond.json()["files"]["tidal-api-key.json"]["content"] content = respond.json()["files"]["tidal-api-key.json"]["content"]
# __API_KEYS__ = json.loads(content) __API_KEYS__ = json.loads(content)
# except Exception as e: except Exception as e:
# TODO: Implement proper logging. # TODO: Implement proper logging.
# print(e) print(e)
# pass pass
+1 -1
View File
@@ -246,7 +246,7 @@ def _download(ctx: typer.Context, urls: list[str], try_login: bool = True) -> bo
fn_logger = LoggerWrapped(progress.print) fn_logger = LoggerWrapped(progress.print)
dl = Download( dl = Download(
session=ctx.obj[CTX_TIDAL].session, tidal_obj=ctx.obj[CTX_TIDAL],
skip_existing=settings.data.skip_existing, skip_existing=settings.data.skip_existing,
path_base=settings.data.download_base_path, path_base=settings.data.download_base_path,
fn_logger=fn_logger, fn_logger=fn_logger,
+35 -6
View File
@@ -89,6 +89,7 @@ class Settings(BaseConfig, metaclass=SingletonMeta):
class Tidal(BaseConfig, metaclass=SingletonMeta): class Tidal(BaseConfig, metaclass=SingletonMeta):
session: tidalapi.Session session: tidalapi.Session
atmos_session: tidalapi.Session = None
token_from_storage: bool = False token_from_storage: bool = False
settings: Settings settings: Settings
is_pkce: bool is_pkce: bool
@@ -96,11 +97,9 @@ class Tidal(BaseConfig, metaclass=SingletonMeta):
def __init__(self, settings: Settings = None): def __init__(self, settings: Settings = None):
self.cls_model = ModelToken self.cls_model = ModelToken
tidal_config: tidalapi.Config = tidalapi.Config(item_limit=10000) tidal_config: tidalapi.Config = tidalapi.Config(item_limit=10000)
if settings and settings.data.api_key_client_id:
tidal_config.client_id = settings.data.api_key_client_id
tidal_config.client_secret = settings.data.api_key_client_secret
self.session = tidalapi.Session(tidal_config) self.session = tidalapi.Session(tidal_config)
# self.session.config.client_id = "km8T1xS355y7dd3H"
# self.session.config.client_secret = "vcmeGW1OuZ0fWYMCSZ6vNvSLJlT3XEpW0ambgYt5ZuI="
self.file_path = path_file_token() self.file_path = path_file_token()
self.token_from_storage = self.read(self.file_path) self.token_from_storage = self.read(self.file_path)
@@ -112,8 +111,12 @@ class Tidal(BaseConfig, metaclass=SingletonMeta):
if settings: if settings:
self.settings = settings self.settings = settings
self.session.audio_quality = self.settings.data.quality_audio # Handle standard qualities and our special Dolby Atmos string
self.session.video_quality = tidalapi.VideoQuality.high if self.settings.data.quality_audio == "DOLBY_ATMOS":
self.session.audio_quality = "DOLBY_ATMOS"
else:
self.session.audio_quality = tidalapi.Quality(self.settings.data.quality_audio)
self.session.video_quality = tidalapi.VideoQuality.high
return True return True
@@ -158,6 +161,32 @@ class Tidal(BaseConfig, metaclass=SingletonMeta):
self.set_option("expiry_time", self.session.expiry_time) self.set_option("expiry_time", self.session.expiry_time)
self.save() self.save()
def get_atmos_session(self) -> tidalapi.Session:
"""
Returns the Atmos session. If it doesn't exist, it creates it
by logging in with the Fire TV client ID using the main session's token.
"""
if self.atmos_session is None:
# This config uses the Fire TV client ID needed for Dolby Atmos.
# It is handled internally and not exposed to the user.
atmos_config = tidalapi.Config(item_limit=10000)
atmos_config.client_id = "7m7Ap0JC9j1cOM3n"
atmos_config.client_secret = "vRAdA108tlvkJpTsGZS8rGZ7xTlbJ0qaZ2K9saEzsgY="
self.atmos_session = tidalapi.Session(atmos_config)
# Try to log in using the token from the already logged-in main session.
if not self.atmos_session.check_login():
self.atmos_session.load_oauth_session(
self.data.token_type,
self.data.access_token,
self.data.refresh_token,
self.data.expiry_time,
is_pkce=self.is_pkce,
)
return self.atmos_session
def login(self, fn_print: Callable) -> bool: def login(self, fn_print: Callable) -> bool:
is_token = self.login_token() is_token = self.login_token()
result = False result = False
+34 -4
View File
@@ -30,7 +30,7 @@ from tidalapi import Album, Mix, Playlist, Session, Track, UserPlaylist, Video
from tidalapi.exceptions import TooManyRequests from tidalapi.exceptions import TooManyRequests
from tidalapi.media import AudioExtensions, Codec, Quality, Stream, StreamManifest, VideoExtensions from tidalapi.media import AudioExtensions, Codec, Quality, Stream, StreamManifest, VideoExtensions
from tidal_dl_ng.config import Settings from tidal_dl_ng.config import Settings, Tidal
from tidal_dl_ng.constants import ( from tidal_dl_ng.constants import (
CHUNK_SIZE, CHUNK_SIZE,
COVER_NAME, COVER_NAME,
@@ -99,6 +99,7 @@ class Download:
"""Main class for managing downloads, segment merging, file operations, and metadata for TIDAL media.""" """Main class for managing downloads, segment merging, file operations, and metadata for TIDAL media."""
settings: Settings settings: Settings
tidal: "Tidal" # Using a forward reference for type hinting
session: Session session: Session
skip_existing: bool = False skip_existing: bool = False
fn_logger: Callable fn_logger: Callable
@@ -110,7 +111,7 @@ class Download:
def __init__( def __init__(
self, self,
session: Session, tidal_obj: "Tidal",
path_base: str, path_base: str,
fn_logger: Callable, fn_logger: Callable,
skip_existing: bool = False, skip_existing: bool = False,
@@ -134,7 +135,8 @@ class Download:
event_run (Event | None, optional): Run event. Defaults to None. event_run (Event | None, optional): Run event. Defaults to None.
""" """
self.settings = Settings() self.settings = Settings()
self.session = session self.tidal = tidal_obj
self.session = tidal_obj.session
self.skip_existing = skip_existing self.skip_existing = skip_existing
self.fn_logger = fn_logger self.fn_logger = fn_logger
self.progress_gui = progress_gui self.progress_gui = progress_gui
@@ -783,8 +785,36 @@ class Download:
if isinstance(media, Track): if isinstance(media, Track):
try: try:
media_stream = media.get_stream() # Check which quality the user has selected
selected_quality = self.settings.data.quality_audio
if selected_quality == "DOLBY_ATMOS":
# Dolby Atmos requested: use the special Atmos session.
atmos_session = self.tidal.get_atmos_session()
# Store the original quality of the atmos_session to restore it later
original_quality = atmos_session.audio_quality
try:
# Temporarily set the session to request what Tidal considers "High" (320k AAC).
# This is the key to getting the Atmos stream with the Fire TV client ID.
atmos_session.audio_quality = Quality.low_320k
# Get the track object from the correct session
atmos_track = atmos_session.track(media.id)
# Call get_stream() WITHOUT arguments. It will use the quality from the session object.
media_stream = atmos_track.get_stream()
finally:
# IMPORTANT: Always restore the original quality on the atmos_session
atmos_session.audio_quality = original_quality
else:
# Standard behavior: get_stream uses the quality already set on the main session
media_stream = media.get_stream()
stream_manifest = media_stream.get_stream_manifest() stream_manifest = media_stream.get_stream_manifest()
except TooManyRequests: except TooManyRequests:
self.fn_logger.exception( self.fn_logger.exception(
f"Too many requests against TIDAL backend. Skipping '{name_builder_item(media)}'. " f"Too many requests against TIDAL backend. Skipping '{name_builder_item(media)}'. "
+17 -39
View File
@@ -52,7 +52,7 @@ from typing import Any
from requests.exceptions import HTTPError from requests.exceptions import HTTPError
from tidalapi.session import LinkLogin from tidalapi.session import LinkLogin
from tidal_dl_ng import api as ApiKeys
from tidal_dl_ng import __version__, update_available from tidal_dl_ng import __version__, update_available
from tidal_dl_ng.dialog import DialogLogin, DialogPreferences, DialogVersion from tidal_dl_ng.dialog import DialogLogin, DialogPreferences, DialogVersion
from tidal_dl_ng.helper.gui import ( from tidal_dl_ng.helper.gui import (
@@ -170,7 +170,6 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
self._init_progressbar() self._init_progressbar()
self._populate_quality(self.cb_quality_audio, Quality) self._populate_quality(self.cb_quality_audio, Quality)
self._populate_quality(self.cb_quality_video, QualityVideo) self._populate_quality(self.cb_quality_video, QualityVideo)
self._populate_api_keys(self.cb_api_key)
self._populate_search_types(self.cb_search_type, SearchTypes) self._populate_search_types(self.cb_search_type, SearchTypes)
self.apply_settings(self.settings) self.apply_settings(self.settings)
self._init_signals() self._init_signals()
@@ -252,7 +251,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
progress: Progress = Progress() progress: Progress = Progress()
handling_app: HandlingApp = HandlingApp() handling_app: HandlingApp = HandlingApp()
self.dl = Download( self.dl = Download(
session=self.tidal.session, tidal_obj=self.tidal,
skip_existing=self.tidal.settings.data.skip_existing, skip_existing=self.tidal.settings.data.skip_existing,
path_base=self.settings.data.download_base_path, path_base=self.settings.data.download_base_path,
fn_logger=logger_gui, fn_logger=logger_gui,
@@ -306,14 +305,6 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
self.te_debug.setTextCursor(cursor) self.te_debug.setTextCursor(cursor)
self.te_debug.ensureCursorVisible() self.te_debug.ensureCursorVisible()
def _populate_api_keys(self, ui_target: QtWidgets.QComboBox) -> None:
"""Puebla el ComboBox con los API keys disponibles."""
ui_target.addItem("Por defecto", None)
for i, key_data in enumerate(ApiKeys.getItems()):
if key_data["valid"] == "True":
platform_name = f"{key_data['platform']} - ({key_data['formats']})"
ui_target.addItem(platform_name, i)
def _populate_quality(self, ui_target: QtWidgets.QComboBox, options: Iterable[Any]) -> None: def _populate_quality(self, ui_target: QtWidgets.QComboBox, options: Iterable[Any]) -> None:
"""Populate a combo box with quality options. """Populate a combo box with quality options.
@@ -324,6 +315,12 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
""" """
for item in options: for item in options:
ui_target.addItem(item.name, item) ui_target.addItem(item.name, item)
# Add our custom Dolby Atmos option to the audio quality dropdown
if ui_target == self.cb_quality_audio:
# Check if it already exists to be safe
if ui_target.findText("DOLBY_ATMOS") == -1:
ui_target.addItem("DOLBY_ATMOS", "DOLBY_ATMOS")
def _populate_search_types(self, ui_target: QtWidgets.QComboBox, options: Iterable[Any]) -> None: def _populate_search_types(self, ui_target: QtWidgets.QComboBox, options: Iterable[Any]) -> None:
"""Populate a combo box with search type options. """Populate a combo box with search type options.
@@ -525,17 +522,6 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
item["element"].setCurrentIndex(idx) item["element"].setCurrentIndex(idx)
else: else:
item["element"].setCurrentIndex(item["default_id"]) item["element"].setCurrentIndex(item["default_id"])
if settings.data.api_key_client_id:
for i in range(self.cb_api_key.count()):
key_index = self.cb_api_key.itemData(i)
if key_index is not None:
key_data = ApiKeys.getItem(key_index)
if key_data["clientId"] == settings.data.api_key_client_id:
self.cb_api_key.setCurrentIndex(i)
break
else:
self.cb_api_key.setCurrentIndex(0) # "Por defecto"
def on_spinner_start(self, parent: QtWidgets.QWidget) -> None: def on_spinner_start(self, parent: QtWidgets.QWidget) -> None:
"""Start a loading spinner on the given parent widget. """Start a loading spinner on the given parent widget.
@@ -905,7 +891,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
Returns: Returns:
ResultItem: The constructed ResultItem. ResultItem: The constructed ResultItem.
""" """
final_quality = quality_audio_highest(item) final_quality = quality_audio_highest(item)
if hasattr(item, "audio_modes") and "DOLBY_ATMOS" in item.audio_modes: if hasattr(item, "audio_modes") and "DOLBY_ATMOS" in item.audio_modes:
final_quality = "Dolby Atmos" final_quality = "Dolby Atmos"
@@ -1130,7 +1116,6 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
) )
self.cb_quality_audio.currentIndexChanged.connect(self.on_quality_set_audio) self.cb_quality_audio.currentIndexChanged.connect(self.on_quality_set_audio)
self.cb_quality_video.currentIndexChanged.connect(self.on_quality_set_video) self.cb_quality_video.currentIndexChanged.connect(self.on_quality_set_video)
self.cb_api_key.currentIndexChanged.connect(self.on_api_key_set)
self.tr_lists_user.itemClicked.connect(self.on_list_items_show) self.tr_lists_user.itemClicked.connect(self.on_list_items_show)
self.s_spinner_start[QtWidgets.QWidget].connect(self.on_spinner_start) self.s_spinner_start[QtWidgets.QWidget].connect(self.on_spinner_start)
self.s_spinner_stop.connect(self.on_spinner_stop) self.s_spinner_stop.connect(self.on_spinner_stop)
@@ -1215,7 +1200,14 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
Args: Args:
index: The index of the selected quality in the combo box. index: The index of the selected quality in the combo box.
""" """
self.settings.data.quality_audio = Quality(self.cb_quality_audio.itemData(index)) quality_data = self.cb_quality_audio.itemData(index)
# Handle our custom string for Dolby Atmos
if isinstance(quality_data, str) and quality_data == "DOLBY_ATMOS":
self.settings.data.quality_audio = "DOLBY_ATMOS"
else:
self.settings.data.quality_audio = Quality(quality_data)
self.settings.save() self.settings.save()
if self.tidal: if self.tidal:
@@ -1233,20 +1225,6 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
if self.tidal: if self.tidal:
self.tidal.settings_apply() self.tidal.settings_apply()
def on_api_key_set(self, index: int) -> None:
"""Guarda el API Key seleccionado en la configuración."""
key_index = self.cb_api_key.itemData(index)
if key_index is not None:
key_data = ApiKeys.getItem(key_index)
self.settings.data.api_key_client_id = key_data["clientId"]
self.settings.data.api_key_client_secret = key_data["clientSecret"]
else: # Si se selecciona "Por defecto"
self.settings.data.api_key_client_id = ""
self.settings.data.api_key_client_secret = ""
self.settings.save()
logger_gui.info("API Key cambiado. Reinicia la aplicación para aplicar los cambios.")
def on_list_items_show(self, item: QtWidgets.QTreeWidgetItem) -> None: def on_list_items_show(self, item: QtWidgets.QTreeWidgetItem) -> None:
"""Show the items in the selected playlist or mix. """Show the items in the selected playlist or mix.
+208 -15
View File
@@ -39,9 +39,15 @@ class Ui_MainWindow:
self.a_preferences.setEnabled(True) self.a_preferences.setEnabled(True)
self.a_preferences.setText("Preferences...") self.a_preferences.setText("Preferences...")
self.a_preferences.setIconText("Preferences...") self.a_preferences.setIconText("Preferences...")
# if QT_CONFIG(tooltip)
self.a_preferences.setToolTip("Preferences...") self.a_preferences.setToolTip("Preferences...")
# endif // QT_CONFIG(tooltip)
# if QT_CONFIG(statustip)
self.a_preferences.setStatusTip("") self.a_preferences.setStatusTip("")
# endif // QT_CONFIG(statustip)
# if QT_CONFIG(whatsthis)
self.a_preferences.setWhatsThis("") self.a_preferences.setWhatsThis("")
# endif // QT_CONFIG(whatsthis)
self.a_version = QAction(MainWindow) self.a_version = QAction(MainWindow)
self.a_version.setObjectName("a_version") self.a_version.setObjectName("a_version")
self.a_exit = QAction(MainWindow) self.a_exit = QAction(MainWindow)
@@ -58,11 +64,21 @@ class Ui_MainWindow:
sizePolicy.setVerticalStretch(100) sizePolicy.setVerticalStretch(100)
sizePolicy.setHeightForWidth(self.w_central.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.w_central.sizePolicy().hasHeightForWidth())
self.w_central.setSizePolicy(sizePolicy) self.w_central.setSizePolicy(sizePolicy)
# if QT_CONFIG(tooltip)
self.w_central.setToolTip("") self.w_central.setToolTip("")
# endif // QT_CONFIG(tooltip)
# if QT_CONFIG(statustip)
self.w_central.setStatusTip("") self.w_central.setStatusTip("")
# endif // QT_CONFIG(statustip)
# if QT_CONFIG(whatsthis)
self.w_central.setWhatsThis("") self.w_central.setWhatsThis("")
# endif // QT_CONFIG(whatsthis)
# if QT_CONFIG(accessibility)
self.w_central.setAccessibleName("") self.w_central.setAccessibleName("")
# endif // QT_CONFIG(accessibility)
# if QT_CONFIG(accessibility)
self.w_central.setAccessibleDescription("") self.w_central.setAccessibleDescription("")
# endif // QT_CONFIG(accessibility)
self.horizontalLayout = QHBoxLayout(self.w_central) self.horizontalLayout = QHBoxLayout(self.w_central)
self.horizontalLayout.setObjectName("horizontalLayout") self.horizontalLayout.setObjectName("horizontalLayout")
self.lv_list_user = QVBoxLayout() self.lv_list_user = QVBoxLayout()
@@ -79,11 +95,21 @@ class Ui_MainWindow:
__qtreewidgetitem3 = QTreeWidgetItem(self.tr_lists_user) __qtreewidgetitem3 = QTreeWidgetItem(self.tr_lists_user)
__qtreewidgetitem3.setFlags(Qt.ItemIsEnabled) __qtreewidgetitem3.setFlags(Qt.ItemIsEnabled)
self.tr_lists_user.setObjectName("tr_lists_user") self.tr_lists_user.setObjectName("tr_lists_user")
# if QT_CONFIG(tooltip)
self.tr_lists_user.setToolTip("") self.tr_lists_user.setToolTip("")
# endif // QT_CONFIG(tooltip)
# if QT_CONFIG(statustip)
self.tr_lists_user.setStatusTip("") self.tr_lists_user.setStatusTip("")
# endif // QT_CONFIG(statustip)
# if QT_CONFIG(whatsthis)
self.tr_lists_user.setWhatsThis("") self.tr_lists_user.setWhatsThis("")
# endif // QT_CONFIG(whatsthis)
# if QT_CONFIG(accessibility)
self.tr_lists_user.setAccessibleName("") self.tr_lists_user.setAccessibleName("")
# endif // QT_CONFIG(accessibility)
# if QT_CONFIG(accessibility)
self.tr_lists_user.setAccessibleDescription("") self.tr_lists_user.setAccessibleDescription("")
# endif // QT_CONFIG(accessibility)
self.tr_lists_user.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers) self.tr_lists_user.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
self.tr_lists_user.setProperty("showDropIndicator", False) self.tr_lists_user.setProperty("showDropIndicator", False)
self.tr_lists_user.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection) self.tr_lists_user.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection)
@@ -93,7 +119,9 @@ class Ui_MainWindow:
self.tr_lists_user.header().setCascadingSectionResizes(True) self.tr_lists_user.header().setCascadingSectionResizes(True)
self.tr_lists_user.header().setHighlightSections(True) self.tr_lists_user.header().setHighlightSections(True)
self.tr_lists_user.header().setProperty("showSortIndicator", True) self.tr_lists_user.header().setProperty("showSortIndicator", True)
self.lv_list_user.addWidget(self.tr_lists_user) self.lv_list_user.addWidget(self.tr_lists_user)
self.lv_list_control = QHBoxLayout() self.lv_list_control = QHBoxLayout()
self.lv_list_control.setObjectName("lv_list_control") self.lv_list_control.setObjectName("lv_list_control")
self.pb_reload_user_lists = QPushButton(self.w_central) self.pb_reload_user_lists = QPushButton(self.w_central)
@@ -103,54 +131,99 @@ class Ui_MainWindow:
sizePolicy1.setVerticalStretch(0) sizePolicy1.setVerticalStretch(0)
sizePolicy1.setHeightForWidth(self.pb_reload_user_lists.sizePolicy().hasHeightForWidth()) sizePolicy1.setHeightForWidth(self.pb_reload_user_lists.sizePolicy().hasHeightForWidth())
self.pb_reload_user_lists.setSizePolicy(sizePolicy1) self.pb_reload_user_lists.setSizePolicy(sizePolicy1)
self.lv_list_control.addWidget(self.pb_reload_user_lists) self.lv_list_control.addWidget(self.pb_reload_user_lists)
self.pb_download_list = QPushButton(self.w_central) self.pb_download_list = QPushButton(self.w_central)
self.pb_download_list.setObjectName("pb_download_list") self.pb_download_list.setObjectName("pb_download_list")
sizePolicy1.setHeightForWidth(self.pb_download_list.sizePolicy().hasHeightForWidth()) sizePolicy1.setHeightForWidth(self.pb_download_list.sizePolicy().hasHeightForWidth())
self.pb_download_list.setSizePolicy(sizePolicy1) self.pb_download_list.setSizePolicy(sizePolicy1)
self.lv_list_control.addWidget(self.pb_download_list) self.lv_list_control.addWidget(self.pb_download_list)
self.lv_list_user.addLayout(self.lv_list_control) self.lv_list_user.addLayout(self.lv_list_control)
self.horizontalLayout.addLayout(self.lv_list_user) self.horizontalLayout.addLayout(self.lv_list_user)
self.lv_search_result = QVBoxLayout() self.lv_search_result = QVBoxLayout()
# ifndef Q_OS_MAC
self.lv_search_result.setSpacing(-1) self.lv_search_result.setSpacing(-1)
# endif
self.lv_search_result.setObjectName("lv_search_result") self.lv_search_result.setObjectName("lv_search_result")
self.lh_search = QHBoxLayout() self.lh_search = QHBoxLayout()
self.lh_search.setObjectName("lh_search") self.lh_search.setObjectName("lh_search")
self.l_search = QLineEdit(self.w_central) self.l_search = QLineEdit(self.w_central)
self.l_search.setObjectName("l_search") self.l_search.setObjectName("l_search")
self.l_search.setAcceptDrops(False) self.l_search.setAcceptDrops(False)
# if QT_CONFIG(tooltip)
self.l_search.setToolTip("") self.l_search.setToolTip("")
# endif // QT_CONFIG(tooltip)
# if QT_CONFIG(statustip)
self.l_search.setStatusTip("") self.l_search.setStatusTip("")
# endif // QT_CONFIG(statustip)
# if QT_CONFIG(whatsthis)
self.l_search.setWhatsThis("") self.l_search.setWhatsThis("")
# endif // QT_CONFIG(whatsthis)
# if QT_CONFIG(accessibility)
self.l_search.setAccessibleName("") self.l_search.setAccessibleName("")
# endif // QT_CONFIG(accessibility)
# if QT_CONFIG(accessibility)
self.l_search.setAccessibleDescription("") self.l_search.setAccessibleDescription("")
# endif // QT_CONFIG(accessibility)
self.l_search.setLocale(QLocale(QLocale.English, QLocale.UnitedStates)) self.l_search.setLocale(QLocale(QLocale.English, QLocale.UnitedStates))
self.l_search.setText("") self.l_search.setText("")
self.l_search.setPlaceholderText("Type and press ENTER to search...") self.l_search.setPlaceholderText("Type and press ENTER to search...")
self.l_search.setClearButtonEnabled(True) self.l_search.setClearButtonEnabled(True)
self.lh_search.addWidget(self.l_search) self.lh_search.addWidget(self.l_search)
self.cb_search_type = QComboBox(self.w_central) self.cb_search_type = QComboBox(self.w_central)
self.cb_search_type.setObjectName("cb_search_type") self.cb_search_type.setObjectName("cb_search_type")
self.cb_search_type.setMinimumSize(QSize(100, 0)) self.cb_search_type.setMinimumSize(QSize(100, 0))
# if QT_CONFIG(tooltip)
self.cb_search_type.setToolTip("") self.cb_search_type.setToolTip("")
# endif // QT_CONFIG(tooltip)
# if QT_CONFIG(statustip)
self.cb_search_type.setStatusTip("") self.cb_search_type.setStatusTip("")
# endif // QT_CONFIG(statustip)
# if QT_CONFIG(whatsthis)
self.cb_search_type.setWhatsThis("") self.cb_search_type.setWhatsThis("")
# endif // QT_CONFIG(whatsthis)
# if QT_CONFIG(accessibility)
self.cb_search_type.setAccessibleName("") self.cb_search_type.setAccessibleName("")
# endif // QT_CONFIG(accessibility)
# if QT_CONFIG(accessibility)
self.cb_search_type.setAccessibleDescription("") self.cb_search_type.setAccessibleDescription("")
# endif // QT_CONFIG(accessibility)
self.cb_search_type.setCurrentText("") self.cb_search_type.setCurrentText("")
self.cb_search_type.setSizeAdjustPolicy(QComboBox.SizeAdjustPolicy.AdjustToContentsOnFirstShow) self.cb_search_type.setSizeAdjustPolicy(QComboBox.SizeAdjustPolicy.AdjustToContentsOnFirstShow)
self.cb_search_type.setPlaceholderText("") self.cb_search_type.setPlaceholderText("")
self.lh_search.addWidget(self.cb_search_type) self.lh_search.addWidget(self.cb_search_type)
self.pb_search = QPushButton(self.w_central) self.pb_search = QPushButton(self.w_central)
self.pb_search.setObjectName("pb_search") self.pb_search.setObjectName("pb_search")
# if QT_CONFIG(statustip)
self.pb_search.setStatusTip("") self.pb_search.setStatusTip("")
# endif // QT_CONFIG(statustip)
# if QT_CONFIG(whatsthis)
self.pb_search.setWhatsThis("") self.pb_search.setWhatsThis("")
# endif // QT_CONFIG(whatsthis)
# if QT_CONFIG(accessibility)
self.pb_search.setAccessibleName("") self.pb_search.setAccessibleName("")
# endif // QT_CONFIG(accessibility)
# if QT_CONFIG(accessibility)
self.pb_search.setAccessibleDescription("") self.pb_search.setAccessibleDescription("")
# endif // QT_CONFIG(accessibility)
self.pb_search.setText("Search") self.pb_search.setText("Search")
# if QT_CONFIG(shortcut)
self.pb_search.setShortcut("") self.pb_search.setShortcut("")
# endif // QT_CONFIG(shortcut)
self.lh_search.addWidget(self.pb_search) self.lh_search.addWidget(self.pb_search)
self.lv_search_result.addLayout(self.lh_search) self.lv_search_result.addLayout(self.lh_search)
self.tr_results = QTreeView(self.w_central) self.tr_results = QTreeView(self.w_central)
self.tr_results.setObjectName("tr_results") self.tr_results.setObjectName("tr_results")
self.tr_results.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers) self.tr_results.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
@@ -160,81 +233,138 @@ class Ui_MainWindow:
self.tr_results.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection) self.tr_results.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection)
self.tr_results.setIndentation(10) self.tr_results.setIndentation(10)
self.tr_results.setSortingEnabled(True) self.tr_results.setSortingEnabled(True)
self.lv_search_result.addWidget(self.tr_results) self.lv_search_result.addWidget(self.tr_results)
self.lh_download = QHBoxLayout() self.lh_download = QHBoxLayout()
self.lh_download.setObjectName("lh_download") self.lh_download.setObjectName("lh_download")
self.l_quality_audio = QLabel(self.w_central) self.l_quality_audio = QLabel(self.w_central)
self.l_quality_audio.setObjectName("l_quality_audio") self.l_quality_audio.setObjectName("l_quality_audio")
# if QT_CONFIG(tooltip)
self.l_quality_audio.setToolTip("") self.l_quality_audio.setToolTip("")
# endif // QT_CONFIG(tooltip)
# if QT_CONFIG(statustip)
self.l_quality_audio.setStatusTip("") self.l_quality_audio.setStatusTip("")
# endif // QT_CONFIG(statustip)
# if QT_CONFIG(whatsthis)
self.l_quality_audio.setWhatsThis("") self.l_quality_audio.setWhatsThis("")
# endif // QT_CONFIG(whatsthis)
# if QT_CONFIG(accessibility)
self.l_quality_audio.setAccessibleName("") self.l_quality_audio.setAccessibleName("")
# endif // QT_CONFIG(accessibility)
# if QT_CONFIG(accessibility)
self.l_quality_audio.setAccessibleDescription("") self.l_quality_audio.setAccessibleDescription("")
# endif // QT_CONFIG(accessibility)
self.l_quality_audio.setText("Audio") self.l_quality_audio.setText("Audio")
self.l_quality_audio.setAlignment(Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignTrailing | Qt.AlignmentFlag.AlignVCenter) self.l_quality_audio.setAlignment(
Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignTrailing | Qt.AlignmentFlag.AlignVCenter
)
self.lh_download.addWidget(self.l_quality_audio) self.lh_download.addWidget(self.l_quality_audio)
self.cb_quality_audio = QComboBox(self.w_central) self.cb_quality_audio = QComboBox(self.w_central)
self.cb_quality_audio.setObjectName("cb_quality_audio") self.cb_quality_audio.setObjectName("cb_quality_audio")
self.cb_quality_audio.setMinimumSize(QSize(140, 0)) self.cb_quality_audio.setMinimumSize(QSize(140, 0))
# if QT_CONFIG(tooltip)
self.cb_quality_audio.setToolTip("") self.cb_quality_audio.setToolTip("")
# endif // QT_CONFIG(tooltip)
# if QT_CONFIG(statustip)
self.cb_quality_audio.setStatusTip("") self.cb_quality_audio.setStatusTip("")
# endif // QT_CONFIG(statustip)
# if QT_CONFIG(whatsthis)
self.cb_quality_audio.setWhatsThis("") self.cb_quality_audio.setWhatsThis("")
# endif // QT_CONFIG(whatsthis)
# if QT_CONFIG(accessibility)
self.cb_quality_audio.setAccessibleName("") self.cb_quality_audio.setAccessibleName("")
# endif // QT_CONFIG(accessibility)
# if QT_CONFIG(accessibility)
self.cb_quality_audio.setAccessibleDescription("") self.cb_quality_audio.setAccessibleDescription("")
# endif // QT_CONFIG(accessibility)
self.cb_quality_audio.setCurrentText("") self.cb_quality_audio.setCurrentText("")
self.cb_quality_audio.setSizeAdjustPolicy(QComboBox.SizeAdjustPolicy.AdjustToContentsOnFirstShow) self.cb_quality_audio.setSizeAdjustPolicy(QComboBox.SizeAdjustPolicy.AdjustToContentsOnFirstShow)
self.cb_quality_audio.setPlaceholderText("") self.cb_quality_audio.setPlaceholderText("")
self.cb_quality_audio.setFrame(True) self.cb_quality_audio.setFrame(True)
self.lh_download.addWidget(self.cb_quality_audio) self.lh_download.addWidget(self.cb_quality_audio)
self.l_quality_video = QLabel(self.w_central) self.l_quality_video = QLabel(self.w_central)
self.l_quality_video.setObjectName("l_quality_video") self.l_quality_video.setObjectName("l_quality_video")
# if QT_CONFIG(tooltip)
self.l_quality_video.setToolTip("") self.l_quality_video.setToolTip("")
# endif // QT_CONFIG(tooltip)
# if QT_CONFIG(statustip)
self.l_quality_video.setStatusTip("") self.l_quality_video.setStatusTip("")
# endif // QT_CONFIG(statustip)
# if QT_CONFIG(whatsthis)
self.l_quality_video.setWhatsThis("") self.l_quality_video.setWhatsThis("")
# endif // QT_CONFIG(whatsthis)
# if QT_CONFIG(accessibility)
self.l_quality_video.setAccessibleName("") self.l_quality_video.setAccessibleName("")
# endif // QT_CONFIG(accessibility)
# if QT_CONFIG(accessibility)
self.l_quality_video.setAccessibleDescription("") self.l_quality_video.setAccessibleDescription("")
# endif // QT_CONFIG(accessibility)
self.l_quality_video.setText("Video") self.l_quality_video.setText("Video")
self.l_quality_video.setAlignment(Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignTrailing | Qt.AlignmentFlag.AlignVCenter) self.l_quality_video.setAlignment(
Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignTrailing | Qt.AlignmentFlag.AlignVCenter
)
self.lh_download.addWidget(self.l_quality_video) self.lh_download.addWidget(self.l_quality_video)
self.cb_quality_video = QComboBox(self.w_central) self.cb_quality_video = QComboBox(self.w_central)
self.cb_quality_video.setObjectName("cb_quality_video") self.cb_quality_video.setObjectName("cb_quality_video")
self.cb_quality_video.setMinimumSize(QSize(100, 0)) self.cb_quality_video.setMinimumSize(QSize(100, 0))
# if QT_CONFIG(tooltip)
self.cb_quality_video.setToolTip("") self.cb_quality_video.setToolTip("")
# endif // QT_CONFIG(tooltip)
# if QT_CONFIG(statustip)
self.cb_quality_video.setStatusTip("") self.cb_quality_video.setStatusTip("")
# endif // QT_CONFIG(statustip)
# if QT_CONFIG(whatsthis)
self.cb_quality_video.setWhatsThis("") self.cb_quality_video.setWhatsThis("")
# endif // QT_CONFIG(whatsthis)
# if QT_CONFIG(accessibility)
self.cb_quality_video.setAccessibleName("") self.cb_quality_video.setAccessibleName("")
# endif // QT_CONFIG(accessibility)
# if QT_CONFIG(accessibility)
self.cb_quality_video.setAccessibleDescription("") self.cb_quality_video.setAccessibleDescription("")
# endif // QT_CONFIG(accessibility)
self.cb_quality_video.setCurrentText("") self.cb_quality_video.setCurrentText("")
self.cb_quality_video.setSizeAdjustPolicy(QComboBox.SizeAdjustPolicy.AdjustToContentsOnFirstShow) self.cb_quality_video.setSizeAdjustPolicy(QComboBox.SizeAdjustPolicy.AdjustToContentsOnFirstShow)
self.cb_quality_video.setPlaceholderText("") self.cb_quality_video.setPlaceholderText("")
self.lh_download.addWidget(self.cb_quality_video) self.lh_download.addWidget(self.cb_quality_video)
# Start of manually added API Key UI
self.l_api_key = QLabel(self.w_central)
self.l_api_key.setObjectName("l_api_key")
self.l_api_key.setText("API Key")
self.l_api_key.setAlignment(Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignTrailing | Qt.AlignmentFlag.AlignVCenter)
self.lh_download.addWidget(self.l_api_key)
self.cb_api_key = QComboBox(self.w_central)
self.cb_api_key.setObjectName("cb_api_key")
self.cb_api_key.setMinimumSize(QSize(140, 0))
self.lh_download.addWidget(self.cb_api_key)
# End of manually added API Key UI
self.pb_download = QPushButton(self.w_central) self.pb_download = QPushButton(self.w_central)
self.pb_download.setObjectName("pb_download") self.pb_download.setObjectName("pb_download")
# if QT_CONFIG(tooltip)
self.pb_download.setToolTip("") self.pb_download.setToolTip("")
# endif // QT_CONFIG(tooltip)
# if QT_CONFIG(statustip)
self.pb_download.setStatusTip("") self.pb_download.setStatusTip("")
# endif // QT_CONFIG(statustip)
# if QT_CONFIG(whatsthis)
self.pb_download.setWhatsThis("") self.pb_download.setWhatsThis("")
# endif // QT_CONFIG(whatsthis)
# if QT_CONFIG(accessibility)
self.pb_download.setAccessibleName("") self.pb_download.setAccessibleName("")
# endif // QT_CONFIG(accessibility)
# if QT_CONFIG(accessibility)
self.pb_download.setAccessibleDescription("") self.pb_download.setAccessibleDescription("")
# endif // QT_CONFIG(accessibility)
self.pb_download.setText("Download") self.pb_download.setText("Download")
# if QT_CONFIG(shortcut)
self.pb_download.setShortcut("") self.pb_download.setShortcut("")
# endif // QT_CONFIG(shortcut)
self.lh_download.addWidget(self.pb_download) self.lh_download.addWidget(self.pb_download)
self.lh_download.setStretch(0, 5) self.lh_download.setStretch(0, 5)
self.lh_download.setStretch(2, 5) self.lh_download.setStretch(2, 5)
self.lh_download.setStretch(4, 15) self.lh_download.setStretch(4, 15)
self.lv_search_result.addLayout(self.lh_download) self.lv_search_result.addLayout(self.lh_download)
self.te_debug = QPlainTextEdit(self.w_central) self.te_debug = QPlainTextEdit(self.w_central)
self.te_debug.setObjectName("te_debug") self.te_debug.setObjectName("te_debug")
self.te_debug.setEnabled(True) self.te_debug.setEnabled(True)
@@ -245,15 +375,28 @@ class Ui_MainWindow:
self.te_debug.setSizePolicy(sizePolicy2) self.te_debug.setSizePolicy(sizePolicy2)
self.te_debug.setMaximumSize(QSize(16777215, 16777215)) self.te_debug.setMaximumSize(QSize(16777215, 16777215))
self.te_debug.setAcceptDrops(False) self.te_debug.setAcceptDrops(False)
# if QT_CONFIG(tooltip)
self.te_debug.setToolTip("") self.te_debug.setToolTip("")
# endif // QT_CONFIG(tooltip)
# if QT_CONFIG(statustip)
self.te_debug.setStatusTip("") self.te_debug.setStatusTip("")
# endif // QT_CONFIG(statustip)
# if QT_CONFIG(whatsthis)
self.te_debug.setWhatsThis("") self.te_debug.setWhatsThis("")
# endif // QT_CONFIG(whatsthis)
# if QT_CONFIG(accessibility)
self.te_debug.setAccessibleName("") self.te_debug.setAccessibleName("")
# endif // QT_CONFIG(accessibility)
# if QT_CONFIG(accessibility)
self.te_debug.setAccessibleDescription("") self.te_debug.setAccessibleDescription("")
# endif // QT_CONFIG(accessibility)
self.te_debug.setUndoRedoEnabled(False) self.te_debug.setUndoRedoEnabled(False)
self.te_debug.setReadOnly(True) self.te_debug.setReadOnly(True)
self.lv_search_result.addWidget(self.te_debug) self.lv_search_result.addWidget(self.te_debug)
self.horizontalLayout.addLayout(self.lv_search_result) self.horizontalLayout.addLayout(self.lv_search_result)
self.lv_info = QVBoxLayout() self.lv_info = QVBoxLayout()
self.lv_info.setObjectName("lv_info") self.lv_info.setObjectName("lv_info")
self.lv_info_item = QVBoxLayout() self.lv_info_item = QVBoxLayout()
@@ -273,9 +416,13 @@ class Ui_MainWindow:
self.l_pm_cover.setPixmap(QPixmap("default_album_image.png")) self.l_pm_cover.setPixmap(QPixmap("default_album_image.png"))
self.l_pm_cover.setScaledContents(True) self.l_pm_cover.setScaledContents(True)
self.l_pm_cover.setAlignment(Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignTop) self.l_pm_cover.setAlignment(Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignTop)
self.horizontalLayout_2.addWidget(self.l_pm_cover) self.horizontalLayout_2.addWidget(self.l_pm_cover)
self.lv_info_item.addLayout(self.horizontalLayout_2) self.lv_info_item.addLayout(self.horizontalLayout_2)
self.lv_info.addLayout(self.lv_info_item) self.lv_info.addLayout(self.lv_info_item)
self.lv_queue_download = QVBoxLayout() self.lv_queue_download = QVBoxLayout()
self.lv_queue_download.setObjectName("lv_queue_download") self.lv_queue_download.setObjectName("lv_queue_download")
self.l_h_queue_download = QLabel(self.w_central) self.l_h_queue_download = QLabel(self.w_central)
@@ -285,7 +432,9 @@ class Ui_MainWindow:
font.setItalic(False) font.setItalic(False)
font.setKerning(True) font.setKerning(True)
self.l_h_queue_download.setFont(font) self.l_h_queue_download.setFont(font)
self.lv_queue_download.addWidget(self.l_h_queue_download) self.lv_queue_download.addWidget(self.l_h_queue_download)
self.tr_queue_download = QTreeWidget(self.w_central) self.tr_queue_download = QTreeWidget(self.w_central)
__qtreewidgetitem4 = QTreeWidgetItem() __qtreewidgetitem4 = QTreeWidgetItem()
__qtreewidgetitem4.setText(0, "\ud83e\uddd1\u200d\ud83d\udcbb\ufe0f") __qtreewidgetitem4.setText(0, "\ud83e\uddd1\u200d\ud83d\udcbb\ufe0f")
@@ -303,7 +452,9 @@ class Ui_MainWindow:
self.tr_queue_download.setExpandsOnDoubleClick(False) self.tr_queue_download.setExpandsOnDoubleClick(False)
self.tr_queue_download.header().setProperty("showSortIndicator", False) self.tr_queue_download.header().setProperty("showSortIndicator", False)
self.tr_queue_download.header().setStretchLastSection(False) self.tr_queue_download.header().setStretchLastSection(False)
self.lv_queue_download.addWidget(self.tr_queue_download) self.lv_queue_download.addWidget(self.tr_queue_download)
self.horizontalLayout_4 = QHBoxLayout() self.horizontalLayout_4 = QHBoxLayout()
self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.pb_queue_download_remove = QPushButton(self.w_central) self.pb_queue_download_remove = QPushButton(self.w_central)
@@ -311,52 +462,94 @@ class Ui_MainWindow:
self.pb_queue_download_remove.setEnabled(True) self.pb_queue_download_remove.setEnabled(True)
icon = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.EditClear)) icon = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.EditClear))
self.pb_queue_download_remove.setIcon(icon) self.pb_queue_download_remove.setIcon(icon)
self.horizontalLayout_4.addWidget(self.pb_queue_download_remove) self.horizontalLayout_4.addWidget(self.pb_queue_download_remove)
self.pb_queue_download_toggle = QPushButton(self.w_central) self.pb_queue_download_toggle = QPushButton(self.w_central)
self.pb_queue_download_toggle.setObjectName("pb_queue_download_toggle") self.pb_queue_download_toggle.setObjectName("pb_queue_download_toggle")
icon1 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.MediaPlaybackPause)) icon1 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.MediaPlaybackPause))
self.pb_queue_download_toggle.setIcon(icon1) self.pb_queue_download_toggle.setIcon(icon1)
self.horizontalLayout_4.addWidget(self.pb_queue_download_toggle) self.horizontalLayout_4.addWidget(self.pb_queue_download_toggle)
self.lv_queue_download.addLayout(self.horizontalLayout_4) self.lv_queue_download.addLayout(self.horizontalLayout_4)
self.horizontalLayout_3 = QHBoxLayout() self.horizontalLayout_3 = QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.pb_queue_download_clear_finished = QPushButton(self.w_central) self.pb_queue_download_clear_finished = QPushButton(self.w_central)
self.pb_queue_download_clear_finished.setObjectName("pb_queue_download_clear_finished") self.pb_queue_download_clear_finished.setObjectName("pb_queue_download_clear_finished")
self.horizontalLayout_3.addWidget(self.pb_queue_download_clear_finished) self.horizontalLayout_3.addWidget(self.pb_queue_download_clear_finished)
self.pb_queue_download_clear_all = QPushButton(self.w_central) self.pb_queue_download_clear_all = QPushButton(self.w_central)
self.pb_queue_download_clear_all.setObjectName("pb_queue_download_clear_all") self.pb_queue_download_clear_all.setObjectName("pb_queue_download_clear_all")
self.horizontalLayout_3.addWidget(self.pb_queue_download_clear_all) self.horizontalLayout_3.addWidget(self.pb_queue_download_clear_all)
self.lv_queue_download.addLayout(self.horizontalLayout_3) self.lv_queue_download.addLayout(self.horizontalLayout_3)
self.lv_info.addLayout(self.lv_queue_download) self.lv_info.addLayout(self.lv_queue_download)
self.horizontalLayout.addLayout(self.lv_info) self.horizontalLayout.addLayout(self.lv_info)
self.horizontalLayout.setStretch(1, 50) self.horizontalLayout.setStretch(1, 50)
self.horizontalLayout.setStretch(2, 25) self.horizontalLayout.setStretch(2, 25)
MainWindow.setCentralWidget(self.w_central) MainWindow.setCentralWidget(self.w_central)
self.menubar = QMenuBar(MainWindow) self.menubar = QMenuBar(MainWindow)
self.menubar.setObjectName("menubar") self.menubar.setObjectName("menubar")
self.menubar.setGeometry(QRect(0, 0, 1200, 24)) self.menubar.setGeometry(QRect(0, 0, 1200, 24))
# if QT_CONFIG(tooltip)
self.menubar.setToolTip("") self.menubar.setToolTip("")
# endif // QT_CONFIG(tooltip)
# if QT_CONFIG(statustip)
self.menubar.setStatusTip("") self.menubar.setStatusTip("")
# endif // QT_CONFIG(statustip)
# if QT_CONFIG(whatsthis)
self.menubar.setWhatsThis("") self.menubar.setWhatsThis("")
# endif // QT_CONFIG(whatsthis)
# if QT_CONFIG(accessibility)
self.menubar.setAccessibleName("") self.menubar.setAccessibleName("")
# endif // QT_CONFIG(accessibility)
# if QT_CONFIG(accessibility)
self.menubar.setAccessibleDescription("") self.menubar.setAccessibleDescription("")
# endif // QT_CONFIG(accessibility)
self.m_file = QMenu(self.menubar) self.m_file = QMenu(self.menubar)
self.m_file.setObjectName("m_file") self.m_file.setObjectName("m_file")
# if QT_CONFIG(tooltip)
self.m_file.setToolTip("") self.m_file.setToolTip("")
# endif // QT_CONFIG(tooltip)
# if QT_CONFIG(statustip)
self.m_file.setStatusTip("") self.m_file.setStatusTip("")
# endif // QT_CONFIG(statustip)
# if QT_CONFIG(whatsthis)
self.m_file.setWhatsThis("") self.m_file.setWhatsThis("")
# endif // QT_CONFIG(whatsthis)
# if QT_CONFIG(accessibility)
self.m_file.setAccessibleName("") self.m_file.setAccessibleName("")
# endif // QT_CONFIG(accessibility)
# if QT_CONFIG(accessibility)
self.m_file.setAccessibleDescription("") self.m_file.setAccessibleDescription("")
# endif // QT_CONFIG(accessibility)
self.m_help = QMenu(self.menubar) self.m_help = QMenu(self.menubar)
self.m_help.setObjectName("m_help") self.m_help.setObjectName("m_help")
MainWindow.setMenuBar(self.menubar) MainWindow.setMenuBar(self.menubar)
self.statusbar = QStatusBar(MainWindow) self.statusbar = QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar") self.statusbar.setObjectName("statusbar")
# if QT_CONFIG(tooltip)
self.statusbar.setToolTip("") self.statusbar.setToolTip("")
# endif // QT_CONFIG(tooltip)
# if QT_CONFIG(statustip)
self.statusbar.setStatusTip("") self.statusbar.setStatusTip("")
# endif // QT_CONFIG(statustip)
# if QT_CONFIG(whatsthis)
self.statusbar.setWhatsThis("") self.statusbar.setWhatsThis("")
# endif // QT_CONFIG(whatsthis)
# if QT_CONFIG(accessibility)
self.statusbar.setAccessibleName("") self.statusbar.setAccessibleName("")
# endif // QT_CONFIG(accessibility)
# if QT_CONFIG(accessibility)
self.statusbar.setAccessibleDescription("") self.statusbar.setAccessibleDescription("")
# endif // QT_CONFIG(accessibility)
self.statusbar.setLayoutDirection(Qt.LayoutDirection.LeftToRight) self.statusbar.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
MainWindow.setStatusBar(self.statusbar) MainWindow.setStatusBar(self.statusbar)
@@ -411,4 +604,4 @@ class Ui_MainWindow:
self.m_file.setTitle(QCoreApplication.translate("MainWindow", "File", None)) self.m_file.setTitle(QCoreApplication.translate("MainWindow", "File", None))
self.m_help.setTitle(QCoreApplication.translate("MainWindow", "Help", None)) self.m_help.setTitle(QCoreApplication.translate("MainWindow", "Help", None))
# retranslateUi # retranslateUi
+35 -28
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>cb_api_key</class> <class>MainWindow</class>
<widget class="QMainWindow" name="cb_api_key"> <widget class="QMainWindow" name="MainWindow">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
@@ -59,13 +59,13 @@
<string notr="true"/> <string notr="true"/>
</property> </property>
<property name="editTriggers"> <property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set> <set>QAbstractItemView::EditTrigger::NoEditTriggers</set>
</property> </property>
<property name="showDropIndicator" stdset="0"> <property name="showDropIndicator" stdset="0">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="selectionMode"> <property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum> <enum>QAbstractItemView::SelectionMode::ExtendedSelection</enum>
</property> </property>
<property name="indentation"> <property name="indentation">
<number>10</number> <number>10</number>
@@ -195,9 +195,9 @@
</layout> </layout>
</item> </item>
<item> <item>
<layout class="QVBoxLayout" name="lv_search_result" stretch="0,0,0,0,0"> <layout class="QVBoxLayout" name="lv_search_result" stretch="0,0,0,0">
<property name="spacing"> <property name="spacing">
<number>7</number> <number>-1</number>
</property> </property>
<item> <item>
<layout class="QHBoxLayout" name="lh_search"> <layout class="QHBoxLayout" name="lh_search">
@@ -262,9 +262,9 @@
<string notr="true"/> <string notr="true"/>
</property> </property>
<property name="sizeAdjustPolicy"> <property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum> <enum>QComboBox::SizeAdjustPolicy::AdjustToContentsOnFirstShow</enum>
</property> </property>
<property name="placeholderText" stdset="0"> <property name="placeholderText">
<string notr="true"/> <string notr="true"/>
</property> </property>
</widget> </widget>
@@ -296,7 +296,7 @@
<item> <item>
<widget class="QTreeView" name="tr_results"> <widget class="QTreeView" name="tr_results">
<property name="editTriggers"> <property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set> <set>QAbstractItemView::EditTrigger::NoEditTriggers</set>
</property> </property>
<property name="showDropIndicator" stdset="0"> <property name="showDropIndicator" stdset="0">
<bool>false</bool> <bool>false</bool>
@@ -308,7 +308,7 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="selectionMode"> <property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum> <enum>QAbstractItemView::SelectionMode::ExtendedSelection</enum>
</property> </property>
<property name="indentation"> <property name="indentation">
<number>10</number> <number>10</number>
@@ -340,6 +340,9 @@
<property name="text"> <property name="text">
<string notr="true">Audio</string> <string notr="true">Audio</string>
</property> </property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@@ -369,14 +372,14 @@
<string notr="true"/> <string notr="true"/>
</property> </property>
<property name="sizeAdjustPolicy"> <property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum> <enum>QComboBox::SizeAdjustPolicy::AdjustToContentsOnFirstShow</enum>
</property>
<property name="placeholderText">
<string notr="true"/>
</property> </property>
<property name="frame"> <property name="frame">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="placeholderText" stdset="0">
<string notr="true"/>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@@ -399,6 +402,9 @@
<property name="text"> <property name="text">
<string notr="true">Video</string> <string notr="true">Video</string>
</property> </property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@@ -428,9 +434,9 @@
<string notr="true"/> <string notr="true"/>
</property> </property>
<property name="sizeAdjustPolicy"> <property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum> <enum>QComboBox::SizeAdjustPolicy::AdjustToContentsOnFirstShow</enum>
</property> </property>
<property name="placeholderText" stdset="0"> <property name="placeholderText">
<string notr="true"/> <string notr="true"/>
</property> </property>
</widget> </widget>
@@ -462,9 +468,6 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<widget class="QComboBox" name="comboBox"/>
</item>
<item> <item>
<widget class="QPlainTextEdit" name="te_debug"> <widget class="QPlainTextEdit" name="te_debug">
<property name="enabled"> <property name="enabled">
@@ -540,7 +543,7 @@
</size> </size>
</property> </property>
<property name="frameShape"> <property name="frameShape">
<enum>QFrame::NoFrame</enum> <enum>QFrame::Shape::NoFrame</enum>
</property> </property>
<property name="text"> <property name="text">
<string/> <string/>
@@ -551,6 +554,9 @@
<property name="scaledContents"> <property name="scaledContents">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignHCenter|Qt::AlignmentFlag::AlignTop</set>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>
@@ -563,7 +569,6 @@
<widget class="QLabel" name="l_h_queue_download"> <widget class="QLabel" name="l_h_queue_download">
<property name="font"> <property name="font">
<font> <font>
<weight>75</weight>
<italic>false</italic> <italic>false</italic>
<bold>true</bold> <bold>true</bold>
<kerning>true</kerning> <kerning>true</kerning>
@@ -577,7 +582,7 @@
<item> <item>
<widget class="QTreeWidget" name="tr_queue_download"> <widget class="QTreeWidget" name="tr_queue_download">
<property name="editTriggers"> <property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set> <set>QAbstractItemView::EditTrigger::NoEditTriggers</set>
</property> </property>
<property name="tabKeyNavigation"> <property name="tabKeyNavigation">
<bool>false</bool> <bool>false</bool>
@@ -589,10 +594,10 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="selectionMode"> <property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum> <enum>QAbstractItemView::SelectionMode::ExtendedSelection</enum>
</property> </property>
<property name="selectionBehavior"> <property name="selectionBehavior">
<enum>QAbstractItemView::SelectItems</enum> <enum>QAbstractItemView::SelectionBehavior::SelectRows</enum>
</property> </property>
<property name="rootIsDecorated"> <property name="rootIsDecorated">
<bool>false</bool> <bool>false</bool>
@@ -655,8 +660,7 @@
<string>Remove</string> <string>Remove</string>
</property> </property>
<property name="icon"> <property name="icon">
<iconset theme="QIcon::ThemeIcon::EditClear"> <iconset theme="QIcon::ThemeIcon::EditClear"/>
<normaloff>.</normaloff>.</iconset>
</property> </property>
</widget> </widget>
</item> </item>
@@ -667,8 +671,11 @@
</property> </property>
<property name="icon"> <property name="icon">
<iconset theme="QIcon::ThemeIcon::MediaPlaybackPause"/> <iconset theme="QIcon::ThemeIcon::MediaPlaybackPause"/>
<<<<<<< HEAD
<iconset theme="QIcon::ThemeIcon::MediaPlaybackStart"> <iconset theme="QIcon::ThemeIcon::MediaPlaybackStart">
<normaloff>.</normaloff>.</iconset> <normaloff>.</normaloff>.</iconset>
=======
>>>>>>> 13dddc7 (Refactor Dolby Atmos feature to be internal and seamless)
</property> </property>
</widget> </widget>
</item> </item>
@@ -704,7 +711,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1200</width> <width>1200</width>
<height>26</height> <height>24</height>
</rect> </rect>
</property> </property>
<property name="toolTip"> <property name="toolTip">
@@ -772,7 +779,7 @@
<string notr="true"/> <string notr="true"/>
</property> </property>
<property name="layoutDirection"> <property name="layoutDirection">
<enum>Qt::LeftToRight</enum> <enum>Qt::LayoutDirection::LeftToRight</enum>
</property> </property>
</widget> </widget>
<action name="a_preferences"> <action name="a_preferences">