From 3bb1c15b25b4e8ce22994828ea2c5fe98d5a5ef4 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Thu, 23 Nov 2023 16:38:24 +0100 Subject: [PATCH] Fixes for slimproto cli and wiim pro streamers (#934) --- .../server/providers/chromecast/__init__.py | 8 +++++-- .../server/providers/slimproto/cli.py | 24 +++++++++---------- .../server/providers/slimproto/models.py | 13 +++++++++- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/music_assistant/server/providers/chromecast/__init__.py b/music_assistant/server/providers/chromecast/__init__.py index 8cabdabe..5cb1e885 100644 --- a/music_assistant/server/providers/chromecast/__init__.py +++ b/music_assistant/server/providers/chromecast/__init__.py @@ -34,7 +34,7 @@ from music_assistant.common.models.enums import ( from music_assistant.common.models.errors import PlayerUnavailableError, QueueEmpty from music_assistant.common.models.player import DeviceInfo, Player from music_assistant.common.models.queue_item import QueueItem -from music_assistant.constants import CONF_PLAYERS, MASS_LOGO_ONLINE +from music_assistant.constants import CONF_LOG_LEVEL, CONF_PLAYERS, MASS_LOGO_ONLINE from music_assistant.server.models.player_provider import PlayerProvider from .helpers import CastStatusListener, ChromecastInfo @@ -130,7 +130,11 @@ class ChromecastProvider(PlayerProvider): self.mass.zeroconf, ) # silence pychromecast logging - logging.getLogger("pychromecast").setLevel(self.logger.level) + log_level = self.config.get_value(CONF_LOG_LEVEL) + if log_level == "DEBUG": + logging.getLogger("pychromecast").setLevel(logging.DEBUG) + else: + logging.getLogger("pychromecast").setLevel(logging.INFO) # start discovery in executor await self.mass.loop.run_in_executor(None, self.browser.start_discovery) diff --git a/music_assistant/server/providers/slimproto/cli.py b/music_assistant/server/providers/slimproto/cli.py index 07348bcf..3113ce71 100644 --- a/music_assistant/server/providers/slimproto/cli.py +++ b/music_assistant/server/providers/slimproto/cli.py @@ -901,20 +901,20 @@ class LmsCli: next_index = (queue.current_index or 0) - int(arg.split("-")[1]) self.mass.create_task(self.mass.player_queues.play_index, player_id, next_index) return + if subcommand == "shuffle" and arg == "?": + return queue.shuffle_enabled if subcommand == "shuffle": - self.mass.player_queues.set_shuffle(queue.queue_id, not queue.shuffle_enabled) + self.mass.player_queues.set_shuffle(queue.queue_id, bool(arg)) return + if subcommand == "repeat" and arg == "?": + return str(REPEATMODE_MAP[queue.repeat_mode]) if subcommand == "repeat": - if queue.repeat_mode == RepeatMode.ALL: - new_repeat_mode = RepeatMode.OFF - elif queue.repeat_mode == RepeatMode.OFF: - new_repeat_mode = RepeatMode.ONE - else: - new_repeat_mode = RepeatMode.ALL + repeat_map = {val: key for key, val in REPEATMODE_MAP.items()} + new_repeat_mode = repeat_map.get(int(arg)) self.mass.player_queues.set_repeat(queue.queue_id, new_repeat_mode) return if subcommand == "crossfade": - self.mass.player_queues.set_crossfade(queue.queue_id, not queue.crossfade_enabled) + self.mass.player_queues.set_crossfade(queue.queue_id, bool(arg)) return self.logger.warning("Unhandled command: playlist/%s", subcommand) @@ -1034,16 +1034,16 @@ class LmsCli: return # queue related button commands queue = self.mass.player_queues.get_active_queue(player_id) - if subcommand == "jump_fwd": + if subcommand == "fwd": self.mass.create_task(self.mass.player_queues.next, queue.queue_id) return - if subcommand == "jump_rew": + if subcommand == "rew": self.mass.create_task(self.mass.player_queues.previous, queue.queue_id) return - if subcommand == "fwd": + if subcommand == "jump_fwd": self.mass.create_task(self.mass.player_queues.skip, queue.queue_id, 10) return - if subcommand == "rew": + if subcommand == "jump_rew": self.mass.create_task(self.mass.player_queues.skip, queue.queue_id, -10) return if subcommand == "shuffle": diff --git a/music_assistant/server/providers/slimproto/models.py b/music_assistant/server/providers/slimproto/models.py index 7c54942f..214fcf53 100644 --- a/music_assistant/server/providers/slimproto/models.py +++ b/music_assistant/server/providers/slimproto/models.py @@ -139,6 +139,8 @@ PlaylistItem = TypedDict( "remote_title": str, "artwork_url": str, "bitrate": str, + "samplerate": str, + "samplesize": str, "duration": str | int | None, "coverid": str, "params": dict, @@ -150,6 +152,9 @@ def playlist_item_from_mass( mass: MusicAssistant, queue_item: QueueItem, index: int = 0, is_cur_index: bool = False ) -> PlaylistItem: """Parse PlaylistItem for the Json RPC interface from MA QueueItem.""" + samplerate = "44100" + samplesize = "16" + bitrate = "1411" if ( is_cur_index and queue_item.streamdetails @@ -174,6 +179,10 @@ def playlist_item_from_mass( title = queue_item.name artist = "" album = queue_item.media_type.value + if queue_item.streamdetails: + samplerate = str(queue_item.streamdetails.audio_format.sample_rate) + samplesize = str(queue_item.streamdetails.audio_format.bit_depth) + bitrate = str(queue_item.streamdetails.audio_format.bit_rate) return { "playlist index": index, "id": "-187651250107376", @@ -186,7 +195,9 @@ def playlist_item_from_mass( else "", "coverid": "-187651250107376", "duration": queue_item.duration, - "bitrate": "", + "bitrate": bitrate, + "samplerate": samplerate, + "samplesize": samplesize, } -- 2.34.1