From 22ffd211df5200952a7ac2d1c427098fa7d86834 Mon Sep 17 00:00:00 2001 From: The Wobbler Date: Tue, 4 Feb 2025 14:43:08 +0100 Subject: [PATCH] Got it working, but it's not better than before... --- wobuzz/command_line.py | 3 ++- wobuzz/gui.py | 5 ++++- wobuzz/library/library.py | 8 ++------ wobuzz/main.py | 2 ++ wobuzz/player/player.py | 10 ++++++++++ wobuzz/player/playlist.py | 28 +++++++++++++++++++++------- wobuzz/ui/playlist.py | 10 +++++++--- 7 files changed, 48 insertions(+), 18 deletions(-) diff --git a/wobuzz/command_line.py b/wobuzz/command_line.py index 407f1f5..1b9ab75 100644 --- a/wobuzz/command_line.py +++ b/wobuzz/command_line.py @@ -20,6 +20,7 @@ def main(): from .main import Wobuzz app = Wobuzz() + app.post_init() if arguments.playlist: playlist = Playlist(app, "Temporary Playlist") @@ -49,7 +50,7 @@ def main(): app.library.playlists.remove(app.library.temporary_playlist) app.library.temporary_playlist = playlist - app.post_init() + app.library.load_playlist_views() sys.exit(app.qt_app.exec()) diff --git a/wobuzz/gui.py b/wobuzz/gui.py index bd67756..fad376f 100644 --- a/wobuzz/gui.py +++ b/wobuzz/gui.py @@ -50,7 +50,10 @@ class GUI: def on_track_change(self, previous_track, track): self.track_control.on_track_change(previous_track, track) - self.app.player.current_playlist.view.on_track_change(previous_track, track) + + for dock_id in self.app.player.current_playlist.views: + view = self.app.player.current_playlist.views[dock_id] + view.on_track_change(previous_track, track) def on_background_job_start(self, job: str): self.window.process_dock.job_started_signal.emit(job) diff --git a/wobuzz/library/library.py b/wobuzz/library/library.py index 6a60fe4..787b27d 100644 --- a/wobuzz/library/library.py +++ b/wobuzz/library/library.py @@ -43,13 +43,9 @@ class Library: playlist = Playlist(self.app, file_name.replace("_", " ").split(".")[0]) self.playlists.append(playlist) - playlist.load_from_m3u(path) - if playlist.title == "Temporary Playlist": self.temporary_playlist = playlist - self.load_playlist_views() - def load_playlist_views(self): for library_dock in self.library_docks: playlist_tabs: QTabWidget = library_dock.library_widget.playlist_tabs @@ -57,7 +53,7 @@ class Library: playlist_tabs.playlists = {} for playlist in self.playlists: - playlist_view = PlaylistView(playlist) + playlist_view = PlaylistView(playlist, library_dock) playlist_tabs.addTab(playlist_view, playlist.title) def on_exit(self, event): @@ -74,6 +70,6 @@ class Library: for library_dock in self.library_docks: playlist_tabs: QTabWidget = library_dock.library_widget.playlist_tabs - playlist_view = PlaylistView(playlist) + playlist_view = PlaylistView(playlist, library_dock) playlist_tabs.addTab(playlist_view, playlist.title) diff --git a/wobuzz/main.py b/wobuzz/main.py index 37b5176..31735b9 100644 --- a/wobuzz/main.py +++ b/wobuzz/main.py @@ -36,4 +36,6 @@ class Wobuzz: if __name__ == "__main__": wobuzz = Wobuzz() wobuzz.post_init() + wobuzz.library.load_playlist_views() + sys.exit(wobuzz.qt_app.exec()) diff --git a/wobuzz/player/player.py b/wobuzz/player/player.py index 9517862..8fcf749 100644 --- a/wobuzz/player/player.py +++ b/wobuzz/player/player.py @@ -1,5 +1,6 @@ #!/usr/bin/python3 +import time import threading import pygame.mixer import pygame.event @@ -174,6 +175,15 @@ class Player: def start_playlist(self, playlist): self.stop() + if not playlist.loaded: + playlist.load() + + while not playlist.has_tracks() and not playlist.loaded: # wait until first track is loaded + time.sleep(0.1) + + if not playlist.has_tracks(): + return + self.current_sound, self.current_sound_duration = playlist.set_track(0) # first track self.current_playlist = playlist diff --git a/wobuzz/player/playlist.py b/wobuzz/player/playlist.py index 20da8c1..f01be81 100644 --- a/wobuzz/player/playlist.py +++ b/wobuzz/player/playlist.py @@ -1,6 +1,7 @@ #!/usr/bin/python3 import os +import threading from PyQt6.QtCore import Qt from .track import Track @@ -18,7 +19,8 @@ class Playlist: self.tracks: list[Track] = [] self.current_track_index = 0 self.current_track: Track | None = None - self.view = None + self.views = {} # dict of id(LibraryDock): PlaylistView + self.loaded = False self.path = os.path.expanduser( f"{app.settings.library_path}/playlists/{self.title.replace(" ", "_")}.wbz.m3u" @@ -41,9 +43,13 @@ class Playlist: i += 1 - # set current track to the first track if there is no currently playing track - if self.current_track is None and self.has_tracks(): - self.current_track = self.tracks[0] + self.save() + + self.tracks = [] + + def load(self): + loading_thread = threading.Thread(target=self.load_from_m3u, args=(self.path,)) + loading_thread.start() def load_from_m3u(self, path): file = open(path, "r") @@ -64,14 +70,18 @@ class Playlist: continue - self.tracks.append(Track(self.app, line, cache=i==0)) # first track is cached + self.append_track(Track(self.app, line, cache=i==0)) # first track is cached i += 1 + print("kolupp") + # set current track to the first track if there is no currently playing track if self.current_track is None and self.has_tracks(): self.current_track = self.tracks[0] + self.loaded = True + def load_from_wbz(self, path): pass @@ -149,10 +159,14 @@ class Playlist: self.app.library.playlists.remove(self) def append_track(self, track): + for dock_id in self.views: + view = self.views[dock_id] + view.append_track(track) + self.tracks.append(track) - if self.view: - self.view.append_track(track) + print(track.tags.title) + def h_last_track(self): # get last track in history (only gets used in player.history) diff --git a/wobuzz/ui/playlist.py b/wobuzz/ui/playlist.py index 2cb74b9..57deee5 100644 --- a/wobuzz/ui/playlist.py +++ b/wobuzz/ui/playlist.py @@ -14,13 +14,15 @@ class PlaylistView(QTreeWidget): bold_font = QFont() bold_font.setBold(True) - def __init__(self, playlist, parent=None): + def __init__(self, playlist, dock, parent=None): super().__init__(parent) self.playlist = playlist + self.library_dock = dock + self.app = playlist.app - playlist.view = self + playlist.views[id(dock)] = self self.setDragDropMode(QAbstractItemView.DragDropMode.InternalMove) self.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection) @@ -39,7 +41,7 @@ class PlaylistView(QTreeWidget): self.setHeaderLabels(headers) - self.load_tracks() + #self.load_tracks() self.itemActivated.connect(self.on_track_activation) @@ -141,6 +143,8 @@ class PlaylistView(QTreeWidget): if track: playlist_tabs.setTabIcon(index, self.playing_mark) # mark this playlist + print(self.app.player.current_playlist.current_track_index) + # mark the current track in this playlist item = self.topLevelItem(self.app.player.current_playlist.current_track_index) item.setIcon(0, self.playing_mark)