From: Marcel van der Veldt Date: Thu, 23 Jun 2022 09:50:39 +0000 (+0200) Subject: fix for cache X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=b5e1f3a474f7c6648b08dbd4b5924a1008e4a058;p=music-assistant-server.git fix for cache --- diff --git a/music_assistant/controllers/music/artists.py b/music_assistant/controllers/music/artists.py index df27a1ec..a06f69f9 100644 --- a/music_assistant/controllers/music/artists.py +++ b/music_assistant/controllers/music/artists.py @@ -121,7 +121,7 @@ class ArtistsController(MediaControllerBase[Artist]): if not prov: return [] # prefer cache items (if any) - cache_key = f"{prov.type.value}.artist_albums.{item_id}" + cache_key = f"{prov.type.value}.artist_toptracks.{item_id}" if cache := await self.mass.cache.get(cache_key): return [Track.from_dict(x) for x in cache] # no items in cache - get listing from provider diff --git a/music_assistant/models/media_controller.py b/music_assistant/models/media_controller.py index e01affa9..a63f55b0 100644 --- a/music_assistant/models/media_controller.py +++ b/music_assistant/models/media_controller.py @@ -144,7 +144,9 @@ class MediaControllerBase(Generic[ItemCls], metaclass=ABCMeta): limit: int = 25, ) -> List[ItemCls]: """Search database or provider with given query.""" - search_query = search_query.replace("/", " ") # safe search string + search_query = search_query.replace("/", " ").replace( + "'", "" + ) # safe search string if provider == ProviderType.DATABASE or provider_id == "database": return [ self.item_cls.from_db_row(db_row) @@ -153,14 +155,25 @@ class MediaControllerBase(Generic[ItemCls], metaclass=ABCMeta): ) ] - provider = self.mass.music.get_provider(provider_id or provider) - if not provider: + prov = self.mass.music.get_provider(provider_id or provider) + if not prov: return {} - return await provider.search( + + # prefer cache items (if any) + cache_key = f"{prov.type.value}.search.{self.media_type.value}" + if cache := await self.mass.cache.get(cache_key): + return [self.media_type.from_dict(x) for x in cache] + # no items in cache - get listing from provider + items = await provider.search( search_query, [self.media_type], limit, ) + # store (serializable items) in cache + self.mass.create_task( + self.mass.cache.set(cache_key, [x.to_dict() for x in items]) + ) + return items async def add_to_library( self,