extract image utils
This commit is contained in:
@@ -8,6 +8,7 @@ from jellyfin.models import (
|
|||||||
JellyfinEpisodeMediaMetadata)
|
JellyfinEpisodeMediaMetadata)
|
||||||
from jellyfin.utils.config import configure_client
|
from jellyfin.utils.config import configure_client
|
||||||
from jellyfin.utils.playback import get_current_playback
|
from jellyfin.utils.playback import get_current_playback
|
||||||
|
from jellyfin.utils.image import get_image_url
|
||||||
from typing import Optional, Tuple
|
from typing import Optional, Tuple
|
||||||
import logging
|
import logging
|
||||||
import time
|
import time
|
||||||
@@ -50,9 +51,9 @@ class JellyfinApiClient:
|
|||||||
self.last_auth_time = time.time()
|
self.last_auth_time = time.time()
|
||||||
self.logger.info("Authenticated with Jellyfin server.")
|
self.logger.info("Authenticated with Jellyfin server.")
|
||||||
|
|
||||||
def get_current_playback(self) -> Optional[JellyfinMediaItem]:
|
def get_current_media(self) -> Optional[JellyfinMediaItem]:
|
||||||
"""
|
"""
|
||||||
Fetches the current playback information from the Jellyfin server.
|
Fetches the current media information from the Jellyfin server.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Optional[JellyfinMediaItem]: The current playback media item or None if no active playback is found.
|
Optional[JellyfinMediaItem]: The current playback media item or None if no active playback is found.
|
||||||
@@ -79,18 +80,6 @@ class JellyfinApiClient:
|
|||||||
self.logger.info("No active playback found.")
|
self.logger.info("No active playback found.")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_image_url(self, media_id: str) -> str:
|
|
||||||
"""
|
|
||||||
Constructs the image URL for a given media item.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
media_id (str): The ID of the media item.
|
|
||||||
Returns:
|
|
||||||
str: The constructed image URL.
|
|
||||||
"""
|
|
||||||
server_address = settings.jellyfin_server_url.rstrip('/')
|
|
||||||
return f"{server_address}/Items/{media_id}/Images/Primary?maxWidth=300&maxHeight=300"
|
|
||||||
|
|
||||||
def to_model(self, item: dict) -> JellyfinMediaItem:
|
def to_model(self, item: dict) -> JellyfinMediaItem:
|
||||||
"""
|
"""
|
||||||
Converts a Jellyfin media item dictionary to a JellyfinMediaItem model.
|
Converts a Jellyfin media item dictionary to a JellyfinMediaItem model.
|
||||||
@@ -134,7 +123,7 @@ class JellyfinApiClient:
|
|||||||
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(parent_id),
|
image_url=get_image_url(parent_id),
|
||||||
start=start,
|
start=start,
|
||||||
end=end,
|
end=end,
|
||||||
metadata=metadata
|
metadata=metadata
|
||||||
@@ -161,7 +150,7 @@ class JellyfinApiClient:
|
|||||||
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=get_image_url(media_id),
|
||||||
start=start,
|
start=start,
|
||||||
end=end,
|
end=end,
|
||||||
metadata=metadata
|
metadata=metadata
|
||||||
@@ -196,7 +185,7 @@ class JellyfinApiClient:
|
|||||||
id=media_id,
|
id=media_id,
|
||||||
name=name,
|
name=name,
|
||||||
type=JellyfinMediaType.EPISODE,
|
type=JellyfinMediaType.EPISODE,
|
||||||
image_url=self.get_image_url(parent_id),
|
image_url=get_image_url(parent_id),
|
||||||
start=start,
|
start=start,
|
||||||
end=end,
|
end=end,
|
||||||
metadata=metadata
|
metadata=metadata
|
||||||
|
|||||||
14
jellyfin/utils/image.py
Normal file
14
jellyfin/utils/image.py
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
from settings import settings
|
||||||
|
|
||||||
|
|
||||||
|
def get_image_url(media_id: str) -> str:
|
||||||
|
"""
|
||||||
|
Constructs the image URL for a given media item.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
media_id (str): The ID of the media item.
|
||||||
|
Returns:
|
||||||
|
str: The constructed image URL.
|
||||||
|
"""
|
||||||
|
server_address = settings.jellyfin_server_url.rstrip('/')
|
||||||
|
return f"{server_address}/Items/{media_id}/Images/Primary?maxWidth=300&maxHeight=300"
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Optional, Tuple
|
from typing import Optional, Tuple
|
||||||
|
|
||||||
|
|
||||||
def get_current_playback(media: dict) -> Tuple[Optional[int], Optional[int]]:
|
def get_current_playback(media: dict) -> Tuple[Optional[int], Optional[int]]:
|
||||||
"""
|
"""
|
||||||
Extracts playback start and end positions from a Jellyfin media item dictionary.
|
Extracts playback start and end positions from a Jellyfin media item dictionary.
|
||||||
|
|||||||
2
main.py
2
main.py
@@ -16,7 +16,7 @@ def main():
|
|||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
media_item = jellyfin_api_client.get_current_playback()
|
media_item = jellyfin_api_client.get_current_media()
|
||||||
if not media_item:
|
if not media_item:
|
||||||
discord_rpc.clear()
|
discord_rpc.clear()
|
||||||
time.sleep(settings.poll_interval)
|
time.sleep(settings.poll_interval)
|
||||||
|
|||||||
Reference in New Issue
Block a user