diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml
index 4042edd..304d2fd 100644
--- a/.github/ISSUE_TEMPLATE/bug.yml
+++ b/.github/ISSUE_TEMPLATE/bug.yml
@@ -20,7 +20,7 @@ body:
- type: input
id: version
attributes:
- label: Version
+ label: Version App
description: What version of our software are you running?
placeholder: vX.Y.Z
validations:
diff --git a/tidal_dl_ng/constants.py b/tidal_dl_ng/constants.py
index 2e53eb7..e1780e3 100644
--- a/tidal_dl_ng/constants.py
+++ b/tidal_dl_ng/constants.py
@@ -36,9 +36,11 @@ class StreamManifestMimeType(Enum):
class CoverDimensions(Enum):
- Px320: str = "320x320"
- Px640: str = "640x640"
- Px1280: str = "1280x1280"
+ Px80: int = 80
+ Px160: int = 160
+ Px320: int = 320
+ Px640: int = 640
+ Px1280: int = 1280
class TidalLists(Enum):
diff --git a/tidal_dl_ng/download.py b/tidal_dl_ng/download.py
index 8b16cd4..f204d9b 100644
--- a/tidal_dl_ng/download.py
+++ b/tidal_dl_ng/download.py
@@ -21,7 +21,6 @@ from tidal_dl_ng.constants import (
EXTENSION_LYRICS,
REQUESTS_TIMEOUT_SEC,
AudioExtensions,
- CoverDimensions,
MediaType,
SkipExisting,
StreamManifestMimeType,
@@ -272,12 +271,6 @@ class Download:
# Move it.
shutil.move(tmp_lyrics_file_path, os.path.splitext(file_media_dst)[0] + EXTENSION_LYRICS)
- def cover_url(self, sid: str, dimension: CoverDimensions = CoverDimensions.Px320):
- if sid is None:
- return ""
-
- return f"https://resources.tidal.com/images/{sid.replace('-', '/')}/{dimension.value}.jpg"
-
def lyrics_write_file(self, file_path: str, lyrics: str) -> str:
result: str = file_path
@@ -332,9 +325,7 @@ class Download:
totaltrack=track.album.num_tracks if track.album and track.album.num_tracks else 1,
totaldisc=track.album.num_volumes if track.album and track.album.num_volumes else 1,
discnumber=track.volume_num if track.volume_num else 1,
- url_cover=(
- self.cover_url(track.album.cover, self.settings.data.metadata_cover_dimension) if track.album else ""
- ),
+ url_cover=track.album.image(self.settings.data.metadata_cover_dimension.value),
)
m.save()
diff --git a/tidal_dl_ng/gui.py b/tidal_dl_ng/gui.py
index 51a50dc..9c13e3f 100644
--- a/tidal_dl_ng/gui.py
+++ b/tidal_dl_ng/gui.py
@@ -6,6 +6,7 @@ from requests.exceptions import HTTPError
from tidal_dl_ng import __version__, update_available
from tidal_dl_ng.dialog import DialogLogin, DialogPreferences, DialogVersion
+from tidal_dl_ng.helper.gui import get_results_media_item, get_user_list_media_item
from tidal_dl_ng.helper.path import get_format_template
from tidal_dl_ng.helper.tidal import (
get_tidal_media_id,
@@ -17,6 +18,7 @@ from tidal_dl_ng.helper.tidal import (
search_results_all,
user_media_lists,
)
+from tidal_dl_ng.metadata import Metadata
try:
import qdarktheme
@@ -51,6 +53,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
threadpool: QtCore.QThreadPool
tray: QtWidgets.QSystemTrayIcon
spinner: QtWaitingSpinner
+ cover_url_current: str
s_spinner_start: QtCore.Signal = QtCore.Signal(QtWidgets.QWidget)
s_spinner_stop: QtCore.Signal = QtCore.Signal()
pb_item: QtWidgets.QProgressBar
@@ -83,6 +86,8 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
self._init_tree_results(self.tr_results)
self._init_tree_lists(self.tr_lists_user)
+ self._init_table_queue(self.ta_queue_dl)
+ self._init_info()
self._init_progressbar()
self._populate_quality(self.cb_quality_audio, Quality)
self._populate_quality(self.cb_quality_video, QualityVideo)
@@ -158,6 +163,9 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
# self.pb_progress.setVisible()
self.statusbar.addPermanentWidget(pb)
+ def _init_info(self):
+ self.l_pm_cover.setPixmap(QtGui.QPixmap("tidal_dl_ng/ui/default_album_image.png"))
+
def on_progress_reset(self):
self.pb_list.setValue(0)
self.pb_item.setValue(0)
@@ -187,8 +195,12 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
self.cb_search_type.setCurrentIndex(2)
def _init_tree_results(self, tree: QtWidgets.QTableWidget):
- tree.setColumnHidden(5, True)
tree.sortByColumn(0, QtCore.Qt.SortOrder.AscendingOrder)
+ tree.setColumnHidden(1, True)
+
+ def _init_table_queue(self, tree: QtWidgets.QTableWidget):
+ tree.sortByColumn(0, QtCore.Qt.SortOrder.AscendingOrder)
+ tree.setColumnHidden(1, True)
def tidal_user_lists(self):
# Start loading spinner
@@ -230,8 +242,8 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
info: str = item.sub_title
twi_child.setText(0, name)
- twi_child.setText(1, info)
- twi_child.setData(3, QtCore.Qt.ItemDataRole.UserRole, item)
+ twi_child.setData(1, QtCore.Qt.ItemDataRole.UserRole, item)
+ twi_child.setText(2, info)
# Stop load spinner
self.s_spinner_stop.emit()
@@ -240,8 +252,8 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def _init_tree_lists(self, tree: QtWidgets.QTreeWidget):
# Adjust Tree.
tree.setColumnWidth(0, 200)
- tree.setColumnWidth(1, 300)
- tree.setColumnHidden(2, True)
+ tree.setColumnHidden(1, True)
+ tree.setColumnWidth(2, 300)
tree.expandAll()
# Connect the contextmenu
@@ -295,14 +307,26 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
self.thread_it(self.on_download_list_media, point)
self.thread_it(self.list_items_show_result, point=point)
- def on_download_list_media(self, point: QtCore.QPoint):
+ def on_download_list_media(self, point: QtCore.QPoint = None):
self.pb_download.setEnabled(False)
self.pb_download.setText("Downloading...")
- item = self.tr_lists_user.itemAt(point)
- media = item.data(3, QtCore.Qt.ItemDataRole.UserRole)
+ item: QtWidgets.QTreeWidgetItem
- self.download(media, self.dl)
+ if point:
+ item = self.tr_lists_user.itemAt(point)
+ else:
+ items: [QtWidgets.QTreeWidgetItem] = self.tr_lists_user.selectedItems()
+
+ if len(items) == 0:
+ logger_gui.error("Please select a row first.")
+ else:
+ item = items[0]
+
+ if item:
+ media = get_user_list_media_item(item)
+
+ self.download(media, self.dl)
self.pb_download.setText("Download")
self.pb_download.setEnabled(True)
@@ -344,11 +368,11 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
# Populate child
child: QtWidgets.QTreeWidgetItem = QtWidgets.QTreeWidgetItem()
child.setText(0, index)
- child.setText(1, item.artist)
- child.setText(2, item.title)
- child.setText(3, item.album)
- child.setText(4, duration)
- child.setData(5, QtCore.Qt.ItemDataRole.UserRole, item.obj)
+ child.setData(1, QtCore.Qt.ItemDataRole.UserRole, item.obj)
+ child.setText(2, item.artist)
+ child.setText(3, item.title)
+ child.setText(4, item.album)
+ child.setText(5, duration)
if isinstance(item.obj, Mix | Playlist | Album | Artist):
# Add a disabled dummy child, so expansion arrow will appear. This Child will be replaced on expansion.
@@ -474,6 +498,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def _init_signals(self):
self.pb_download.clicked.connect(lambda: self.thread_it(self.on_download_results))
+ self.pb_download_list.clicked.connect(lambda: self.thread_it(self.on_download_list_media))
self.l_search.returnPressed.connect(
lambda: self.search_populate_results(self.l_search.text(), self.cb_search_type.currentData())
)
@@ -508,6 +533,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
# Results
self.tr_results.itemExpanded.connect(self.on_tr_results_expanded)
+ self.tr_results.itemClicked.connect(self.on_result_item_clicked)
def on_logout(self):
result: bool = self.tidal.logout()
@@ -542,12 +568,23 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
self.tidal.settings_apply()
def on_list_items_show(self, item: QtWidgets.QTreeWidgetItem):
- media_list: Album | Playlist = item.data(3, QtCore.Qt.ItemDataRole.UserRole)
+ media_list: Album | Playlist = item.data(1, QtCore.Qt.ItemDataRole.UserRole)
# Only if clicked item is not a top level item.
if media_list:
self.list_items_show_result(media_list)
+ def on_result_item_clicked(self, item: QtWidgets.QTreeWidgetItem, column: int) -> None:
+ media: Track | Video | Album | Artist = get_results_media_item(item)
+ cover_url: str = media.album.image()
+
+ if self.cover_url_current != cover_url:
+ self.cover_url_current = cover_url
+ data_cover: bytes = Metadata.cover_data(cover_url)
+ pixmap: QtGui.QPixmap = QtGui.QPixmap()
+ pixmap.loadFromData(data_cover)
+ self.l_pm_cover.setPixmap(pixmap)
+
def list_items_show_result(
self,
media_list: Album | Playlist | Mix | Artist | None = None,
@@ -556,7 +593,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
) -> None:
if point:
item = self.tr_lists_user.itemAt(point)
- media_list = item.data(3, QtCore.Qt.ItemDataRole.UserRole)
+ media_list = item.data(1, QtCore.Qt.ItemDataRole.UserRole)
# Get all results
media_items: [Track | Video | Album] = items_results_all(media_list)
@@ -582,11 +619,11 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
else:
# If it is an artist resolve it with all available albums of him
if len(items) == 1:
- tmp_media: QtWidgets.QTreeWidgetItem = items[0].data(5, QtCore.Qt.ItemDataRole.UserRole)
+ tmp_media: QtWidgets.QTreeWidgetItem = items[0].data(1, QtCore.Qt.ItemDataRole.UserRole)
if isinstance(tmp_media, Artist):
tmp_children: [QtWidgets.QTreeWidgetItem] = []
- is_dummy_child = not bool(items[0].child(0).data(5, QtCore.Qt.ItemDataRole.UserRole))
+ is_dummy_child = not bool(items[0].child(0).data(1, QtCore.Qt.ItemDataRole.UserRole))
# Use the expand function to retrieve all albums.
if is_dummy_child:
@@ -603,7 +640,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
items_pos_last = len(items) - 1
for item in items:
- media: Track | Album | Playlist | Video | Artist = item.data(5, QtCore.Qt.ItemDataRole.UserRole)
+ media: Track | Album | Playlist | Video | Artist = item.data(1, QtCore.Qt.ItemDataRole.UserRole)
# Skip only if Track item, skip option set and the item is not the last in the list.
download_delay: bool = bool(
isinstance(media, Track | Video)
@@ -650,7 +687,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
if load_children:
list_item.removeChild(list_item.child(0))
- media_list: [Mix | Album | Playlist | Artist] = list_item.data(5, QtCore.Qt.ItemDataRole.UserRole)
+ media_list: [Mix | Album | Playlist | Artist] = list_item.data(1, QtCore.Qt.ItemDataRole.UserRole)
self.list_items_show_result(media_list=media_list, parent=list_item)
diff --git a/tidal_dl_ng/helper/gui.py b/tidal_dl_ng/helper/gui.py
new file mode 100644
index 0000000..604772e
--- /dev/null
+++ b/tidal_dl_ng/helper/gui.py
@@ -0,0 +1,37 @@
+from PySide6 import QtCore, QtWidgets
+from tidalapi import Album, Mix, Playlist, Track, UserPlaylist, Video
+from tidalapi.artist import Artist
+
+
+def get_table_data(
+ item: QtWidgets.QTreeWidgetItem, column: int
+) -> Track | Video | Album | Artist | Mix | Playlist | UserPlaylist:
+ result: Track | Video | Album | Artist = item.data(column, QtCore.Qt.ItemDataRole.UserRole)
+
+ return result
+
+
+def get_results_media_item(item: QtWidgets.QTreeWidgetItem) -> Track | Video | Album | Artist:
+ result: Track | Video | Album | Artist = get_table_data(item, 1)
+
+ return result
+
+
+def get_user_list_media_item(item: QtWidgets.QTreeWidgetItem) -> Mix | Playlist | UserPlaylist:
+ result: Mix | Playlist | UserPlaylist = get_table_data(item, 1)
+
+ return result
+
+
+def set_table_data(
+ item: QtWidgets.QTreeWidgetItem, data: Track | Video | Album | Artist | Mix | Playlist | UserPlaylist, column: int
+):
+ item.setData(column, QtCore.Qt.ItemDataRole.UserRole, data)
+
+
+def set_results_media(item: QtWidgets.QTreeWidgetItem, media: Track | Video | Album | Artist):
+ set_table_data(item, media, 1)
+
+
+def set_user_list_media(item: QtWidgets.QTreeWidgetItem, media: Mix | Playlist | UserPlaylist):
+ set_table_data(item, media, 1)
diff --git a/tidal_dl_ng/metadata.py b/tidal_dl_ng/metadata.py
index 4506742..35029f8 100644
--- a/tidal_dl_ng/metadata.py
+++ b/tidal_dl_ng/metadata.py
@@ -142,7 +142,8 @@ class Metadata:
self.m.tags["\xa9wrt"] = ", ".join(self.composer) if self.composer else ""
self.m.tags["\xa9lyr"] = self.lyrics
- def cover_data(self, url: str = None, path_file: str = None) -> str | bytes:
+ @staticmethod
+ def cover_data(url: str = None, path_file: str = None) -> str | bytes:
result: str | bytes = ""
if url:
diff --git a/tidal_dl_ng/ui/default_album_image.png b/tidal_dl_ng/ui/default_album_image.png
new file mode 100644
index 0000000..0ab51f1
Binary files /dev/null and b/tidal_dl_ng/ui/default_album_image.png differ
diff --git a/tidal_dl_ng/ui/main.py b/tidal_dl_ng/ui/main.py
index bd21113..f346b8d 100644
--- a/tidal_dl_ng/ui/main.py
+++ b/tidal_dl_ng/ui/main.py
@@ -7,13 +7,13 @@
################################################################################
from PySide6.QtCore import QCoreApplication, QLocale, QMetaObject, QRect, QSize, Qt
-from PySide6.QtGui import QAction
+from PySide6.QtGui import QAction, QFont, QPixmap
from PySide6.QtWidgets import (
QAbstractItemView,
QComboBox,
+ QFrame,
QHBoxLayout,
QLabel,
- QLayout,
QLineEdit,
QMenu,
QMenuBar,
@@ -21,6 +21,8 @@ from PySide6.QtWidgets import (
QPushButton,
QSizePolicy,
QStatusBar,
+ QTableWidget,
+ QTableWidgetItem,
QTreeWidget,
QTreeWidgetItem,
QVBoxLayout,
@@ -32,7 +34,7 @@ class Ui_MainWindow:
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName("MainWindow")
- MainWindow.resize(900, 700)
+ MainWindow.resize(1200, 800)
self.a_preferences = QAction(MainWindow)
self.a_preferences.setObjectName("a_preferences")
self.a_preferences.setEnabled(True)
@@ -80,14 +82,11 @@ class Ui_MainWindow:
# endif // QT_CONFIG(accessibility)
self.horizontalLayout = QHBoxLayout(self.w_central)
self.horizontalLayout.setObjectName("horizontalLayout")
- self.lh_main = QHBoxLayout()
- self.lh_main.setObjectName("lh_main")
- self.lh_main.setSizeConstraint(QLayout.SetNoConstraint)
- self.verticalLayout = QVBoxLayout()
- self.verticalLayout.setObjectName("verticalLayout")
+ self.lv_list_user = QVBoxLayout()
+ self.lv_list_user.setObjectName("lv_list_user")
self.tr_lists_user = QTreeWidget(self.w_central)
__qtreewidgetitem = QTreeWidgetItem()
- __qtreewidgetitem.setText(1, "Info")
+ __qtreewidgetitem.setText(2, "Info")
__qtreewidgetitem.setText(0, "Name")
self.tr_lists_user.setHeaderItem(__qtreewidgetitem)
__qtreewidgetitem1 = QTreeWidgetItem(self.tr_lists_user)
@@ -121,8 +120,10 @@ class Ui_MainWindow:
self.tr_lists_user.header().setHighlightSections(True)
self.tr_lists_user.header().setProperty("showSortIndicator", True)
- self.verticalLayout.addWidget(self.tr_lists_user)
+ self.lv_list_user.addWidget(self.tr_lists_user)
+ self.lv_list_control = QHBoxLayout()
+ self.lv_list_control.setObjectName("lv_list_control")
self.pb_reload_user_lists = QPushButton(self.w_central)
self.pb_reload_user_lists.setObjectName("pb_reload_user_lists")
sizePolicy1 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
@@ -131,9 +132,18 @@ class Ui_MainWindow:
sizePolicy1.setHeightForWidth(self.pb_reload_user_lists.sizePolicy().hasHeightForWidth())
self.pb_reload_user_lists.setSizePolicy(sizePolicy1)
- self.verticalLayout.addWidget(self.pb_reload_user_lists)
+ self.lv_list_control.addWidget(self.pb_reload_user_lists)
- self.lh_main.addLayout(self.verticalLayout)
+ self.pb_download_list = QPushButton(self.w_central)
+ self.pb_download_list.setObjectName("pb_download_list")
+ sizePolicy1.setHeightForWidth(self.pb_download_list.sizePolicy().hasHeightForWidth())
+ self.pb_download_list.setSizePolicy(sizePolicy1)
+
+ self.lv_list_control.addWidget(self.pb_download_list)
+
+ self.lv_list_user.addLayout(self.lv_list_control)
+
+ self.horizontalLayout.addLayout(self.lv_list_user)
self.lv_search_result = QVBoxLayout()
# ifndef Q_OS_MAC
@@ -377,17 +387,91 @@ class Ui_MainWindow:
self.lv_search_result.addWidget(self.te_debug)
- self.lh_main.addLayout(self.lv_search_result)
+ self.horizontalLayout.addLayout(self.lv_search_result)
- self.lh_main.setStretch(0, 40)
- self.lh_main.setStretch(1, 60)
+ self.lv_info = QVBoxLayout()
+ self.lv_info.setObjectName("lv_info")
+ self.lv_info_item = QVBoxLayout()
+ self.lv_info_item.setObjectName("lv_info_item")
+ self.horizontalLayout_2 = QHBoxLayout()
+ self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+ self.l_pm_cover = QLabel(self.w_central)
+ self.l_pm_cover.setObjectName("l_pm_cover")
+ sizePolicy3 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
+ sizePolicy3.setHorizontalStretch(0)
+ sizePolicy3.setVerticalStretch(0)
+ sizePolicy3.setHeightForWidth(self.l_pm_cover.sizePolicy().hasHeightForWidth())
+ self.l_pm_cover.setSizePolicy(sizePolicy3)
+ self.l_pm_cover.setMaximumSize(QSize(280, 280))
+ self.l_pm_cover.setBaseSize(QSize(0, 0))
+ self.l_pm_cover.setFrameShape(QFrame.NoFrame)
+ self.l_pm_cover.setPixmap(QPixmap("default_album_image.png"))
+ self.l_pm_cover.setScaledContents(True)
+ self.l_pm_cover.setAlignment(Qt.AlignHCenter | Qt.AlignTop)
- self.horizontalLayout.addLayout(self.lh_main)
+ self.horizontalLayout_2.addWidget(self.l_pm_cover)
+ self.lv_info_item.addLayout(self.horizontalLayout_2)
+
+ self.lv_info.addLayout(self.lv_info_item)
+
+ self.lv_queue_dl = QVBoxLayout()
+ self.lv_queue_dl.setObjectName("lv_queue_dl")
+ self.l_h_queue_dl = QLabel(self.w_central)
+ self.l_h_queue_dl.setObjectName("l_h_queue_dl")
+ font = QFont()
+ font.setBold(True)
+ font.setItalic(False)
+ font.setKerning(True)
+ self.l_h_queue_dl.setFont(font)
+
+ self.lv_queue_dl.addWidget(self.l_h_queue_dl)
+
+ self.ta_queue_dl = QTableWidget(self.w_central)
+ if self.ta_queue_dl.columnCount() < 5:
+ self.ta_queue_dl.setColumnCount(5)
+ __qtablewidgetitem = QTableWidgetItem()
+ __qtablewidgetitem.setTextAlignment(Qt.AlignLeading | Qt.AlignVCenter)
+ self.ta_queue_dl.setHorizontalHeaderItem(0, __qtablewidgetitem)
+ __qtablewidgetitem1 = QTableWidgetItem()
+ self.ta_queue_dl.setHorizontalHeaderItem(1, __qtablewidgetitem1)
+ __qtablewidgetitem2 = QTableWidgetItem()
+ __qtablewidgetitem2.setTextAlignment(Qt.AlignLeading | Qt.AlignVCenter)
+ self.ta_queue_dl.setHorizontalHeaderItem(2, __qtablewidgetitem2)
+ __qtablewidgetitem3 = QTableWidgetItem()
+ __qtablewidgetitem3.setTextAlignment(Qt.AlignLeading | Qt.AlignVCenter)
+ self.ta_queue_dl.setHorizontalHeaderItem(3, __qtablewidgetitem3)
+ __qtablewidgetitem4 = QTableWidgetItem()
+ __qtablewidgetitem4.setTextAlignment(Qt.AlignLeading | Qt.AlignVCenter)
+ self.ta_queue_dl.setHorizontalHeaderItem(4, __qtablewidgetitem4)
+ self.ta_queue_dl.setObjectName("ta_queue_dl")
+ self.ta_queue_dl.setEditTriggers(QAbstractItemView.NoEditTriggers)
+ self.ta_queue_dl.setTabKeyNavigation(False)
+ self.ta_queue_dl.setProperty("showDropIndicator", False)
+ self.ta_queue_dl.setDragDropOverwriteMode(False)
+ self.ta_queue_dl.setSelectionMode(QAbstractItemView.ExtendedSelection)
+ self.ta_queue_dl.setSelectionBehavior(QAbstractItemView.SelectRows)
+ self.ta_queue_dl.setSortingEnabled(True)
+ self.ta_queue_dl.verticalHeader().setProperty("showSortIndicator", True)
+
+ self.lv_queue_dl.addWidget(self.ta_queue_dl)
+
+ self.pb_queue_item_remove = QPushButton(self.w_central)
+ self.pb_queue_item_remove.setObjectName("pb_queue_item_remove")
+ self.pb_queue_item_remove.setEnabled(False)
+
+ self.lv_queue_dl.addWidget(self.pb_queue_item_remove)
+
+ self.lv_info.addLayout(self.lv_queue_dl)
+
+ self.horizontalLayout.addLayout(self.lv_info)
+
+ self.horizontalLayout.setStretch(1, 50)
+ self.horizontalLayout.setStretch(2, 25)
MainWindow.setCentralWidget(self.w_central)
self.menubar = QMenuBar(MainWindow)
self.menubar.setObjectName("menubar")
- self.menubar.setGeometry(QRect(0, 0, 900, 24))
+ self.menubar.setGeometry(QRect(0, 0, 1200, 24))
# if QT_CONFIG(tooltip)
self.menubar.setToolTip("")
# endif // QT_CONFIG(tooltip)
@@ -464,7 +548,7 @@ class Ui_MainWindow:
self.a_logout.setText(QCoreApplication.translate("MainWindow", "Logout", None))
self.a_updates_check.setText(QCoreApplication.translate("MainWindow", "Check for Updates", None))
___qtreewidgetitem = self.tr_lists_user.headerItem()
- ___qtreewidgetitem.setText(2, QCoreApplication.translate("MainWindow", "obj", None))
+ ___qtreewidgetitem.setText(1, QCoreApplication.translate("MainWindow", "obj", None))
__sortingEnabled = self.tr_lists_user.isSortingEnabled()
self.tr_lists_user.setSortingEnabled(False)
@@ -477,14 +561,29 @@ class Ui_MainWindow:
self.tr_lists_user.setSortingEnabled(__sortingEnabled)
self.pb_reload_user_lists.setText(QCoreApplication.translate("MainWindow", "Reload", None))
+ self.pb_download_list.setText(QCoreApplication.translate("MainWindow", "Download List", None))
___qtreewidgetitem4 = self.tr_results.headerItem()
- ___qtreewidgetitem4.setText(5, QCoreApplication.translate("MainWindow", "obj", None))
- ___qtreewidgetitem4.setText(4, QCoreApplication.translate("MainWindow", "Duration", None))
- ___qtreewidgetitem4.setText(3, QCoreApplication.translate("MainWindow", "Album", None))
- ___qtreewidgetitem4.setText(2, QCoreApplication.translate("MainWindow", "Title", None))
- ___qtreewidgetitem4.setText(1, QCoreApplication.translate("MainWindow", "Artist", None))
+ ___qtreewidgetitem4.setText(6, QCoreApplication.translate("MainWindow", "Quality", None))
+ ___qtreewidgetitem4.setText(5, QCoreApplication.translate("MainWindow", "Duration", None))
+ ___qtreewidgetitem4.setText(4, QCoreApplication.translate("MainWindow", "Album", None))
+ ___qtreewidgetitem4.setText(3, QCoreApplication.translate("MainWindow", "Title", None))
+ ___qtreewidgetitem4.setText(2, QCoreApplication.translate("MainWindow", "Artist", None))
+ ___qtreewidgetitem4.setText(1, QCoreApplication.translate("MainWindow", "obj", None))
___qtreewidgetitem4.setText(0, QCoreApplication.translate("MainWindow", "#", None))
self.te_debug.setPlaceholderText(QCoreApplication.translate("MainWindow", "Logs...", None))
+ self.l_pm_cover.setText("")
+ self.l_h_queue_dl.setText(QCoreApplication.translate("MainWindow", "Download Queue", None))
+ ___qtablewidgetitem = self.ta_queue_dl.horizontalHeaderItem(0)
+ ___qtablewidgetitem.setText(QCoreApplication.translate("MainWindow", "#", None))
+ ___qtablewidgetitem1 = self.ta_queue_dl.horizontalHeaderItem(1)
+ ___qtablewidgetitem1.setText(QCoreApplication.translate("MainWindow", "obj", None))
+ ___qtablewidgetitem2 = self.ta_queue_dl.horizontalHeaderItem(2)
+ ___qtablewidgetitem2.setText(QCoreApplication.translate("MainWindow", "Name", None))
+ ___qtablewidgetitem3 = self.ta_queue_dl.horizontalHeaderItem(3)
+ ___qtablewidgetitem3.setText(QCoreApplication.translate("MainWindow", "Type", None))
+ ___qtablewidgetitem4 = self.ta_queue_dl.horizontalHeaderItem(4)
+ ___qtablewidgetitem4.setText(QCoreApplication.translate("MainWindow", "Quality", None))
+ self.pb_queue_item_remove.setText(QCoreApplication.translate("MainWindow", "Remove", None))
self.m_file.setTitle(QCoreApplication.translate("MainWindow", "File", None))
self.m_help.setTitle(QCoreApplication.translate("MainWindow", "Help", None))
diff --git a/tidal_dl_ng/ui/main.ui b/tidal_dl_ng/ui/main.ui
index 8bfe727..1e83207 100644
--- a/tidal_dl_ng/ui/main.ui
+++ b/tidal_dl_ng/ui/main.ui
@@ -6,8 +6,8 @@
0
0
- 900
- 700
+ 1200
+ 800
@@ -38,132 +38,129 @@
-
+
-
-
-
- QLayout::SetNoConstraint
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ QAbstractItemView::NoEditTriggers
+
+
+ false
+
+
+ 10
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+
+ Name
+
+
+
+
+
+
+
+
+
+
+
+
+
+ obj
+
+
+
+
+ Info
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QAbstractItemView::NoEditTriggers
-
-
- false
-
-
- 10
-
-
- true
-
-
- true
-
-
- true
-
-
- true
-
-
- true
-
-
-
- Name
-
-
-
-
-
-
-
-
-
-
-
-
-
- Info
-
-
-
-
-
-
-
-
-
-
-
-
-
- obj
-
-
-
-
-
- Playlists
-
-
-
-
-
-
-
-
- ItemIsEnabled
-
-
- -
-
- Mixes
-
-
-
-
-
-
-
-
- ItemIsEnabled
-
-
- -
-
- Favorites
-
-
-
-
-
-
-
-
- ItemIsEnabled
-
-
-
+
+ Playlists
+
+
+
+
+
+
+
+
+ ItemIsEnabled
+
+ -
+
+ Mixes
+
+
+
+
+
+
+
+
+ ItemIsEnabled
+
+
+ -
+
+ Favorites
+
+
+
+
+
+
+
+
+ ItemIsEnabled
+
+
+
+
+ -
+
-
@@ -177,308 +174,32 @@
-
-
- -
-
-
- -1
-
-
-
-
-
-
-
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Type and press ENTER to search...
-
-
- true
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Search
-
-
-
-
-
-
-
-
- -
-
-
- QAbstractItemView::NoEditTriggers
-
-
- false
-
-
- false
-
-
- false
-
-
- QAbstractItemView::ExtendedSelection
-
-
- 10
-
-
- true
-
-
- true
-
-
- false
-
-
-
- #
-
-
-
-
- Artist
-
-
-
-
- Title
-
-
-
-
- Album
-
-
-
-
- Duration
-
-
-
-
- obj
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Audio
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Video
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Download
-
-
-
-
-
-
-
-
- -
-
-
- true
-
+
-
+
0
0
-
-
- 16777215
- 16777215
-
+
+ Download List
+
+
+
+
+
+
+ -
+
+
+ -1
+
+
-
+
+
-
+
false
@@ -497,14 +218,450 @@
-
- false
+
+
-
- true
+
+
- Logs...
+ Type and press ENTER to search...
+
+
+ true
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Search
+
+
+
+
+
+
+
+
+ -
+
+
+ QAbstractItemView::NoEditTriggers
+
+
+ false
+
+
+ false
+
+
+ false
+
+
+ QAbstractItemView::ExtendedSelection
+
+
+ 10
+
+
+ true
+
+
+ true
+
+
+ false
+
+
+
+ #
+
+
+
+
+ obj
+
+
+
+
+ Artist
+
+
+
+
+ Title
+
+
+
+
+ Album
+
+
+
+
+ Duration
+
+
+
+
+ Quality
+
+
+
+
+ -
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Audio
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Video
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Download
+
+
+
+
+
+
+
+
+ -
+
+
+ true
+
+
+
+ 0
+ 0
+
+
+
+
+ 16777215
+ 16777215
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+ true
+
+
+ Logs...
+
+
+
+
+
+ -
+
+
-
+
+
-
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 280
+ 280
+
+
+
+
+ 0
+ 0
+
+
+
+ QFrame::NoFrame
+
+
+
+
+
+ default_album_image.png
+
+
+ true
+
+
+ Qt::AlignHCenter|Qt::AlignTop
+
+
+
+
+
+
+
+ -
+
+
-
+
+
+
+ false
+ true
+ true
+
+
+
+ Download Queue
+
+
+
+ -
+
+
+ QAbstractItemView::NoEditTriggers
+
+
+ false
+
+
+ false
+
+
+ false
+
+
+ QAbstractItemView::ExtendedSelection
+
+
+ QAbstractItemView::SelectRows
+
+
+ true
+
+
+ true
+
+
+
+ #
+
+
+ AlignLeading|AlignVCenter
+
+
+
+
+ obj
+
+
+
+
+ Name
+
+
+ AlignLeading|AlignVCenter
+
+
+
+
+ Type
+
+
+ AlignLeading|AlignVCenter
+
+
+
+
+ Quality
+
+
+ AlignLeading|AlignVCenter
+
+
+
+
+ -
+
+
+ false
+
+
+ Remove
@@ -519,7 +676,7 @@
0
0
- 900
+ 1200
24