From c3f7d87e679ecd9c5ccdfabe2904b0e6e85773c5 Mon Sep 17 00:00:00 2001 From: x3 Date: Sun, 6 Sep 2026 08:50:30 +0000 Subject: [PATCH] fix: Playlists Pagination + Player Fehlermeldungen - Playlists: Alle werden jetzt geladen (Pagination) - Player: Fehlermeldung wenn kein Geraet aktiv - next/previous/repeat/shuffle zeigen Fehler statt stillschweigend zuversagen --- spotify_cli/client.py | 15 ++++++++++++++- spotify_cli/player.py | 10 +++++++--- spotify_cli/ui.py | 33 ++++++++++++++++++++------------- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/spotify_cli/client.py b/spotify_cli/client.py index a835a60..3f2b02c 100644 --- a/spotify_cli/client.py +++ b/spotify_cli/client.py @@ -76,7 +76,7 @@ class SpotifyClient: data["context_uri"] = context_uri if uris: data["uris"] = uris - if offset: + if offset is not None: data["offset"] = offset if position_ms is not None: data["position_ms"] = position_ms @@ -145,6 +145,19 @@ class SpotifyClient: def get_playlists(self, limit=50, offset=0): return self._get("/me/playlists", {"limit": limit, "offset": offset}) + def get_all_playlists(self): + all_items = [] + offset = 0 + limit = 50 + while True: + data = self.get_playlists(limit=limit, offset=offset) + items = data.get("items", []) + all_items.extend(items) + if len(items) < limit: + break + offset += limit + return all_items + def get_playlist(self, playlist_id): return self._get(f"/playlists/{playlist_id}") diff --git a/spotify_cli/player.py b/spotify_cli/player.py index 1d9e736..3ca50b5 100644 --- a/spotify_cli/player.py +++ b/spotify_cli/player.py @@ -58,7 +58,7 @@ class Player: def toggle_play(self): if not self.current_playback: - return + raise Exception("Kein Wiedergabegeraet aktiv") if self.current_playback.get("is_playing"): self.client.pause() else: @@ -67,11 +67,15 @@ class Player: self.refresh() def next(self): + if not self.current_playback: + raise Exception("Kein Wiedergabegeraet aktiv") self.client.next_track() time.sleep(0.5) self.refresh() def previous(self): + if not self.current_playback: + raise Exception("Kein Wiedergabegeraet aktiv") self.client.previous_track() time.sleep(0.5) self.refresh() @@ -101,7 +105,7 @@ class Player: def toggle_repeat(self): if not self.current_playback: - return + raise Exception("Kein Wiedergabegeraet aktiv") state = self.current_playback.get("repeat_state", "off") new_state = "track" if state == "off" else "off" self.client.set_repeat(new_state) @@ -109,7 +113,7 @@ class Player: def toggle_shuffle(self): if not self.current_playback: - return + raise Exception("Kein Wiedergabegeraet aktiv") state = not self.current_playback.get("shuffle_state", False) self.client.set_shuffle(state) self.refresh() diff --git a/spotify_cli/ui.py b/spotify_cli/ui.py index 47123fb..e30de70 100644 --- a/spotify_cli/ui.py +++ b/spotify_cli/ui.py @@ -435,19 +435,26 @@ class UI: self.loading = True self.draw() try: - data = self.client.get_playlists(limit=50) - items = [] - for p in data.get("items", []): - items.append({ - "type": "playlist", - "id": p["id"], - "name": p["name"], - "tracks": p.get("tracks", {}).get("total", 0), - "owner": p.get("owner", {}).get("display_name", ""), - "uri": p["uri"], - }) - self.content_items = items - self.playlists_cache = items + all_items = [] + offset = 0 + limit = 50 + while True: + data = self.client.get_playlists(limit=limit, offset=offset) + items = data.get("items", []) + for p in items: + all_items.append({ + "type": "playlist", + "id": p["id"], + "name": p["name"], + "tracks": p.get("tracks", {}).get("total", 0), + "owner": p.get("owner", {}).get("display_name", ""), + "uri": p["uri"], + }) + if len(items) < limit: + break + offset += limit + self.content_items = all_items + self.playlists_cache = all_items except Exception as e: self.content_items = [] self.show_message(f"Fehler: {e}")