49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
from discord.models import DiscordRPCUpdatePayload
|
|
from jellyfin.models import JellyfinMediaItem, JellyfinMediaType
|
|
from pypresence.types import ActivityType
|
|
|
|
|
|
def to_rpc_payload(media_item: JellyfinMediaItem) -> DiscordRPCUpdatePayload:
|
|
"""
|
|
Converts a JellyfinMediaItem to a DiscordRPCUpdatePayload.
|
|
|
|
Args:
|
|
media_item (JellyfinMediaItem): The Jellyfin media item to convert.
|
|
Returns:
|
|
DiscordRPCUpdatePayload: The converted Discord RPC update payload.
|
|
"""
|
|
if media_item.type == JellyfinMediaType.AUDIO:
|
|
return DiscordRPCUpdatePayload(
|
|
id=media_item.id,
|
|
title=f"Listening to {
|
|
media_item.name}",
|
|
subtitle=f"by {
|
|
media_item.metadata.artist}",
|
|
image_url=media_item.image_url,
|
|
details=media_item.metadata.album,
|
|
activity_type=ActivityType.LISTENING,
|
|
start=media_item.start,
|
|
end=media_item.end)
|
|
elif media_item.type == JellyfinMediaType.MOVIE:
|
|
return DiscordRPCUpdatePayload(
|
|
id=media_item.id,
|
|
title=f"Watching {media_item.name}",
|
|
subtitle=media_item.metadata.date,
|
|
image_url=media_item.image_url,
|
|
details=media_item.name,
|
|
activity_type=ActivityType.WATCHING,
|
|
start=media_item.start,
|
|
end=media_item.end
|
|
)
|
|
elif media_item.type == JellyfinMediaType.EPISODE:
|
|
return DiscordRPCUpdatePayload(
|
|
id=media_item.id,
|
|
title=f"Watching {media_item.name}",
|
|
subtitle=media_item.metadata.subtitle,
|
|
image_url=media_item.image_url,
|
|
details=media_item.name,
|
|
activity_type=ActivityType.WATCHING,
|
|
start=media_item.start,
|
|
end=media_item.end
|
|
)
|