diff --git a/components/AddToPlaylistWindow.py b/components/AddToPlaylistWindow.py
index 66848e8..53a2b7d 100644
--- a/components/AddToPlaylistWindow.py
+++ b/components/AddToPlaylistWindow.py
@@ -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)
diff --git a/components/ExportPlaylistWindow.py b/components/ExportPlaylistWindow.py
new file mode 100644
index 0000000..157b16c
--- /dev/null
+++ b/components/ExportPlaylistWindow.py
@@ -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
diff --git a/components/MusicTable.py b/components/MusicTable.py
index 11c25e5..3d56ba9 100644
--- a/components/MusicTable.py
+++ b/components/MusicTable.py
@@ -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):
diff --git a/components/__init__.py b/components/__init__.py
index ed9e8d5..0735531 100644
--- a/components/__init__.py
+++ b/components/__init__.py
@@ -7,3 +7,4 @@ from .LyricsWindow import LyricsWindow
from .AddToPlaylistWindow import AddToPlaylistWindow
from .CreatePlaylistWindow import CreatePlaylistWindow
from .PlaylistsPane import PlaylistsPane
+from .ExportPlaylistWindow import ExportPlaylistWindow
diff --git a/main.py b/main.py
index c899c08..ba886ce 100644
--- a/main.py
+++ b/main.py
@@ -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)
diff --git a/playlist_example.m3u b/playlist_example.m3u
deleted file mode 100644
index 7bbdca9..0000000
--- a/playlist_example.m3u
+++ /dev/null
@@ -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
diff --git a/sample_config.ini b/sample_config.ini
index 5949539..7255209 100644
--- a/sample_config.ini
+++ b/sample_config.ini
@@ -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
diff --git a/ui.py b/ui.py
index 1e1c66f..e0aacae 100644
--- a/ui.py
+++ b/ui.py
@@ -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
diff --git a/ui.ui b/ui.ui
index 3d3685d..2078078 100644
--- a/ui.ui
+++ b/ui.ui
@@ -308,6 +308,7 @@
+