From: brian10048 Date: Wed, 8 Oct 2025 16:50:49 +0000 (-0400) Subject: Add Recommendations to nugs.net (#2492) X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=ff7a060eea182ef46ee7c79ca297613cfe764bf2;p=music-assistant-server.git Add Recommendations to nugs.net (#2492) --- diff --git a/music_assistant/providers/nugs/__init__.py b/music_assistant/providers/nugs/__init__.py index 731103c0..6969985e 100644 --- a/music_assistant/providers/nugs/__init__.py +++ b/music_assistant/providers/nugs/__init__.py @@ -32,6 +32,7 @@ from music_assistant_models.media_items import ( MediaItemMetadata, Playlist, ProviderMapping, + RecommendationFolder, Track, UniqueList, ) @@ -56,6 +57,7 @@ SUPPORTED_FEATURES = { ProviderFeature.LIBRARY_ALBUMS, ProviderFeature.LIBRARY_PLAYLISTS, ProviderFeature.ARTIST_ALBUMS, + ProviderFeature.RECOMMENDATIONS, } @@ -207,6 +209,46 @@ class NugsProvider(MusicProvider): path=stream_url, ) + @use_cache(3600 * 4) # Cache for 4 hours + async def recommendations(self) -> list[RecommendationFolder]: + """Get this provider's recommendations.""" + popular = "releases/popular" + recom_shows = "me/releases/recommendations" + recent = "releases/recent" + + popular_folder = RecommendationFolder( + name="Most Popular", + item_id="nugs_popular_shows", + provider=self.lookup_key, + ) + recommended_folder = RecommendationFolder( + name="Recommended Shows", + item_id="nugs_recommended_shows", + provider=self.lookup_key, + ) + recent_folder = RecommendationFolder( + name="Recent Shows", + item_id="nugs_recent_shows", + provider=self.lookup_key, + ) + popular_data = await self._get_data("catalog", popular, limit=20) + for item in popular_data["items"]: + endpoint = f"shows/{item['id']}" + response = await self._get_data("catalog", endpoint) + popular_folder.items.append(self._parse_album(response["Response"])) + recommended_data = await self._get_data("catalog", recom_shows) + for item in recommended_data["items"]: + recommended_folder.items.append(self._parse_album(item)) + recent_data = await self._get_data("catalog", recent, limit=50) + for item in recent_data["items"]: + recent_folder.items.append(self._parse_album(item)) + + return [ + popular_folder, + recommended_folder, + recent_folder, + ] + def _parse_artist(self, artist_obj: dict[str, Any]) -> Artist: """Parse nugs artist object to generic layout.""" artist_id = artist_obj.get("artistID") or artist_obj.get("id") @@ -459,11 +501,10 @@ class NugsProvider(MusicProvider): headers = {} url: str | None = None timeout = ClientTimeout(total=120) - if nugs_api in ("stash", "subscription", "user"): - tokeninfo = kwargs.pop("tokeninfo", None) - if tokeninfo is None: - tokeninfo = await self.login() - headers = {"Authorization": f"Bearer {tokeninfo}"} + tokeninfo = kwargs.pop("tokeninfo", None) + if tokeninfo is None: + tokeninfo = await self.login() + headers = {"Authorization": f"Bearer {tokeninfo}"} if nugs_api == "catalog": url = f"https://catalog.nugs.net/api/v1/{endpoint}" if nugs_api == "stash":