calculate start and end
This commit is contained in:
@@ -7,4 +7,6 @@ class DiscordRPCUpdatePayload(BaseModel):
|
|||||||
subtitle: str
|
subtitle: str
|
||||||
image_url: str
|
image_url: str
|
||||||
details: str
|
details: str
|
||||||
|
start: int
|
||||||
|
end: int
|
||||||
activity_type: ActivityType
|
activity_type: ActivityType
|
||||||
|
|||||||
@@ -24,7 +24,9 @@ class DiscordRPC:
|
|||||||
details=payload.title,
|
details=payload.title,
|
||||||
state=payload.subtitle,
|
state=payload.subtitle,
|
||||||
large_image=payload.image_url,
|
large_image=payload.image_url,
|
||||||
large_text=payload.details
|
large_text=payload.details,
|
||||||
|
start=payload.start,
|
||||||
|
end=payload.end
|
||||||
)
|
)
|
||||||
self.logger.info("Discord RPC presence updated.")
|
self.logger.info("Discord RPC presence updated.")
|
||||||
|
|
||||||
|
|||||||
@@ -64,14 +64,33 @@ class JellyfinApiClient:
|
|||||||
|
|
||||||
raise ValueError(f"Unsupported media type: {media_type}")
|
raise ValueError(f"Unsupported media type: {media_type}")
|
||||||
|
|
||||||
|
def get_playback_info(self, media: dict):
|
||||||
|
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:
|
def to_music_model(self, item: dict) -> JellyfinMediaItem:
|
||||||
media_id = item.get('Id')
|
media_id = item.get('Id')
|
||||||
|
|
||||||
|
(start, end) = self.get_playback_info(item)
|
||||||
|
|
||||||
return JellyfinMediaItem(
|
return JellyfinMediaItem(
|
||||||
id=media_id,
|
id=media_id,
|
||||||
name=item.get('Name'),
|
name=item.get('Name'),
|
||||||
type=JellyfinMediaType.AUDIO,
|
type=JellyfinMediaType.AUDIO,
|
||||||
image_url=self.get_image_url(media_id),
|
image_url=self.get_image_url(media_id),
|
||||||
|
start=start,
|
||||||
|
end=end,
|
||||||
metadata={
|
metadata={
|
||||||
'artist': item.get('AlbumArtist'),
|
'artist': item.get('AlbumArtist'),
|
||||||
}
|
}
|
||||||
@@ -81,11 +100,15 @@ class JellyfinApiClient:
|
|||||||
media_id = item.get('Id')
|
media_id = item.get('Id')
|
||||||
premiere_date = item.get('PremiereDate')
|
premiere_date = item.get('PremiereDate')
|
||||||
|
|
||||||
|
(start, end) = self.get_playback_info(item)
|
||||||
|
|
||||||
return JellyfinMediaItem(
|
return JellyfinMediaItem(
|
||||||
id=media_id,
|
id=media_id,
|
||||||
name=item.get('Name'),
|
name=item.get('Name'),
|
||||||
type=JellyfinMediaType.MOVIE,
|
type=JellyfinMediaType.MOVIE,
|
||||||
image_url=self.get_image_url(media_id),
|
image_url=self.get_image_url(media_id),
|
||||||
|
start=start,
|
||||||
|
end=end,
|
||||||
metadata={
|
metadata={
|
||||||
'date': datetime.fromisoformat(premiere_date).strftime('%d/%m/%Y') if premiere_date else None
|
'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}"
|
subtitle=f"S{season_number:02}E{episode_number:02} of {seris_name}"
|
||||||
|
|
||||||
|
(start, end) = self.get_playback_info(item)
|
||||||
|
|
||||||
return JellyfinMediaItem(
|
return JellyfinMediaItem(
|
||||||
id=media_id,
|
id=media_id,
|
||||||
name=item.get('Name'),
|
name=item.get('Name'),
|
||||||
type=JellyfinMediaType.EPISODE,
|
type=JellyfinMediaType.EPISODE,
|
||||||
image_url=self.get_image_url(media_id),
|
image_url=self.get_image_url(media_id),
|
||||||
|
start=start,
|
||||||
|
end=end,
|
||||||
metadata={
|
metadata={
|
||||||
'subtitle': subtitle,
|
'subtitle': subtitle,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,4 +11,6 @@ class JellyfinMediaItem(BaseModel):
|
|||||||
name: str
|
name: str
|
||||||
type: JellyfinMediaType
|
type: JellyfinMediaType
|
||||||
image_url: str
|
image_url: str
|
||||||
|
start: int
|
||||||
|
end: int
|
||||||
metadata: dict
|
metadata: dict
|
||||||
|
|||||||
@@ -10,7 +10,9 @@ def to_rpc_payload(media_item: JellyfinMediaItem) -> DiscordRPCUpdatePayload:
|
|||||||
subtitle=f"by {media_item.metadata.get('artist', 'Unknown Artist')}",
|
subtitle=f"by {media_item.metadata.get('artist', 'Unknown Artist')}",
|
||||||
image_url=media_item.image_url,
|
image_url=media_item.image_url,
|
||||||
details=media_item.name,
|
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:
|
elif media_item.type == JellyfinMediaType.MOVIE:
|
||||||
return DiscordRPCUpdatePayload(
|
return DiscordRPCUpdatePayload(
|
||||||
@@ -19,7 +21,9 @@ def to_rpc_payload(media_item: JellyfinMediaItem) -> DiscordRPCUpdatePayload:
|
|||||||
subtitle=media_item.metadata.get('date'),
|
subtitle=media_item.metadata.get('date'),
|
||||||
image_url=media_item.image_url,
|
image_url=media_item.image_url,
|
||||||
details=media_item.name,
|
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:
|
elif media_item.type == JellyfinMediaType.EPISODE:
|
||||||
return DiscordRPCUpdatePayload(
|
return DiscordRPCUpdatePayload(
|
||||||
@@ -28,5 +32,7 @@ def to_rpc_payload(media_item: JellyfinMediaItem) -> DiscordRPCUpdatePayload:
|
|||||||
subtitle=media_item.metadata.get('subtitle'),
|
subtitle=media_item.metadata.get('subtitle'),
|
||||||
image_url=media_item.image_url,
|
image_url=media_item.image_url,
|
||||||
details=media_item.name,
|
details=media_item.name,
|
||||||
activity_type=ActivityType.WATCHING
|
activity_type=ActivityType.WATCHING,
|
||||||
|
start=media_item.start,
|
||||||
|
end=media_item.end
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user