[podcasts] Try to clean up lookups

This commit is contained in:
2025-10-14 11:45:47 -04:00
parent 56ee14512d
commit 72f739ee5a
3 changed files with 20 additions and 44 deletions

View File

@ -143,13 +143,13 @@ class PodcastEpisode(ScrobblableMixin):
def find_or_create( def find_or_create(
cls, cls,
title: str, title: str,
podcast_name: str,
podcast_description: str,
pub_date: str, pub_date: str,
number: int = 0, episode_num: int = 0,
mopidy_uri: str = "",
producer_name: str = "",
run_time_seconds: int = 1800, run_time_seconds: int = 1800,
mopidy_uri: str = "",
podcast_name: str = "",
podcast_producer: str = "",
podcast_description: str = "",
enrich: bool = True, enrich: bool = True,
) -> "PodcastEpisode": ) -> "PodcastEpisode":
"""Given a data dict from Mopidy, finds or creates a podcast and """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"} log_context={"mopidy_uri": mopidy_uri, "media_type": "Podcast"}
producer = None producer = None
if producer_name: if podcast_producer:
producer = Producer.find_or_create(producer_name) producer = Producer.find_or_create(podcast_producer)
podcast, created = Podcast.objects.get_or_create(name=podcast_name, defaults={"description": podcast_description}) podcast, created = Podcast.objects.get_or_create(name=podcast_name, defaults={"description": podcast_description})
log_context["podcast_id"] = podcast.id log_context["podcast_id"] = podcast.id
@ -175,7 +175,7 @@ class PodcastEpisode(ScrobblableMixin):
podcast=podcast, podcast=podcast,
defaults={ defaults={
"run_time_seconds": run_time_seconds, "run_time_seconds": run_time_seconds,
"number": number, "number": episode_num,
"pub_date": pub_date, "pub_date": pub_date,
"mopidy_uri": mopidy_uri, "mopidy_uri": mopidy_uri,
} }

View File

@ -40,20 +40,20 @@ def fetch_metadata_from_rss(uri: str) -> dict[str, Any]:
podcast_data = { podcast_data = {
"podcast_name": feed.feed.get("title", "Unknown Podcast"), "podcast_name": feed.feed.get("title", "Unknown Podcast"),
"podcast_description": feed.feed.get("description", ""), # "podcast_description": feed.feed.get("description", ""),
"podcast_link": feed.feed.get("link", ""), # "podcast_link": feed.feed.get("link", ""),
"podcast_producer": podcast_publisher or podcast_owner or podcast_other "podcast_producer": podcast_publisher or podcast_owner or podcast_other
} }
for entry in feed.entries: for entry in feed.entries:
if target_guid in target_guid: if target_guid in target_guid:
logger.info("🎧 Episode found in RSS feed", extra=log_context) 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_num"] = entry.guid
podcast_data["episode_pub_date"] = entry.get("published", None) podcast_data["pub_date"] = entry.get("published", None)
podcast_data["episode_description"] = entry.get("description", None) podcast_data["run_time_seconds"] = parse_duration(entry.get("itunes_duration", None))
podcast_data["episode_url"] = entry.enclosures[0].href if entry.get("enclosures") else None # podcast_data["description"] = entry.get("description", None)
podcast_data["episode_runtime_seconds"] = parse_duration(entry.get("itunes_duration", None)) # podcast_data["episode_url"] = entry.enclosures[0].href if entry.get("enclosures") else None
return podcast_data return podcast_data
else: else:
logger.info("Episode not found in RSS feed.") 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: def get_or_create_podcast(post_data: dict) -> PodcastEpisode:
logger.info("Looking up podcast", extra={"post_data": post_data, "media_type": "Podcast"}) logger.info("Looking up podcast", extra={"post_data": post_data, "media_type": "Podcast"})
mopidy_uri = post_data.get("mopidy_uri", "") mopidy_uri = post_data.get("mopidy_uri", "")
parsed_data = parse_mopidy_uri(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(**parsed_data)
}
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
)

View File

@ -56,18 +56,11 @@ def mopidy_scrobble_media(post_data: dict, user_id: int) -> Scrobble:
if media_type == Scrobble.MediaType.PODCAST_EPISODE: if media_type == Scrobble.MediaType.PODCAST_EPISODE:
parsed_data = parse_mopidy_uri(post_data.get("mopidy_uri", "")) parsed_data = parse_mopidy_uri(post_data.get("mopidy_uri", ""))
podcast_name = post_data.get( if not parsed_data:
"album", parsed_data.get("podcast_name", "") logger.warning("Tried to scrobble podcast but no uri found", extra={"post_data": post_data})
) return Scrobble()
media_obj = PodcastEpisode.find_or_create( media_obj = PodcastEpisode.find_or_create(**parsed_data)
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", ""),
)
else: else:
media_obj = Track.find_or_create( media_obj = Track.find_or_create(
title=post_data.get("name", ""), title=post_data.get("name", ""),