Fixes for slimproto cli and wiim pro streamers (#934)
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Thu, 23 Nov 2023 15:38:24 +0000 (16:38 +0100)
committerGitHub <noreply@github.com>
Thu, 23 Nov 2023 15:38:24 +0000 (16:38 +0100)
music_assistant/server/providers/chromecast/__init__.py
music_assistant/server/providers/slimproto/cli.py
music_assistant/server/providers/slimproto/models.py

index 8cabdabe21a10bd9676e98d713b94cfc2344f988..5cb1e88504be34db734116591af451b92f1d5d5c 100644 (file)
@@ -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)
 
index 07348bcff2ba413445ec70515c83962c1adc7170..3113ce71419dceacdc5c1f4fd679b58641b57bdc 100644 (file)
@@ -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":
index 7c54942fc796a060ea822ed57631bf060cb9b9a3..214fcf539606728844757454b9da99f3362894ef 100644 (file)
@@ -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,
     }