extract playback utils

This commit is contained in:
2025-12-10 16:19:49 +01:00
parent b7ff56ced2
commit f8619aa66c
2 changed files with 35 additions and 31 deletions

View File

@@ -7,7 +7,7 @@ from jellyfin.models import (
JellyfinMovieMediaMetadata,
JellyfinEpisodeMediaMetadata)
from jellyfin.utils.config import configure_client
from datetime import datetime
from jellyfin.utils.playback import get_current_playback
from typing import Optional, Tuple
import logging
import time
@@ -109,33 +109,6 @@ class JellyfinApiClient:
elif media_type == 'Movie':
return self.to_movie_model(item)
def get_playback_info(
self, media: dict) -> Tuple[Optional[int], Optional[int]]:
"""
Extracts playback start and end timestamps from a media item.
Args:
media (dict): The Jellyfin media item dictionary.
Returns:
Tuple[Optional[int], Optional[int]]: A tuple containing the start and end timestamps in seconds, or (None, None) if the media is paused.
"""
play_state = media.get('PlayState')
is_paused = play_state.get('IsPaused')
if is_paused:
return (None, None)
runtime_ticks = media.get('RunTimeTicks')
total_runtime_seconds = runtime_ticks // 10_000_000
playback_position_ticks = play_state.get('PositionTicks')
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:
"""
Converts a Jellyfin music media item dictionary to a JellyfinMediaItem model.
@@ -155,7 +128,7 @@ class JellyfinApiClient:
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) = get_current_playback(item)
return JellyfinMediaItem(
id=media_id,
@@ -182,7 +155,7 @@ class JellyfinApiClient:
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) = get_current_playback(item)
return JellyfinMediaItem(
id=media_id,
@@ -217,7 +190,7 @@ class JellyfinApiClient:
subtitle=item.get('Name')
)
(start, end) = self.get_playback_info(item)
(start, end) = get_current_playback(item)
return JellyfinMediaItem(
id=media_id,