calculate start and end

This commit is contained in:
2025-12-10 01:41:08 +01:00
parent a842db2d97
commit 7a3a20cb32
5 changed files with 43 additions and 4 deletions

View File

@@ -64,14 +64,33 @@ class JellyfinApiClient:
raise ValueError(f"Unsupported media type: {media_type}")
def get_playback_info(self, media: dict) -> tuple[int, int]:
media_id = media.get('Id')
playback_info = self.client.jellyfin.get_userdata_for_item(media_id)
runtime_ticks = media.get('RunTimeTicks', 0)
total_runtime_seconds = runtime_ticks // 10_000_000
playback_position_ticks = playback_info.get('PlaybackPositionTicks', 0)
playback_position_seconds = playback_position_ticks // 10_000_000
start = int(datetime.now().timestamp()) - playback_position_seconds
end = start + total_runtime_seconds
return (start, end)
def to_music_model(self, item: dict) -> JellyfinMediaItem:
media_id = item.get('Id')
(start, end) = self.get_playback_info(item)
return JellyfinMediaItem(
id=media_id,
name=item.get('Name'),
type=JellyfinMediaType.AUDIO,
image_url=self.get_image_url(media_id),
start=start,
end=end,
metadata={
'artist': item.get('AlbumArtist'),
}
@@ -81,11 +100,15 @@ class JellyfinApiClient:
media_id = item.get('Id')
premiere_date = item.get('PremiereDate')
(start, end) = self.get_playback_info(item)
return JellyfinMediaItem(
id=media_id,
name=item.get('Name'),
type=JellyfinMediaType.MOVIE,
image_url=self.get_image_url(media_id),
start=start,
end=end,
metadata={
'date': datetime.fromisoformat(premiere_date).strftime('%d/%m/%Y') if premiere_date else None
}
@@ -99,11 +122,15 @@ class JellyfinApiClient:
subtitle=f"S{season_number:02}E{episode_number:02} of {seris_name}"
(start, end) = self.get_playback_info(item)
return JellyfinMediaItem(
id=media_id,
name=item.get('Name'),
type=JellyfinMediaType.EPISODE,
image_url=self.get_image_url(media_id),
start=start,
end=end,
metadata={
'subtitle': subtitle,
}

View File

@@ -11,4 +11,6 @@ class JellyfinMediaItem(BaseModel):
name: str
type: JellyfinMediaType
image_url: str
start: int
end: int
metadata: dict

View File

@@ -10,7 +10,9 @@ def to_rpc_payload(media_item: JellyfinMediaItem) -> DiscordRPCUpdatePayload:
subtitle=f"by {media_item.metadata.get('artist', 'Unknown Artist')}",
image_url=media_item.image_url,
details=media_item.name,
activity_type=ActivityType.LISTENING
activity_type=ActivityType.LISTENING,
start=media_item.start,
end=media_item.end
)
elif media_item.type == JellyfinMediaType.MOVIE:
return DiscordRPCUpdatePayload(
@@ -19,7 +21,9 @@ def to_rpc_payload(media_item: JellyfinMediaItem) -> DiscordRPCUpdatePayload:
subtitle=media_item.metadata.get('date'),
image_url=media_item.image_url,
details=media_item.name,
activity_type=ActivityType.WATCHING
activity_type=ActivityType.WATCHING,
start=media_item.start,
end=media_item.end
)
elif media_item.type == JellyfinMediaType.EPISODE:
return DiscordRPCUpdatePayload(
@@ -28,5 +32,7 @@ def to_rpc_payload(media_item: JellyfinMediaItem) -> DiscordRPCUpdatePayload:
subtitle=media_item.metadata.get('subtitle'),
image_url=media_item.image_url,
details=media_item.name,
activity_type=ActivityType.WATCHING
activity_type=ActivityType.WATCHING,
start=media_item.start,
end=media_item.end
)