diff --git a/wobuzz/command_line.py b/wobuzz/command_line.py index f30bf31..4351d9e 100644 --- a/wobuzz/command_line.py +++ b/wobuzz/command_line.py @@ -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()) diff --git a/wobuzz/gui.py b/wobuzz/gui.py index 6595057..300f3e1 100644 --- a/wobuzz/gui.py +++ b/wobuzz/gui.py @@ -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) diff --git a/wobuzz/library/library.py b/wobuzz/library/library.py index ade85c6..21a76f9 100644 --- a/wobuzz/library/library.py +++ b/wobuzz/library/library.py @@ -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() + diff --git a/wobuzz/main.py b/wobuzz/main.py index 0a7cfe8..10dfea7 100644 --- a/wobuzz/main.py +++ b/wobuzz/main.py @@ -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) diff --git a/wobuzz/player/player.py b/wobuzz/player/player.py index 1940c96..1bcc9a4 100644 --- a/wobuzz/player/player.py +++ b/wobuzz/player/player.py @@ -17,6 +17,7 @@ class Player: self.track_progress = TrackProgress(self.app) + playlists = [] self.current_playlist = Playlist(self.app, "None") self.playing = False diff --git a/wobuzz/player/playlist.py b/wobuzz/player/playlist.py index d8eb36a..1f368b6 100644 --- a/wobuzz/player/playlist.py +++ b/wobuzz/player/playlist.py @@ -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() + diff --git a/wobuzz/utils.py b/wobuzz/utils.py index 297b053..8626fbd 100644 --- a/wobuzz/utils.py +++ b/wobuzz/utils.py @@ -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) - -