This commit is contained in:
tsi-billypom 2024-08-16 11:16:55 -04:00
parent a22e246257
commit aea3a6cdc3
9 changed files with 108 additions and 26 deletions

View File

@ -15,16 +15,22 @@ import logging
class AddToPlaylistWindow(QDialog):
def __init__(self, list_options: dict, song_db_ids: list):
def __init__(self, song_db_ids: list):
super(AddToPlaylistWindow, self).__init__()
self.song_db_ids = song_db_ids
self.setWindowTitle("Add songs to playlist:")
self.setMinimumSize(400, 400)
# self.setMinimumSize(400, 400)
layout = QVBoxLayout()
playlist_dict: dict = {}
with DBA.DBAccess() as db:
data = db.query("SELECT id, name from playlist;", ())
for row in data:
playlist_dict[row[0]] = row[1]
self.item_dict = {}
self.listWidget = QListWidget(self)
for i, (k, v) in enumerate(list_options.items()):
for i, (k, v) in enumerate(playlist_dict.items()):
item_text = f"{i} | {v}"
item = QListWidgetItem(item_text)
self.listWidget.addItem(item)

View File

@ -0,0 +1,68 @@
import logging
from PyQt5.QtWidgets import (
QDialog,
QHBoxLayout,
QLineEdit,
QLabel,
QPushButton,
QVBoxLayout,
QListWidget,
QListWidgetItem,
)
from PyQt5.QtGui import QFont
import DBA
class ExportPlaylistWindow(QDialog):
def __init__(self):
super(ExportPlaylistWindow, self).__init__()
self.setWindowTitle("Export playlist")
layout = QVBoxLayout()
# button_layout = QHBoxLayout()
playlist_dict = {}
with DBA.DBAccess() as db:
data = db.query("SELECT id, name from playlist;", ())
for row in data:
playlist_dict[row[0]] = row[1]
self.item_dict = {}
self.listWidget = QListWidget(self)
for i, (k, v) in enumerate(playlist_dict.items()):
item_text = f"{i} | {v}"
item = QListWidgetItem(item_text)
self.listWidget.addItem(item)
self.item_dict[item_text] = k
# add ui elements to window
label = QLabel("Playlists")
label.setFont(QFont("Sans", weight=QFont.Bold))
layout.addWidget(label)
layout.addWidget(self.listWidget)
# Save button
save_button = QPushButton("Export")
save_button.clicked.connect(self.save)
layout.addWidget(save_button)
self.setLayout(layout)
self.show()
def save(self) -> None:
"""Exports the chosen database playlist to a .m3u file"""
value = self.input.text()
if value == "" or value is None:
self.close()
return
else:
try:
with DBA.DBAccess() as db:
db.execute("INSERT INTO playlist (name) VALUES (?);", (value,))
except Exception as e:
logging.error(
f"CreatePlaylistWindow.py save() | Could not create playlist: {e}"
)
self.close()
def cancel(self) -> None:
self.close()
return

View File

@ -175,15 +175,7 @@ class MusicTable(QTableView):
def add_selected_files_to_playlist(self):
"""Opens a playlist choice menu and adds the currently selected files to the chosen playlist"""
playlist_dict = {}
print(type(playlist_dict))
with DBA.DBAccess() as db:
data = db.query("SELECT id, name from playlist;", ())
for row in data:
playlist_dict[row[0]] = row[1]
playlist_choice_window = AddToPlaylistWindow(
playlist_dict, self.get_selected_songs_db_ids()
)
playlist_choice_window = AddToPlaylistWindow(self.get_selected_songs_db_ids())
playlist_choice_window.exec_()
def show_lyrics_menu(self):

View File

@ -7,3 +7,4 @@ from .LyricsWindow import LyricsWindow
from .AddToPlaylistWindow import AddToPlaylistWindow
from .CreatePlaylistWindow import CreatePlaylistWindow
from .PlaylistsPane import PlaylistsPane
from .ExportPlaylistWindow import ExportPlaylistWindow

