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
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())

View file

@ -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)

View file

@ -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)

View file

@ -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())

View file

@ -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

View file

@ -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)

View file

@ -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)