75 lines
1.7 KiB
Python
75 lines
1.7 KiB
Python
"""
|
|
Defines the objects that are returned by adapter methods.
|
|
"""
|
|
import abc
|
|
from datetime import datetime, timedelta
|
|
from enum import Enum
|
|
from typing import Optional, Sequence
|
|
|
|
|
|
class MediaType(Enum):
|
|
MUSIC = "music"
|
|
PODCAST = "podcast"
|
|
AUDIOBOOK = "audiobook"
|
|
VIDEO = "video"
|
|
|
|
|
|
class Song(abc.ABC):
|
|
id: str
|
|
title: str
|
|
parent: str
|
|
album: str
|
|
artist: str
|
|
track: Optional[int]
|
|
year: Optional[int]
|
|
genre: Optional[str]
|
|
cover_art: Optional[str]
|
|
size: Optional[int]
|
|
content_type: Optional[str]
|
|
suffix: Optional[str]
|
|
transcoded_content_type: Optional[str]
|
|
transcoded_suffix: Optional[str]
|
|
duration: Optional[timedelta]
|
|
bit_rate: Optional[int]
|
|
path: Optional[str]
|
|
is_video: Optional[bool]
|
|
user_rating: Optional[int]
|
|
average_rating: Optional[float]
|
|
play_count: Optional[int]
|
|
disc_number: Optional[int]
|
|
created: Optional[datetime]
|
|
starred: Optional[datetime]
|
|
album_id: Optional[str]
|
|
artist_id: Optional[str]
|
|
type: Optional[MediaType]
|
|
# TODO trim down, make another data structure for directory?
|
|
|
|
|
|
class Playlist(abc.ABC):
|
|
# TODO trim down
|
|
id: str
|
|
name: str
|
|
song_count: Optional[int]
|
|
duration: Optional[timedelta]
|
|
created: Optional[datetime]
|
|
changed: Optional[datetime]
|
|
comment: Optional[str]
|
|
owner: Optional[str]
|
|
public: Optional[bool]
|
|
cover_art: Optional[str]
|
|
|
|
|
|
class PlaylistDetails(abc.ABC):
|
|
# TODO trim down
|
|
id: str
|
|
name: str
|
|
song_count: int
|
|
duration: timedelta
|
|
songs: Sequence[Song]
|
|
created: Optional[datetime]
|
|
changed: Optional[datetime]
|
|
comment: Optional[str]
|
|
owner: Optional[str]
|
|
public: Optional[bool]
|
|
cover_art: Optional[str]
|