17
main.py
View File

@ -28,6 +28,7 @@ from components import (
PreferencesWindow,
AudioVisualizer,
CreatePlaylistWindow,
ExportPlaylistWindow,
)
# Create ui.py file from Qt Designer
@ -97,6 +98,7 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
# FILE MENU
self.actionOpenFiles.triggered.connect(self.open_files) # Open files window
self.actionNewPlaylist.triggered.connect(self.create_playlist)
self.actionExportPlaylist.triggered.connect(self.export_playlist)
# EDIT MENU
# VIEW MENU
self.actionPreferences.triggered.connect(
@ -358,6 +360,21 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
create_playlist_window = CreatePlaylistWindow()
create_playlist_window.exec_()
def import_playlist(self) -> None:
"""
Imports a .m3u file, given a base path attempts to match playlist files to
database records that currently exist
"""
pass
def export_playlist(self) -> None:
"""
Export playlist window
Takes a certain database playlist and turns it into a .m3u file
"""
export_playlist_window = ExportPlaylistWindow()
export_playlist_window.exec_()
def open_preferences(self) -> None:
"""Opens the preferences window"""
preferences_window = PreferencesWindow(self.config)

View File

@ -1,12 +0,0 @@
#EXTM3U
#PLAYLIST:Playlist title
#EXTINF:100, Artist - Title
/path/to/file.mp3
#EXTINF:[length_of_song_in_seconds], Artist - Title
/path/to/file.mp3
# apparently also m3u can just be a list
#EXTM3U
/path/to/song.mp3
/path/to/song.mp3
/path/to/song.mp3

View File

@ -13,5 +13,5 @@ extensions = mp3,wav,ogg,flac
[table]
# Music table options
columns = title,artist,album,genre,codec,album_date,filepath
column_widths = 181,116,222,76,74,72,287
columns = title,artist,album,track_number,genre,codec,album_date,filepath
column_widths = 181,116,222,76,74,72,287,150

4
ui.py
View File

@ -192,8 +192,11 @@ class Ui_MainWindow(object):
self.actionDeleteDatabase.setObjectName("actionDeleteDatabase")
self.actionNewPlaylist = QtWidgets.QAction(MainWindow)
self.actionNewPlaylist.setObjectName("actionNewPlaylist")
self.actionExportPlaylist = QtWidgets.QAction(MainWindow)
self.actionExportPlaylist.setObjectName("actionExportPlaylist")
self.menuFile.addAction(self.actionOpenFiles)
self.menuFile.addAction(self.actionNewPlaylist)
self.menuFile.addAction(self.actionExportPlaylist)
self.menuEdit.addAction(self.actionPreferences)
self.menuQuick_Actions.addAction(self.actionScanLibraries)
self.menuQuick_Actions.addAction(self.actionDeleteLibrary)
@ -229,5 +232,6 @@ class Ui_MainWindow(object):
self.actionOpenFiles.setText(_translate("MainWindow", "Open file(s)"))
self.actionDeleteDatabase.setText(_translate("MainWindow", "Delete Database"))
self.actionNewPlaylist.setText(_translate("MainWindow", "New playlist"))
self.actionExportPlaylist.setText(_translate("MainWindow", "Export playlist"))
from components import AlbumArtGraphicsView, MusicTable, PlaylistsPane
from pyqtgraph import PlotWidget

6
ui.ui
View File

@ -308,6 +308,7 @@
</property>
<addaction name="actionOpenFiles"/>
<addaction name="actionNewPlaylist"/>
<addaction name="actionExportPlaylist"/>
</widget>
<widget class="QMenu" name="menuEdit">
<property name="title">
@ -367,6 +368,11 @@
<string>New playlist</string>
</property>
</action>
<action name="actionExportPlaylist">
<property name="text">
<string>Export playlist</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>