improve typing
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
from pypresence.types import ActivityType
|
from pypresence.types import ActivityType
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
|
||||||
class DiscordRPCUpdatePayload(BaseModel):
|
class DiscordRPCUpdatePayload(BaseModel):
|
||||||
@@ -8,6 +9,6 @@ class DiscordRPCUpdatePayload(BaseModel):
|
|||||||
subtitle: str
|
subtitle: str
|
||||||
image_url: str
|
image_url: str
|
||||||
details: str
|
details: str
|
||||||
start: int | None
|
start: Optional[int]
|
||||||
end: int | None
|
end: Optional[int]
|
||||||
activity_type: ActivityType
|
activity_type: ActivityType
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from settings import settings
|
from settings import settings
|
||||||
from jellyfin_apiclient_python import JellyfinClient
|
from jellyfin_apiclient_python import JellyfinClient
|
||||||
from getmac import get_mac_address
|
from getmac import get_mac_address
|
||||||
from jellyfin.models import JellyfinMediaItem, JellyfinMediaType
|
from jellyfin.models import JellyfinMediaItem, JellyfinMediaType, JellyfinMusicMediaMetadata, JellyfinMovieMediaMetadata, JellyfinEpisodeMediaMetadata
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import logging
|
import logging
|
||||||
import time
|
import time
|
||||||
@@ -98,6 +98,10 @@ class JellyfinApiClient:
|
|||||||
premiere_year = datetime.fromisoformat(
|
premiere_year = datetime.fromisoformat(
|
||||||
premiere_date).year if premiere_date else None
|
premiere_date).year if premiere_date else None
|
||||||
|
|
||||||
|
metadata = JellyfinMusicMediaMetadata(
|
||||||
|
artist=item.get('AlbumArtist'), album=f"{
|
||||||
|
item.get('Album')} ({premiere_year})" if premiere_date else item.get('Album'))
|
||||||
|
|
||||||
(start, end) = self.get_playback_info(item)
|
(start, end) = self.get_playback_info(item)
|
||||||
|
|
||||||
return JellyfinMediaItem(
|
return JellyfinMediaItem(
|
||||||
@@ -107,15 +111,16 @@ class JellyfinApiClient:
|
|||||||
image_url=self.get_image_url(parent_id),
|
image_url=self.get_image_url(parent_id),
|
||||||
start=start,
|
start=start,
|
||||||
end=end,
|
end=end,
|
||||||
metadata={
|
metadata=metadata
|
||||||
'artist': item.get('AlbumArtist'),
|
)
|
||||||
'album': f"{
|
|
||||||
item.get('Album')} ({premiere_year})" if premiere_date else item.get('Album')})
|
|
||||||
|
|
||||||
def to_movie_model(self, item: dict) -> JellyfinMediaItem:
|
def to_movie_model(self, item: dict) -> JellyfinMediaItem:
|
||||||
media_id = item.get('Id')
|
media_id = item.get('Id')
|
||||||
premiere_date = item.get('PremiereDate')
|
premiere_date = item.get('PremiereDate')
|
||||||
|
|
||||||
|
metadata = JellyfinMovieMediaMetadata(date=datetime.fromisoformat(
|
||||||
|
premiere_date).strftime('%d/%m/%Y') if premiere_date else None)
|
||||||
|
|
||||||
(start, end) = self.get_playback_info(item)
|
(start, end) = self.get_playback_info(item)
|
||||||
|
|
||||||
return JellyfinMediaItem(
|
return JellyfinMediaItem(
|
||||||
@@ -125,9 +130,7 @@ class JellyfinApiClient:
|
|||||||
image_url=self.get_image_url(media_id),
|
image_url=self.get_image_url(media_id),
|
||||||
start=start,
|
start=start,
|
||||||
end=end,
|
end=end,
|
||||||
metadata={
|
metadata=metadata
|
||||||
'date': datetime.fromisoformat(premiere_date).strftime('%d/%m/%Y') if premiere_date else None
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def to_episode_model(self, item: dict) -> JellyfinMediaItem:
|
def to_episode_model(self, item: dict) -> JellyfinMediaItem:
|
||||||
@@ -138,7 +141,10 @@ class JellyfinApiClient:
|
|||||||
season_number = item.get('ParentIndexNumber')
|
season_number = item.get('ParentIndexNumber')
|
||||||
episode_number = item.get('IndexNumber')
|
episode_number = item.get('IndexNumber')
|
||||||
|
|
||||||
subtitle = f"S{season_number:02}E{episode_number:02} of {series_name}"
|
metadata = JellyfinEpisodeMediaMetadata(
|
||||||
|
subtitle=f"S{
|
||||||
|
season_number:02}E{
|
||||||
|
episode_number:02} of {series_name}")
|
||||||
|
|
||||||
(start, end) = self.get_playback_info(item)
|
(start, end) = self.get_playback_info(item)
|
||||||
|
|
||||||
@@ -149,7 +155,5 @@ class JellyfinApiClient:
|
|||||||
image_url=self.get_image_url(parent_id),
|
image_url=self.get_image_url(parent_id),
|
||||||
start=start,
|
start=start,
|
||||||
end=end,
|
end=end,
|
||||||
metadata={
|
metadata=metadata
|
||||||
'subtitle': subtitle,
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
from typing import Optional, Union
|
||||||
|
|
||||||
|
|
||||||
class JellyfinMediaType(str, Enum):
|
class JellyfinMediaType(str, Enum):
|
||||||
@@ -8,11 +9,26 @@ class JellyfinMediaType(str, Enum):
|
|||||||
EPISODE = 'Episode'
|
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):
|
class JellyfinMediaItem(BaseModel):
|
||||||
id: str
|
id: str
|
||||||
name: str
|
name: str
|
||||||
type: JellyfinMediaType
|
type: JellyfinMediaType
|
||||||
image_url: str
|
image_url: str
|
||||||
start: int | None
|
start: Optional[int]
|
||||||
end: int | None
|
end: Optional[int]
|
||||||
metadata: dict
|
metadata: Union[JellyfinMusicMediaMetadata,
|
||||||
|
JellyfinMovieMediaMetadata,
|
||||||
|
JellyfinEpisodeMediaMetadata]
|
||||||
|
|||||||
@@ -10,13 +10,9 @@ def to_rpc_payload(media_item: JellyfinMediaItem) -> DiscordRPCUpdatePayload:
|
|||||||
title=f"Listening to {
|
title=f"Listening to {
|
||||||
media_item.name}",
|
media_item.name}",
|
||||||
subtitle=f"by {
|
subtitle=f"by {
|
||||||
media_item.metadata.get(
|
media_item.metadata.artist}",
|
||||||
'artist',
|
|
||||||
'Unknown Artist')}",
|
|
||||||
image_url=media_item.image_url,
|
image_url=media_item.image_url,
|
||||||
details=media_item.metadata.get(
|
details=media_item.metadata.album,
|
||||||
'album',
|
|
||||||
'Unknown Album'),
|
|
||||||
activity_type=ActivityType.LISTENING,
|
activity_type=ActivityType.LISTENING,
|
||||||
start=media_item.start,
|
start=media_item.start,
|
||||||
end=media_item.end)
|
end=media_item.end)
|
||||||
@@ -24,7 +20,7 @@ def to_rpc_payload(media_item: JellyfinMediaItem) -> DiscordRPCUpdatePayload:
|
|||||||
return DiscordRPCUpdatePayload(
|
return DiscordRPCUpdatePayload(
|
||||||
id=media_item.id,
|
id=media_item.id,
|
||||||
title=f"Watching {media_item.name}",
|
title=f"Watching {media_item.name}",
|
||||||
subtitle=media_item.metadata.get('date'),
|
subtitle=media_item.metadata.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,
|
||||||
@@ -35,7 +31,7 @@ def to_rpc_payload(media_item: JellyfinMediaItem) -> DiscordRPCUpdatePayload:
|
|||||||
return DiscordRPCUpdatePayload(
|
return DiscordRPCUpdatePayload(
|
||||||
id=media_item.id,
|
id=media_item.id,
|
||||||
title=f"Watching {media_item.name}",
|
title=f"Watching {media_item.name}",
|
||||||
subtitle=media_item.metadata.get('subtitle'),
|
subtitle=media_item.metadata.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,
|
||||||
|
|||||||
Reference in New Issue
Block a user