Skip to content

Commit eafd55f

Browse files
authored
79 add all songs to a playlist (#81)
* add new cli command for add_all_to_playlist * add some logging * add more logging and unit test * add new feature to UI * change sort-playlist dialog button text
1 parent 75c733a commit eafd55f

15 files changed

+259
-30
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from generated.ui_playlist_selection_dialog import Ui_PlaylistSelectionDialog
2+
from PySide6.QtCore import Slot
3+
from PySide6.QtWidgets import QDialog
4+
from PySide6.QtWidgets import QDialogButtonBox
5+
from PySide6.QtWidgets import QMessageBox
6+
7+
8+
class AddAllToPlaylistDialog(QDialog, Ui_PlaylistSelectionDialog):
9+
def __init__(self, parent):
10+
super().__init__(parent)
11+
self.setupUi(self)
12+
13+
self.setWindowTitle("Select Playlist to Add All Songs To")
14+
self.enable_ok_button()
15+
self.playlistList.itemSelectionChanged.connect(self.enable_ok_button)
16+
self.shuffleCheckBox.hide()
17+
18+
self.all_playlists = parent.ytmusic.get_library_playlists(limit=None)
19+
self.playlistList.insertItems(0, [playlist["title"] for playlist in self.all_playlists])
20+
21+
def accept(self):
22+
selected_playlist = self.playlistList.selectedItems()
23+
if not selected_playlist:
24+
QMessageBox.critical(self, "Error", "No playlist selected!")
25+
return
26+
library_or_uploads = self.radioButtonGroup.checkedButton().text().lower()
27+
add_all_args = ["add-all-to-playlist", selected_playlist[0].text()] + [f"--{library_or_uploads}"]
28+
self.parentWidget().launch_process(add_all_args)
29+
30+
@Slot()
31+
def enable_ok_button(self):
32+
self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(len(self.playlistList.selectedItems()) > 0)

gui/src/main/python/generated/ui_checkbox_track_listing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
################################################################################
44
## Form generated from reading UI file 'checkbox_track_listing.ui'
55
##
6-
## Created by: Qt User Interface Compiler version 6.6.3
6+
## Created by: Qt User Interface Compiler version 6.8.0
77
##
88
## WARNING! All changes made in this file will be lost when recompiling UI file!
99
################################################################################

gui/src/main/python/generated/ui_main_window.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
################################################################################
44
## Form generated from reading UI file 'main_window.ui'
55
##
6-
## Created by: Qt User Interface Compiler version 6.6.3
6+
## Created by: Qt User Interface Compiler version 6.8.0
77
##
88
## WARNING! All changes made in this file will be lost when recompiling UI file!
99
################################################################################
@@ -126,6 +126,11 @@ def setupUi(self, MainWindow):
126126
font3 = QFont()
127127
font3.setPointSize(8)
128128
self.removeDupesButton.setFont(font3)
129+
self.addAllToPlaylistButton = QPushButton(self.centralWidget)
130+
self.addAllToPlaylistButton.setObjectName(u"addAllToPlaylistButton")
131+
self.addAllToPlaylistButton.setEnabled(True)
132+
self.addAllToPlaylistButton.setGeometry(QRect(280, 240, 101, 41))
133+
self.addAllToPlaylistButton.setFont(font3)
129134
MainWindow.setCentralWidget(self.centralWidget)
130135
self.menubar = QMenuBar(MainWindow)
131136
self.menubar.setObjectName(u"menubar")
@@ -151,6 +156,7 @@ def setupUi(self, MainWindow):
151156
self.sortPlaylistButton.setDefault(False)
152157
self.deleteHistoryButton.setDefault(False)
153158
self.removeDupesButton.setDefault(False)
159+
self.addAllToPlaylistButton.setDefault(False)
154160

155161

156162
QMetaObject.connectSlotsByName(MainWindow)
@@ -201,6 +207,10 @@ def retranslateUi(self, MainWindow):
201207
self.removeDupesButton.setStatusTip(QCoreApplication.translate("MainWindow", u"Remove duplicate tracks in a playlist.", None))
202208
#endif // QT_CONFIG(statustip)
203209
self.removeDupesButton.setText(QCoreApplication.translate("MainWindow", u"Remove Duplicates", None))
210+
#if QT_CONFIG(statustip)
211+
self.addAllToPlaylistButton.setStatusTip(QCoreApplication.translate("MainWindow", u"Add all library songs or uploads to a playlist.", None))
212+
#endif // QT_CONFIG(statustip)
213+
self.addAllToPlaylistButton.setText(QCoreApplication.translate("MainWindow", u"Add All to Playlist", None))
204214
self.menuSettings.setTitle(QCoreApplication.translate("MainWindow", u"File", None))
205215
# retranslateUi
206216

gui/src/main/python/generated/ui_playlist_selection_dialog.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
################################################################################
44
## Form generated from reading UI file 'playlist_selection_dialog.ui'
55
##
6-
## Created by: Qt User Interface Compiler version 6.6.3
6+
## Created by: Qt User Interface Compiler version 6.8.0
77
##
88
## WARNING! All changes made in this file will be lost when recompiling UI file!
99
################################################################################
@@ -15,9 +15,9 @@
1515
QFont, QFontDatabase, QGradient, QIcon,
1616
QImage, QKeySequence, QLinearGradient, QPainter,
1717
QPalette, QPixmap, QRadialGradient, QTransform)
18-
from PySide6.QtWidgets import (QAbstractButton, QApplication, QCheckBox, QDialog,
19-
QDialogButtonBox, QListWidget, QListWidgetItem, QSizePolicy,
20-
QWidget)
18+
from PySide6.QtWidgets import (QAbstractButton, QApplication, QButtonGroup, QCheckBox,
19+
QDialog, QDialogButtonBox, QLabel, QListWidget,
20+
QListWidgetItem, QRadioButton, QSizePolicy, QWidget)
2121

