54 lines
1.3 KiB
Python
54 lines
1.3 KiB
Python
from jellyfin.models import (
|
|
JellyfinMediaItem,
|
|
JellyfinMediaType,
|
|
JellyfinMusicMediaMetadata
|
|
)
|
|
from jellyfin.utils.playback import get_current_playback
|
|
from jellyfin.utils.image import get_image_url
|
|
from datetime import datetime
|
|
|
|
|
|
def to_media_item(
|
|
item: dict
|
|
) -> JellyfinMediaItem:
|
|
"""
|
|
Converts a Jellyfin audio media item dictionary to a JellyfinMediaItem.
|
|
|
|
Args:
|
|
item (dict): The Jellyfin music media item dictionary.
|
|
Returns:
|
|
JellyfinMediaItem: The converted JellyfinMediaItem model.
|
|
"""
|
|
item_id = item.get('Id')
|
|
|
|
# Get album ID (for image)
|
|
album_id = item.get('ParentId')
|
|
|
|
# Construct album title (with year if available)
|
|
premiere_date = item.get('PremiereDate')
|
|
premiere_year = None
|
|
album = item.get('Album')
|
|
|
|
if premiere_date:
|
|
premiere_year = datetime.fromisoformat(premiere_date).year
|
|
album = f"{album} ({premiere_year})"
|
|
|
|
# Construct metadata
|
|
metadata = JellyfinMusicMediaMetadata(
|
|
artist=item.get('AlbumArtist'),
|
|
album=album
|
|
)
|
|
|
|
# Get playback positions
|
|
(start, end) = get_current_playback(item)
|
|
|
|
return JellyfinMediaItem(
|
|
id=item_id,
|
|
name=item.get('Name'),
|
|
type=JellyfinMediaType.AUDIO,
|
|
image_url=get_image_url(item_id),
|
|
start=start,
|
|
end=end,
|
|
metadata=metadata
|
|
)
|