From 0ca2547b542770c3c73a626e53244ea2bf6af292 Mon Sep 17 00:00:00 2001 From: 0x01FE <0x01fe@noreply.localhost> Date: Wed, 5 Nov 2025 13:16:51 -0600 Subject: [PATCH] New Buttons (#5) Added two new buttons to the player: - Favorite song button - Queue mode button Reviewed-on: https://git.0x01fe.net/0x01FE/subpy/pulls/5 --- .attachments/player.png | Bin 61607 -> 33930 bytes Navidrome.py | 15 +++++++ SubSonic.py | 5 ++- app.py | 84 +++++++++++++++++++++++++++++++++++++++- 4 files changed, 102 insertions(+), 2 deletions(-) diff --git a/.attachments/player.png b/.attachments/player.png index 1af698f25fe2a9a0a0cf3ccdef3c17ca3097337c..3e6979ac1989c71ad71d83d73cb9c2cbf9282fb7 100644 GIT binary patch literal 33930 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 literal 61607 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
`E{TpiNOrH3mKg9$}a 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 diff --git a/Navidrome.py b/Navidrome.py index ea0a837..5ef2107 100644 --- a/Navidrome.py +++ b/Navidrome.py @@ -80,3 +80,18 @@ class NavidromeAPI: return [SubSonic.Album(album_d) for album_d in response.json()] + def getSong(self, id: str): + url = self.base_url + '/api/song?' + + payload = { + "id" : id + } + + response = requests.get(url + self._encodePayload(payload), headers=self.auth_header) + + return response.json() + + def isSongStarred(self, id: str) -> bool: + info = self.getSong(id) + + return info[0]['starred'] diff --git a/SubSonic.py b/SubSonic.py index b298d5e..146ddc7 100644 --- a/SubSonic.py +++ b/SubSonic.py @@ -306,7 +306,7 @@ class SubpyConn: return starred # Returns a requests Response object, the data stream can be found in Response.content - def stream(self, song_id: str, maxBitRate: int | None = None) -> requests.Response: + def stream(self, song_id: str, maxBitRate: int | None = None, format: str | None = None) -> requests.Response: url = self.base_url + '/rest/stream?' payload = self._getBasePayload() @@ -314,6 +314,9 @@ class SubpyConn: if maxBitRate: payload['maxBitRate'] = maxBitRate + if format: + payload['format'] = format + payload['id'] = song_id return requests.get(url + self._encodePayload(payload), stream=True) diff --git a/app.py b/app.py index 1441aee..e829708 100644 --- a/app.py +++ b/app.py @@ -56,6 +56,12 @@ conn = SubSonic.SubpyConn(user, passw, MUSIC_SERVER_URL) pygame.mixer.init() +SONG_LIKED_CHAR = '♥' +SONG_NOT_LIKED_CHAR = '♡' +LOOP_CHAR = '⮔' +INFINITY_CHAR = '∞' +THREE_BARS_CHAR = '≡' + class AlbumSongs(Screen): BINDINGS = [ ('escape', 'die()', "Back"), @@ -1080,6 +1086,9 @@ class Player(Screen): def on_mount(self) -> None: app.sub_title = "Player" + pause_play: Button = self.query_one("#play_pause_track", Button) + pause_play.focus() + def update_song(self, song: SubSonic.Song) -> None: if song.album and song.title and song.artist: @@ -1098,6 +1107,11 @@ class Player(Screen): if cover_id: cover_art.get_cover_art(cover_id) + if song.id: + is_song_starred: bool = app.navidrome.isSongStarred(song.id) + like_song_button: Button = self.query_one('#like_track', Button) + like_song_button.label = SONG_LIKED_CHAR if is_song_starred else SONG_NOT_LIKED_CHAR + def compose(self) -> ComposeResult: yield Header(icon="") with Horizontal(id="headerbs"): @@ -1121,9 +1135,11 @@ class Player(Screen): yield TotalDuration(classes='playerProgressBarTotalTime') with Horizontal(id='playerButtons'): + yield Button(SONG_NOT_LIKED_CHAR, id='like_track', classes='playerButton') yield Button('|<', id='prev_track', classes='playerButton') yield Button('|>/||', id='play_pause_track', classes='playerButton') yield Button('>|', id='next_track', classes='playerButton') + yield Button(THREE_BARS_CHAR, id='loop_queue', classes='playerButton') yield Footer() @@ -1132,6 +1148,9 @@ class Player(Screen): app.sub_title = "Player" app.update_now_playing() + pause_play: Button = self.query_one("#play_pause_track", Button) + pause_play.focus() + @on(Button.Pressed, "#prev_track") def prev_track_pressed(self) -> None: app.action_rewind() @@ -1148,6 +1167,40 @@ class Player(Screen): # app.install_screen(QueueScreen, 'queue') app.push_screen(QueueScreen()) + @on(Button.Pressed, '#like_track') + def like_track(self) -> None: + song = app.currently_playing + if song: + + is_song_starred: bool = app.navidrome.isSongStarred(song.id) + like_song_button: Button = self.query_one('#like_track', Button) + + if not is_song_starred: + conn.star(song.id) + app.notify(f'Starred song "{song.title}"') + like_song_button.label = SONG_LIKED_CHAR + else: + conn.unstar(song.id) + app.notify(f'Unstarred song "{song.title}"') + like_song_button.label = SONG_NOT_LIKED_CHAR + + @on(Button.Pressed, '#loop_queue') + def loop_queue(self) -> None: + queue_button: Button = self.query_one('#loop_queue', Button) + + if app.queue_mode == 0: + app.queue_mode = 1 + queue_button.label = LOOP_CHAR + app.notify('Queue mode set to "Loop Queue"') + elif app.queue_mode == 1: + app.queue_mode = 2 + queue_button.label = INFINITY_CHAR + app.notify('Queue mode set to "Loop Song"') + elif app.queue_mode == 2: + app.queue_mode = 0 + queue_button.label = THREE_BARS_CHAR + app.notify('Queue mode set to "Queue"') + # Startup keyboard listener for media keys def listen_media_keys(queue: multiprocessing.Queue): @@ -1225,6 +1278,14 @@ class SubPy(App): check_playing_timer: Timer | None = None check_music_commands: Timer + """ + Modes: + 0: standard queue, is done when queue is done + 1: loop, loops queue after queue is done + 2: loop song, loops song + """ + queue_mode: int = 0 + def on_mount(self) -> None: self.title = "SubPy" self.switch_mode('main') @@ -1298,9 +1359,16 @@ class SubPy(App): def check_done_playing(self) -> None: if not pygame.mixer.music.get_busy() and not self.is_paused and self.currently_playing: + if self.queue_mode == 2: + self.play_song(app.currently_playing) + + if self.check_playing_timer: + self.check_playing_timer.stop() + return + self.play_history.append(self.currently_playing) - self.is_played = False + self.is_playing = False next_song: SubSonic.Song | None = None if self.user_queue: @@ -1308,6 +1376,13 @@ class SubPy(App): elif self.song_queue: next_song = self.song_queue.pop(0) + if not next_song and self.queue_mode == 1: + self.song_queue = self.play_history.copy() + if self.user_queue: + next_song = self.user_queue.pop(0) + elif self.song_queue: + next_song = self.song_queue.pop(0) + if next_song: self.play_song(next_song) @@ -1328,6 +1403,13 @@ class SubPy(App): elif self.song_queue: next_song = self.song_queue.pop(0) + if not next_song and self.queue_mode == 1: + self.song_queue = self.play_history.copy() + if self.user_queue: + next_song = self.user_queue.pop(0) + elif self.song_queue: + next_song = self.song_queue.pop(0) + if next_song: self.play_song(next_song)