Small fixes for podcast RSS provider
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Mon, 6 Jan 2025 20:29:34 +0000 (21:29 +0100)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Mon, 6 Jan 2025 20:29:34 +0000 (21:29 +0100)
- ensure a stable podcast ID
- add chapters to episodes

music_assistant/providers/podcastfeed/__init__.py

index ee4b37bb0266c9ff0b00a191bac2b302641a2c1f..b943bf6facca3929c61868459d35e3ff6637437a 100644 (file)
@@ -27,6 +27,7 @@ from music_assistant_models.errors import InvalidProviderURI, MediaNotFoundError
 from music_assistant_models.media_items import (
     AudioFormat,
     ItemMapping,
+    MediaItemChapter,
     MediaItemImage,
     Podcast,
     PodcastEpisode,
@@ -34,6 +35,7 @@ from music_assistant_models.media_items import (
 )
 from music_assistant_models.streamdetails import StreamDetails
 
+from music_assistant.helpers.compare import create_safe_string
 from music_assistant.models.music_provider import MusicProvider
 
 if TYPE_CHECKING:
@@ -96,7 +98,7 @@ class PodcastMusicprovider(MusicProvider):
         """Handle async initialization of the provider."""
         # ruff: noqa: S310
         feed_url = podcastparser.normalize_feed_url(self.config.get_value(CONF_FEED_URL))
-        self.podcast_id = str(hash(feed_url))
+        self.podcast_id = create_safe_string(feed_url.replace("http", ""))
         async with self.mass.http_session.get(feed_url) as response:
             if response.status == 200:
                 feed_data = await response.read()
@@ -242,6 +244,15 @@ class PodcastMusicprovider(MusicProvider):
                 )
             },
         )
+        if "chapters" in episode_obj:
+            episode.metadata.chapters = [
+                MediaItemChapter(
+                    position=idx,
+                    name=chapter_obj["title"],
+                    start=chapter_obj["start"],
+                )
+                for idx, chapter_obj in enumerate(episode_obj["chapters"])
+            ]
 
         if "episode_art_url" in episode_obj:
             episode.metadata.images = [