several fixes
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Sun, 5 Jul 2020 10:41:51 +0000 (12:41 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Sun, 5 Jul 2020 10:41:51 +0000 (12:41 +0200)
fix search
fix chromecast
fix radio

music_assistant/database.py
music_assistant/http_streamer.py
music_assistant/playerproviders/chromecast.py

index e408e079c183c004ff3f446a524cae2fef412381..587ca9a103b07c60106ec5e6dfc8b10bae664e79 100755 (executable)
@@ -181,7 +181,7 @@ class Database:
         if MediaType.Playlist in media_types:
             sql_query = ' WHERE name LIKE "%s"' % searchquery
             result["playlists"] = [
-                item async for item in self.library_playlists(sql_query)
+                item async for item in self.playlists(sql_query)
             ]
         return result
 
index 11892e97456126ead2acdda5091601e3a1ae2edf..4b0ddbb99d3a237ade5a4391d011bdc8c8e33b34 100755 (executable)
@@ -333,15 +333,18 @@ class HTTPStreamer:
         """ get audio stream from provider and apply additional effects/processing where/if needed"""
         streamdetails = None
         # always request the full db track as there might be other qualities available
-        full_track = self.mass.run_task(
-            self.mass.music.track(
-                queue_item.item_id,
-                queue_item.provider,
-                lazy=True,
-                track_details=queue_item,
-            ),
-            wait_for_result=True,
-        )
+        if queue_item.media_type == MediaType.Radio:
+            full_track = queue_item
+        else:
+            full_track = self.mass.run_task(
+                self.mass.music.track(
+                    queue_item.item_id,
+                    queue_item.provider,
+                    lazy=True,
+                    track_details=queue_item,
+                ),
+                wait_for_result=True,
+            )
         # sort by quality and check track availability
         for prov_media in sorted(
             full_track.provider_ids, key=operator.itemgetter("quality"), reverse=True
index 729f8de41c0fae98cd0021f49b58aa67d1623e0c..4b5f2433029d7b0e5f80a2573f50f60b4d30935a 100644 (file)
@@ -287,22 +287,19 @@ class ChromecastProvider(PlayerProvider):
             for uuid, service in listener.services.items():
                 LOGGER.debug("  {} {}".format(uuid, service))
 
-        def add_callback(name):
+        def add_callback(uuid, name):
             """Called when zeroconf has discovered a (new) chromecast."""
-            discovery_info = listener.services[name]
-            ip_address, port, uuid, model_name, friendly_name = discovery_info
+            services = listener.services[uuid]
             player_id = str(uuid)
             if not player_id in self.mass.players._players:
-                self.__chromecast_discovered(player_id, discovery_info)
+                self.__chromecast_discovered(player_id, services, zconf)
             self.__update_group_players()
 
         def remove_callback(uuid, name, service):
             LOGGER.debug("Lost mDNS service for cast device {} {}".format(uuid, service))
-            list_devices()
 
         def update_callback(uuid, name):
             LOGGER.debug("Updated mDNS service for cast device {}".format(uuid))
-            list_devices()
         
         listener = pychromecast.CastListener(add_callback, remove_callback, update_callback)
         zconf = zeroconf.Zeroconf()
@@ -313,15 +310,14 @@ class ChromecastProvider(PlayerProvider):
         LOGGER.debug("Chromecast discovery completed...")
         self._discovery_running = False
 
-    def __chromecast_discovered(self, player_id, discovery_info):
+    def __chromecast_discovered(self, player_id, services, zconf):
         """ callback when a (new) chromecast device is discovered """
-        from pychromecast import _get_chromecast_from_host, ChromecastConnectionError
 
         try:
-            chromecast = _get_chromecast_from_host(
-                discovery_info, tries=2, timeout=5, retry_wait=5
+            chromecast = pychromecast.get_chromecast_from_service(
+                services, zconf, tries=2, retry_wait=5, timeout=5
             )
-        except ChromecastConnectionError:
+        except pychromecast.ChromecastConnectionError:
             LOGGER.warning("Could not connect to device %s" % player_id)
             return
         player = ChromecastPlayer(self.mass, player_id, self.prov_id)