2222
class Ui_PlaylistSelectionDialog(object):
2323
def setupUi(self, PlaylistSelectionDialog):
@@ -38,6 +38,23 @@ def setupUi(self, PlaylistSelectionDialog):
3838
self.shuffleCheckBox = QCheckBox(PlaylistSelectionDialog)
3939
self.shuffleCheckBox.setObjectName(u"shuffleCheckBox")
4040
self.shuffleCheckBox.setGeometry(QRect(90, 260, 70, 17))
41+
self.radioButtonLibrary = QRadioButton(PlaylistSelectionDialog)
42+
self.radioButtonGroup = QButtonGroup(PlaylistSelectionDialog)
43+
self.radioButtonGroup.setObjectName(u"radioButtonGroup")
44+
self.radioButtonGroup.addButton(self.radioButtonLibrary)
45+
self.radioButtonLibrary.setObjectName(u"radioButtonLibrary")
46+
self.radioButtonLibrary.setEnabled(True)
47+
self.radioButtonLibrary.setGeometry(QRect(50, 270, 82, 17))
48+
self.radioButtonUploads = QRadioButton(PlaylistSelectionDialog)
49+
self.radioButtonGroup.addButton(self.radioButtonUploads)
50+
self.radioButtonUploads.setObjectName(u"radioButtonUploads")
51+
self.radioButtonUploads.setEnabled(True)
52+
self.radioButtonUploads.setGeometry(QRect(110, 270, 82, 17))
53+
self.radioButtonUploads.setChecked(True)
54+
self.radioButtonLabel = QLabel(PlaylistSelectionDialog)
55+
self.radioButtonLabel.setObjectName(u"radioButtonLabel")
56+
self.radioButtonLabel.setEnabled(True)
57+
self.radioButtonLabel.setGeometry(QRect(60, 250, 111, 20))
4158

4259
self.retranslateUi(PlaylistSelectionDialog)
4360
self.buttonBox.accepted.connect(PlaylistSelectionDialog.accept)
@@ -52,5 +69,8 @@ def retranslateUi(self, PlaylistSelectionDialog):
5269
self.shuffleCheckBox.setToolTip(QCoreApplication.translate("PlaylistSelectionDialog", u"Shuffle the playlist(s) instead of sorting.", None))
5370
#endif // QT_CONFIG(tooltip)
5471
self.shuffleCheckBox.setText(QCoreApplication.translate("PlaylistSelectionDialog", u"Shuffle", None))
72+
self.radioButtonLibrary.setText(QCoreApplication.translate("PlaylistSelectionDialog", u"Library", None))
73+
self.radioButtonUploads.setText(QCoreApplication.translate("PlaylistSelectionDialog", u"Uploads", None))
74+
self.radioButtonLabel.setText(QCoreApplication.translate("PlaylistSelectionDialog", u"Add all songs from...", None))
5575
# retranslateUi
5676

