MediaItemMetadata,
Playlist,
ProviderMapping,
+ RecommendationFolder,
Track,
UniqueList,
)
ProviderFeature.LIBRARY_ALBUMS,
ProviderFeature.LIBRARY_PLAYLISTS,
ProviderFeature.ARTIST_ALBUMS,
+ ProviderFeature.RECOMMENDATIONS,
}
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")
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":