From 72f739ee5a771cdbb4546f6c90dc73585b7dfa77 Mon Sep 17 00:00:00 2001 From: Colin Powell Date: Tue, 14 Oct 2025 11:45:47 -0400 Subject: [PATCH] [podcasts] Try to clean up lookups --- vrobbler/apps/podcasts/models.py | 16 ++++++------- vrobbler/apps/podcasts/utils.py | 33 +++++++-------------------- vrobbler/apps/scrobbles/scrobblers.py | 15 ++++-------- 3 files changed, 20 insertions(+), 44 deletions(-) diff --git a/vrobbler/apps/podcasts/models.py b/vrobbler/apps/podcasts/models.py index 1ee3605..1918a49 100644 --- a/vrobbler/apps/podcasts/models.py +++ b/vrobbler/apps/podcasts/models.py @@ -143,13 +143,13 @@ class PodcastEpisode(ScrobblableMixin): def find_or_create( cls, title: str, - podcast_name: str, - podcast_description: str, pub_date: str, - number: int = 0, - mopidy_uri: str = "", - producer_name: str = "", + episode_num: int = 0, run_time_seconds: int = 1800, + mopidy_uri: str = "", + podcast_name: str = "", + podcast_producer: str = "", + podcast_description: str = "", enrich: bool = True, ) -> "PodcastEpisode": """Given a data dict from Mopidy, finds or creates a podcast and @@ -158,8 +158,8 @@ class PodcastEpisode(ScrobblableMixin): """ log_context={"mopidy_uri": mopidy_uri, "media_type": "Podcast"} producer = None - if producer_name: - producer = Producer.find_or_create(producer_name) + if podcast_producer: + producer = Producer.find_or_create(podcast_producer) podcast, created = Podcast.objects.get_or_create(name=podcast_name, defaults={"description": podcast_description}) log_context["podcast_id"] = podcast.id @@ -175,7 +175,7 @@ class PodcastEpisode(ScrobblableMixin): podcast=podcast, defaults={ "run_time_seconds": run_time_seconds, - "number": number, + "number": episode_num, "pub_date": pub_date, "mopidy_uri": mopidy_uri, } diff --git a/vrobbler/apps/podcasts/utils.py b/vrobbler/apps/podcasts/utils.py index 3b832f5..b0ee75e 100644 --- a/vrobbler/apps/podcasts/utils.py +++ b/vrobbler/apps/podcasts/utils.py @@ -40,20 +40,20 @@ def fetch_metadata_from_rss(uri: str) -> dict[str, Any]: podcast_data = { "podcast_name": feed.feed.get("title", "Unknown Podcast"), - "podcast_description": feed.feed.get("description", ""), - "podcast_link": feed.feed.get("link", ""), + # "podcast_description": feed.feed.get("description", ""), + # "podcast_link": feed.feed.get("link", ""), "podcast_producer": podcast_publisher or podcast_owner or podcast_other } for entry in feed.entries: if target_guid in target_guid: logger.info("🎧 Episode found in RSS feed", extra=log_context) - podcast_data["episode_name"] = entry.title + podcast_data["title"] = entry.title podcast_data["episode_num"] = entry.guid - podcast_data["episode_pub_date"] = entry.get("published", None) - podcast_data["episode_description"] = entry.get("description", None) - podcast_data["episode_url"] = entry.enclosures[0].href if entry.get("enclosures") else None - podcast_data["episode_runtime_seconds"] = parse_duration(entry.get("itunes_duration", None)) + podcast_data["pub_date"] = entry.get("published", None) + podcast_data["run_time_seconds"] = parse_duration(entry.get("itunes_duration", None)) + # podcast_data["description"] = entry.get("description", None) + # podcast_data["episode_url"] = entry.enclosures[0].href if entry.get("enclosures") else None return podcast_data else: logger.info("Episode not found in RSS feed.") @@ -112,24 +112,7 @@ def parse_mopidy_uri(uri: str) -> dict[str, Any]: def get_or_create_podcast(post_data: dict) -> PodcastEpisode: logger.info("Looking up podcast", extra={"post_data": post_data, "media_type": "Podcast"}) - mopidy_uri = post_data.get("mopidy_uri", "") parsed_data = parse_mopidy_uri(mopidy_uri) - producer_name = parsed_data.get("podcast_producer", post_data.get("artist", "")) - podcast_name = parsed_data.get("podcast_name", post_data.get("album", "")) - episode_name = parsed_data.get("episode_title", parsed_data.get("episode_filename", "")) - run_time_seconds = parsed_data.get("episode_runtime_seconds", post_data.get("run_time", 2700)) - episode_dict = { - } - - return PodcastEpisode.find_or_create( - title=episode_name, - podcast_name=podcast_name, - podcast_description=parsed_data.get("podcast_description", ""), - pub_date=parsed_data.get("pub_date", ""), - number=parsed_data.get("episode_num", 0), - mopidy_uri=mopidy_uri, - producer_name=producer_name, - run_time_seconds=run_time_seconds - ) + return PodcastEpisode.find_or_create(**parsed_data) diff --git a/vrobbler/apps/scrobbles/scrobblers.py b/vrobbler/apps/scrobbles/scrobblers.py index 173022d..a03d464 100644 --- a/vrobbler/apps/scrobbles/scrobblers.py +++ b/vrobbler/apps/scrobbles/scrobblers.py @@ -56,18 +56,11 @@ def mopidy_scrobble_media(post_data: dict, user_id: int) -> Scrobble: if media_type == Scrobble.MediaType.PODCAST_EPISODE: parsed_data = parse_mopidy_uri(post_data.get("mopidy_uri", "")) - podcast_name = post_data.get( - "album", parsed_data.get("podcast_name", "") - ) + if not parsed_data: + logger.warning("Tried to scrobble podcast but no uri found", extra={"post_data": post_data}) + return Scrobble() - media_obj = PodcastEpisode.find_or_create( - title=parsed_data.get("episode_filename", ""), - podcast_name=podcast_name, - producer_name=post_data.get("artist", ""), - number=parsed_data.get("episode_num", ""), - pub_date=parsed_data.get("pub_date", ""), - mopidy_uri=post_data.get("mopidy_uri", ""), - ) + media_obj = PodcastEpisode.find_or_create(**parsed_data) else: media_obj = Track.find_or_create( title=post_data.get("name", ""),