Got it working, but it's not better than before...

This commit is contained in:
The Wobbler 2025-02-04 14:43:08 +01:00
parent 6134c21ce4
commit 22ffd211df
7 changed files with 48 additions and 18 deletions

View file

@ -20,6 +20,7 @@ def main():
from .main import Wobuzz from .main import Wobuzz
app = Wobuzz() app = Wobuzz()
app.post_init()
if arguments.playlist: if arguments.playlist:
playlist = Playlist(app, "Temporary Playlist") playlist = Playlist(app, "Temporary Playlist")
@ -49,7 +50,7 @@ def main():
app.library.playlists.remove(app.library.temporary_playlist) app.library.playlists.remove(app.library.temporary_playlist)
app.library.temporary_playlist = playlist app.library.temporary_playlist = playlist
app.post_init() app.library.load_playlist_views()
sys.exit(app.qt_app.exec()) sys.exit(app.qt_app.exec())

View file

@ -50,7 +50,10 @@ class GUI:
def on_track_change(self, previous_track, track): def on_track_change(self, previous_track, track):
self.track_control.on_track_change(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): def on_background_job_start(self, job: str):
self.window.process_dock.job_started_signal.emit(job) self.window.process_dock.job_started_signal.emit(job)

View file

@ -43,13 +43,9 @@ class Library:
playlist = Playlist(self.app, file_name.replace("_", " ").split(".")[0]) playlist = Playlist(self.app, file_name.replace("_", " ").split(".")[0])
self.playlists.append(playlist) self.playlists.append(playlist)
playlist.load_from_m3u(path)
if playlist.title == "Temporary Playlist": if playlist.title == "Temporary Playlist":
self.temporary_playlist = playlist self.temporary_playlist = playlist
self.load_playlist_views()
def load_playlist_views(self): def load_playlist_views(self):
for library_dock in self.library_docks: for library_dock in self.library_docks:
playlist_tabs: QTabWidget = library_dock.library_widget.playlist_tabs playlist_tabs: QTabWidget = library_dock.library_widget.playlist_tabs
@ -57,7 +53,7 @@ class Library:
playlist_tabs.playlists = {} playlist_tabs.playlists = {}
for playlist in self.playlists: for playlist in self.playlists:
playlist_view = PlaylistView(playlist) playlist_view = PlaylistView(playlist, library_dock)
playlist_tabs.addTab(playlist_view, playlist.title) playlist_tabs.addTab(playlist_view, playlist.title)
def on_exit(self, event): def on_exit(self, event):
@ -74,6 +70,6 @@ class Library:
for library_dock in self.library_docks: for library_dock in self.library_docks:
playlist_tabs: QTabWidget = library_dock.library_widget.playlist_tabs 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) playlist_tabs.addTab(playlist_view, playlist.title)

View file

@ -36,4 +36,6 @@ class Wobuzz:
if __name__ == "__main__": if __name__ == "__main__":
wobuzz = Wobuzz() wobuzz = Wobuzz()
wobuzz.post_init() wobuzz.post_init()
wobuzz.library.load_playlist_views()
sys.exit(wobuzz.qt_app.exec()) sys.exit(wobuzz.qt_app.exec())

View file

@ -1,5 +1,6 @@
#!/usr/bin/python3 #!/usr/bin/python3
import time
import threading import threading
import pygame.mixer import pygame.mixer
import pygame.event import pygame.event
@ -174,6 +175,15 @@ class Player:
def start_playlist(self, playlist): def start_playlist(self, playlist):
self.stop() 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_sound, self.current_sound_duration = playlist.set_track(0) # first track
self.current_playlist = playlist self.current_playlist = playlist

View file

@ -1,6 +1,7 @@
#!/usr/bin/python3 #!/usr/bin/python3
import os import os
import threading
from PyQt6.QtCore import Qt from PyQt6.QtCore import Qt
from .track import Track from .track import Track
@ -18,7 +19,8 @@ class Playlist:
self.tracks: list[Track] = [] self.tracks: list[Track] = []
self.current_track_index = 0 self.current_track_index = 0
self.current_track: Track | None = None self.current_track: Track | None = None
self.view = None self.views = {} # dict of id(LibraryDock): PlaylistView
self.loaded = False
self.path = os.path.expanduser( self.path = os.path.expanduser(
f"{app.settings.library_path}/playlists/{self.title.replace(" ", "_")}.wbz.m3u" f"{app.settings.library_path}/playlists/{self.title.replace(" ", "_")}.wbz.m3u"
@ -41,9 +43,13 @@ class Playlist:
i += 1 i += 1
# set current track to the first track if there is no currently playing track self.save()
if self.current_track is None and self.has_tracks():
self.current_track = self.tracks[0] 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): def load_from_m3u(self, path):
file = open(path, "r") file = open(path, "r")
@ -64,14 +70,18 @@ class Playlist:
continue 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 i += 1
print("kolupp")
# set current track to the first track if there is no currently playing track # set current track to the first track if there is no currently playing track
if self.current_track is None and self.has_tracks(): if self.current_track is None and self.has_tracks():
self.current_track = self.tracks[0] self.current_track = self.tracks[0]
self.loaded = True
def load_from_wbz(self, path): def load_from_wbz(self, path):
pass pass
@ -149,10 +159,14 @@ class Playlist:
self.app.library.playlists.remove(self) self.app.library.playlists.remove(self)
def append_track(self, track): def append_track(self, track):
for dock_id in self.views:
view = self.views[dock_id]
view.append_track(track)
self.tracks.append(track) self.tracks.append(track)
if self.view: print(track.tags.title)
self.view.append_track(track)
def h_last_track(self): def h_last_track(self):
# get last track in history (only gets used in player.history) # get last track in history (only gets used in player.history)

View file

@ -14,13 +14,15 @@ class PlaylistView(QTreeWidget):
bold_font = QFont() bold_font = QFont()
bold_font.setBold(True) bold_font.setBold(True)
def __init__(self, playlist, parent=None): def __init__(self, playlist, dock, parent=None):
super().__init__(parent) super().__init__(parent)
self.playlist = playlist self.playlist = playlist
self.library_dock = dock
self.app = playlist.app self.app = playlist.app
playlist.view = self playlist.views[id(dock)] = self
self.setDragDropMode(QAbstractItemView.DragDropMode.InternalMove) self.setDragDropMode(QAbstractItemView.DragDropMode.InternalMove)
self.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection) self.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection)
@ -39,7 +41,7 @@ class PlaylistView(QTreeWidget):
self.setHeaderLabels(headers) self.setHeaderLabels(headers)
self.load_tracks() #self.load_tracks()
self.itemActivated.connect(self.on_track_activation) self.itemActivated.connect(self.on_track_activation)
@ -141,6 +143,8 @@ class PlaylistView(QTreeWidget):
if track: if track:
playlist_tabs.setTabIcon(index, self.playing_mark) # mark this playlist 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 # mark the current track in this playlist
item = self.topLevelItem(self.app.player.current_playlist.current_track_index) item = self.topLevelItem(self.app.player.current_playlist.current_track_index)
item.setIcon(0, self.playing_mark) item.setIcon(0, self.playing_mark)