diff --git a/wobuzz/library/library.py b/wobuzz/library/library.py index 21a76f9..57af107 100644 --- a/wobuzz/library/library.py +++ b/wobuzz/library/library.py @@ -15,7 +15,7 @@ class Library: def __init__(self, app): self.app = app - self.main_library_dock = LibraryDock() + self.main_library_dock = LibraryDock(self) self.library_docks = [self.main_library_dock] self.temporary_playlist = Playlist(self.app, "Temporary Playlist") @@ -49,7 +49,7 @@ class Library: def load_playlist_views(self): for library_dock in self.library_docks: - playlist_tabs: QTabWidget = library_dock.library.playlist_tabs + playlist_tabs: QTabWidget = library_dock.library_widget.playlist_tabs playlist_tabs.playlists = {} @@ -61,3 +61,13 @@ class Library: for playlist in self.playlists: playlist.save() + def new_playlist(self): + playlist = Playlist(self.app, self.app.utils.unique_name("New Playlist")) + self.playlists.append(playlist) + + for library_dock in self.library_docks: + playlist_tabs: QTabWidget = library_dock.library_widget.playlist_tabs + + playlist_view = PlaylistView(playlist) + playlist_tabs.addTab(playlist_view, playlist.title) + diff --git a/wobuzz/player/playlist.py b/wobuzz/player/playlist.py index 1f368b6..aaad8ae 100644 --- a/wobuzz/player/playlist.py +++ b/wobuzz/player/playlist.py @@ -26,7 +26,8 @@ class Playlist: i += 1 - if self.current_track is None: # 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(): self.current_track = self.tracks[0] def load_from_m3u(self, path): @@ -52,7 +53,8 @@ class Playlist: i += 1 - if self.current_track is None: # 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(): self.current_track = self.tracks[0] def load_from_wbz(self, path): diff --git a/wobuzz/ui/library.py b/wobuzz/ui/library.py index 79ee8ae..5bce076 100644 --- a/wobuzz/ui/library.py +++ b/wobuzz/ui/library.py @@ -1,15 +1,28 @@ #!/usr/bin/python3 -from PyQt6.QtWidgets import QToolBox, QLabel, QFrame, QTabWidget +from PyQt6.QtCore import Qt +from PyQt6.QtGui import QIcon +from PyQt6.QtWidgets import QToolBox, QLabel, QTabWidget, QToolButton class Library(QToolBox): - def __init__(self, parent=None): + def __init__(self, library, parent=None): super().__init__(parent) + self.library = library + self.playlist_tabs = QTabWidget() + self.playlist_tabs.setMovable(True) + self.addItem(self.playlist_tabs, "Playlists") + self.create_playlist = QToolButton(self) + + plus_icon = QIcon.fromTheme(QIcon.ThemeIcon.ListAdd) + self.create_playlist.setIcon(plus_icon) + + self.playlist_tabs.setCornerWidget(self.create_playlist) + label = QLabel() self.addItem(label, "Genres") label = QLabel() @@ -19,3 +32,5 @@ class Library(QToolBox): label = QLabel() self.addItem(label, "Tracks") + self.create_playlist.pressed.connect(self.library.new_playlist) + diff --git a/wobuzz/ui/library_dock.py b/wobuzz/ui/library_dock.py index 2bb768d..404667b 100644 --- a/wobuzz/ui/library_dock.py +++ b/wobuzz/ui/library_dock.py @@ -6,15 +6,17 @@ from .library import Library class LibraryDock(QDockWidget): - def __init__(self, parent=None): + def __init__(self, library, parent=None): super().__init__(parent) + self.library = library + self.setAllowedAreas( Qt.DockWidgetArea.LeftDockWidgetArea | Qt.DockWidgetArea.RightDockWidgetArea | Qt.DockWidgetArea.BottomDockWidgetArea ) - self.library = Library(self) - self.setWidget(self.library) + self.library_widget = Library(library, self) + self.setWidget(self.library_widget) diff --git a/wobuzz/ui/track_control.py b/wobuzz/ui/track_control.py index b30032b..ff0539e 100644 --- a/wobuzz/ui/track_control.py +++ b/wobuzz/ui/track_control.py @@ -11,6 +11,8 @@ class TrackControl(QToolBar): self.app = app + self.setWindowTitle("Track Control") + self.play_icon = QIcon.fromTheme(QIcon.ThemeIcon.MediaPlaybackStart) self.pause_icon = QIcon.fromTheme(QIcon.ThemeIcon.MediaPlaybackPause) diff --git a/wobuzz/utils.py b/wobuzz/utils.py index 8626fbd..f9c0dde 100644 --- a/wobuzz/utils.py +++ b/wobuzz/utils.py @@ -11,6 +11,7 @@ class Utils: def __init__(self, app): self.app = app + self.unique_names = {} def format_time(self, ms): seconds = int(ms / 1000) % 60 @@ -29,3 +30,19 @@ class Utils: return output + def unique_name(self, name: str) -> str: + """ + Makes a name unique by adding a number to it if the name already exists. + """ + + if name in self.unique_names: + num_duplicates = self.unique_names[name] + self.unique_names[name] += 1 + + name = f"{name} {str(num_duplicates).zfill(2)}" + + else: + self.unique_names[name] = 1 + + return name +