79 lines
2.3 KiB
Python
79 lines
2.3 KiB
Python
from pydantic import BaseModel
|
|
from enum import Enum
|
|
from typing import Optional, Union
|
|
from discord.models import DiscordRPCUpdatePayload
|
|
from pypresence.types import ActivityType
|
|
|
|
|
|
class JellyfinMediaType(str, Enum):
|
|
AUDIO = 'Audio'
|
|
MOVIE = 'Movie'
|
|
EPISODE = 'Episode'
|
|
|
|
|
|
class JellyfinMusicMediaMetadata(BaseModel):
|
|
artist: Optional[str]
|
|
album: Optional[str]
|
|
|
|
|
|
class JellyfinMovieMediaMetadata(BaseModel):
|
|
date: Optional[str]
|
|
|
|
|
|
class JellyfinEpisodeMediaMetadata(BaseModel):
|
|
subtitle: str
|
|
|
|
|
|
class JellyfinMediaItem(BaseModel):
|
|
id: str
|
|
name: str
|
|
type: JellyfinMediaType
|
|
image_url: str
|
|
start: Optional[int]
|
|
end: Optional[int]
|
|
metadata: Union[JellyfinMusicMediaMetadata,
|
|
JellyfinMovieMediaMetadata,
|
|
JellyfinEpisodeMediaMetadata]
|
|
|
|
def to_rpc_payload(self) -> DiscordRPCUpdatePayload:
|
|
"""
|
|
Converts a JellyfinMediaItem to a DiscordRPCUpdatePayload.
|
|
|
|
Returns:
|
|
DiscordRPCUpdatePayload: The converted Discord RPC update payload.
|
|
"""
|
|
if self.type == JellyfinMediaType.AUDIO:
|
|
return DiscordRPCUpdatePayload(
|
|
id=self.id,
|
|
title=f"Listening to {
|
|
self.name}",
|
|
subtitle=f"by {
|
|
self.metadata.artist}",
|
|
image_url=self.image_url,
|
|
details=self.metadata.album,
|
|
activity_type=ActivityType.LISTENING,
|
|
start=self.start,
|
|
end=self.end)
|
|
elif self.type == JellyfinMediaType.MOVIE:
|
|
return DiscordRPCUpdatePayload(
|
|
id=self.id,
|
|
title=f"Watching {self.name}",
|
|
subtitle=self.metadata.date,
|
|
image_url=self.image_url,
|
|
details=self.name,
|
|
activity_type=ActivityType.WATCHING,
|
|
start=self.start,
|
|
end=self.end
|
|
)
|
|
elif self.type == JellyfinMediaType.EPISODE:
|
|
return DiscordRPCUpdatePayload(
|
|
id=self.id,
|
|
title=f"Watching {self.name}",
|
|
subtitle=self.metadata.subtitle,
|
|
image_url=self.image_url,
|
|
details=self.name,
|
|
activity_type=ActivityType.WATCHING,
|
|
start=self.start,
|
|
end=self.end
|
|
)
|