if resume_info_db_row is None:
return
if resume_info_db_row["seconds_played"] is not None:
- chapter.resume_position_ms = resume_info_db_row["seconds_played"] * 1000
+ chapter.resume_position_ms = int(resume_info_db_row["seconds_played"] * 1000)
if resume_info_db_row["fully_played"] is not None:
chapter.fully_played = resume_info_db_row["fully_played"]
# grab the episodes from the provider
# note that we do not cache any of this because its
# always a rather small list and we want fresh resume info
- items = await prov.get_audiobook_chapters(item_id)
+ items = await prov.get_podcast_episodes(item_id)
async def set_resume_position(episode: Episode) -> None:
if episode.resume_position_ms is not None:
{
"item_id": episode.item_id,
"provider": prov.lookup_key,
- "media_type": MediaType.CHAPTER,
+ "media_type": MediaType.EPISODE,
},
)
if resume_info_db_row is None:
return
if resume_info_db_row["seconds_played"] is not None:
- episode.resume_position_ms = resume_info_db_row["seconds_played"] * 1000
+ episode.resume_position_ms = int(resume_info_db_row["seconds_played"] * 1000)
if resume_info_db_row["fully_played"] is not None:
episode.fully_played = resume_info_db_row["fully_played"]
await asyncio.gather(*[set_resume_position(chapter) for chapter in items])
return items
- return items
async def _get_provider_dynamic_base_tracks(
self,
# handle resume point of audiobook(chapter) or podcast(episode)
if not seek_position and (
- resume_position := getattr(queue_item.media_item, "resume_position", 0)
+ resume_position_ms := getattr(queue_item.media_item, "resume_position_ms", 0)
):
- seek_position = resume_position
+ seek_position = max(0, int((resume_position_ms - 500) / 1000))
# work out if we are playing an album and if we should prefer album loudness
if (
},
publisher="Test Publisher",
total_chapters=10,
+ authors=UniqueList(["AudioBook Author"]),
+ narrators=UniqueList(["AudioBook Narrator"]),
)
async def get_library_artists(self) -> AsyncGenerator[Artist, None]:
provider=self.instance_id,
name=f"Test Audiobook {prov_audiobook_id}",
media_type=MediaType.AUDIOBOOK,
+ image=DEFAULT_THUMB,
),
provider_mappings={
ProviderMapping(
provider_instance=self.instance_id,
)
},
+ metadata=MediaItemMetadata(
+ description="This is a description for "
+ f"Test Chapter {chapter_idx} of Test Audiobook {prov_audiobook_id}"
+ ),
+ position=chapter_idx,
)
for chapter_idx in range(num_chapters)
]
provider=self.instance_id,
name=f"Test Podcast {prov_podcast_id}",
media_type=MediaType.PODCAST,
+ image=DEFAULT_THUMB,
),
provider_mappings={
ProviderMapping(
provider_instance=self.instance_id,
)
},
- metadata=MediaItemMetadata(images=UniqueList([DEFAULT_THUMB])),
- episode_number=episode_idx,
+ metadata=MediaItemMetadata(
+ description="This is a description for "
+ f"Test Episode {episode_idx} of Test Podcast {prov_podcast_id}"
+ ),
+ position=episode_idx,
)
for episode_idx in range(num_episodes)
]