Implemented saving of playlists to disk.

This commit is contained in:
The Wobbler 2025-01-25 20:45:43 +01:00
parent a7fc19f98b
commit 1007ac045f
7 changed files with 62 additions and 12 deletions

View file

@ -19,13 +19,18 @@ def main():
app = Wobuzz()
if arguments.playlist:
app.library.temporary_playlist.tracks = []
app.library.temporary_playlist.view.clear()
app.library.temporary_playlist.load_from_m3u(arguments.playlist)
app.library.temporary_playlist.view.load_tracks()
if arguments.track:
app.library.temporary_playlist.tracks = []
app.library.temporary_playlist.view.clear()
app.library.temporary_playlist.load_from_paths(arguments.track)
app.library.temporary_playlist.view.load_tracks()
app.player.current_playlist = app.library.temporary_playlist
app.library.load_playlist_views()
sys.exit(app.qt_app.exec())

View file

@ -33,7 +33,15 @@ class GUI:
self.settings.update_all()
def connect(self):
self.window.closeEvent = self.app.utils.on_close
self.window.closeEvent = self.on_exit
def on_exit(self, event):
self.app.library.on_exit(event)
self.app.settings.window_size = (self.window.width(), self.window.height())
self.app.settings.window_maximized = self.window.isMaximized()
self.app.settings.save(self.app.utils.settings_location)
def on_settings_change(self, key, value):
self.settings.update_settings(key, value)

View file

@ -1,8 +1,7 @@
#!/usr/bin/python3
from PyQt6.QtCore import Qt
from PyQt6.QtGui import QIcon
from PyQt6.QtWidgets import QTabWidget, QTreeWidgetItem
import os
from PyQt6.QtWidgets import QTabWidget
from ..player.playlist import Playlist
from ..ui.library_dock import LibraryDock
from ..ui.playlist import PlaylistView
@ -22,6 +21,32 @@ class Library:
self.temporary_playlist = Playlist(self.app, "Temporary Playlist")
self.playlists = [self.temporary_playlist]
def load(self):
path_playlists = f"{self.app.settings.library_path}/playlists"
if not os.path.exists(path_playlists):
os.makedirs(path_playlists)
self.load_playlist_views()
return
folder_content = os.listdir(path_playlists)
for file_name in folder_content:
if file_name.endswith(".m3u"):
path = f"{path_playlists}/{file_name}"
if file_name == "Temporary_Playlist.wbz.m3u":
playlist = self.temporary_playlist
else:
playlist = Playlist(self.app, file_name.replace("_", " ").split(".")[0])
self.playlists.append(playlist)
playlist.load_from_m3u(path)
self.load_playlist_views()
def load_playlist_views(self):
for library_dock in self.library_docks:
playlist_tabs: QTabWidget = library_dock.library.playlist_tabs
@ -32,3 +57,7 @@ class Library:
playlist_view = PlaylistView(playlist)
playlist_tabs.addTab(playlist_view, playlist.title)
def on_exit(self, event):
for playlist in self.playlists:
playlist.save()

View file

@ -1,5 +1,6 @@
#!/usr/bin/python3
import os
import sys
from PyQt6.QtWidgets import QApplication
from wobbl_tools.data_file import load_dataclass_json
@ -16,6 +17,8 @@ class Wobuzz:
self.utils = Utils(self)
os.chdir(self.utils.home_path)
self.settings = load_dataclass_json(Settings, self.utils.settings_location, self, True, True)
self.settings.set_attribute_change_event(self.on_settings_change)
@ -27,6 +30,7 @@ class Wobuzz:
def post_init(self):
self.gui.track_control.track_progress_slider.post_init()
self.library.load()
def on_settings_change(self, key, value):
self.gui.on_settings_change(key, value)

View file

@ -17,6 +17,7 @@ class Player:
self.track_progress = TrackProgress(self.app)
playlists = []
self.current_playlist = Playlist(self.app, "None")
self.playing = False

View file

@ -98,3 +98,13 @@ class Playlist:
return self.current_track.sound, self.current_track.duration
def save(self):
wbz_data = ""
for track in self.tracks:
wbz_data += f"{track.path}\n"
wbz = open(f"{self.app.settings.library_path}/playlists/{self.title.replace(" ", "_")}.wbz.m3u", "w")
wbz.write(wbz_data)
wbz.close()

View file

@ -29,10 +29,3 @@ class Utils:
return output
def on_close(self, event):
self.app.settings.window_size = (self.app.gui.window.width(), self.app.gui.window.height())
self.app.settings.window_maximized = self.app.gui.window.isMaximized()
self.app.settings.save(self.settings_location)