gui/src/main/python/generated/ui_preferences_dialog.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
################################################################################
44
## Form generated from reading UI file 'preferences_dialog.ui'
55
##
6-
## Created by: Qt User Interface Compiler version 6.6.3
6+
## Created by: Qt User Interface Compiler version 6.8.0
77
##
88
## WARNING! All changes made in this file will be lost when recompiling UI file!
99
################################################################################

gui/src/main/python/generated/ui_progress_dialog.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
################################################################################
44
## Form generated from reading UI file 'progress_dialog.ui'
55
##
6-
## Created by: Qt User Interface Compiler version 6.6.3
6+
## Created by: Qt User Interface Compiler version 6.8.0
77
##
88
## WARNING! All changes made in this file will be lost when recompiling UI file!
99
################################################################################

gui/src/main/python/generated/ui_track_listing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
################################################################################
44
## Form generated from reading UI file 'track_listing.ui'
55
##
6-
## Created by: Qt User Interface Compiler version 6.6.3
6+
## Created by: Qt User Interface Compiler version 6.8.0
77
##
88
## WARNING! All changes made in this file will be lost when recompiling UI file!
99
################################################################################

gui/src/main/python/main.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from typing import List
1414

1515
import requests
16+
from add_all_to_playlist_dialog import AddAllToPlaylistDialog
1617
from fbs_runtime import PUBLIC_SETTINGS
1718
from fbs_runtime.application_context import cached_property
1819
from fbs_runtime.application_context import is_frozen
@@ -110,6 +111,7 @@ def __init__(self):
110111
self.deleteAllButton.clicked.connect(self.prepare_to_invoke)
111112
self.sortPlaylistButton.clicked.connect(self.prepare_to_invoke)
112113
self.removeDupesButton.clicked.connect(self.prepare_to_invoke)
114+
self.addAllToPlaylistButton.clicked.connect(self.prepare_to_invoke)
113115

114116
# Create donate button
115117
self.donateLabel = ClickableLabel(self.centralWidget, "https://www.buymeacoffee.com/jewbix.cube")
@@ -224,6 +226,7 @@ def update_buttons(self):
224226
self.deleteAllButton.setEnabled(is_signed_in)
225227
self.sortPlaylistButton.setEnabled(is_signed_in)
226228
self.removeDupesButton.setEnabled(is_signed_in)
229+
self.addAllToPlaylistButton.setEnabled(is_signed_in)
227230

228231
@Slot()
229232
def account_button_clicked(self):
@@ -290,6 +293,10 @@ def show_dialog(self, args: List[str]):
290293
self.remove_duplicates_dialog = RemoveDuplicatesDialog(self)
291294
self.remove_duplicates_dialog.show()
292295

296+
elif args[0] == "add-all-to-playlist":
297+
self.add_all_to_playlist_dialog = AddAllToPlaylistDialog(self)
298+
self.add_all_to_playlist_dialog.show()
299+
293300
else:
294301
self.message("Showing confirmation dialog")
295302
if self.confirm(args) == QMessageBox.Ok:

gui/src/main/python/remove_duplicates_dialog.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ def __init__(self, parent):
2222
self.enable_ok_button()
2323
self.playlistList.itemSelectionChanged.connect(self.enable_ok_button)
2424
self.shuffleCheckBox.hide()
25+
self.radioButtonLabel.setVisible(False)
26+
self.radioButtonLibrary.setVisible(False)
27+
self.radioButtonUploads.setVisible(False)
2528

2629
self.all_playlists = parent.ytmusic.get_library_playlists(limit=None)
2730
self.playlistList.insertItems(0, [playlist["title"] for playlist in self.all_playlists])

gui/src/main/python/sort_playlists_dialog.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ def __init__(self, parent):
1212
self.setupUi(self)
1313

1414
self.setWindowTitle("Select Playlist(s) to Sort")
15-
self.buttonBox.button(QDialogButtonBox.Ok).setText("Next")
15+
self.radioButtonLabel.setVisible(False)
16+
self.radioButtonLibrary.setVisible(False)
17+
self.radioButtonUploads.setVisible(False)
1618
self.enable_ok_button()
1719
self.playlistList.itemSelectionChanged.connect(self.enable_ok_button)
1820
self.playlistList.setSelectionMode(QAbstractItemView.MultiSelection)

0 commit comments

Comments
 (0)