playlist metadata

This commit is contained in:
jbannon 2022-04-11 23:56:31 +00:00
parent af2d091d50
commit 5a63d80ca5
2 changed files with 31 additions and 16 deletions

View file

@ -1,4 +1,5 @@
from abc import ABC from abc import ABC
from dataclasses import dataclass
from pathlib import Path from pathlib import Path
from typing import Any from typing import Any
from typing import Dict from typing import Dict
@ -10,6 +11,13 @@ from ytdl_subscribe.validators.base.string_formatter_validators import StringFor
from ytdl_subscribe.validators.config.overrides.overrides_validator import OverridesValidator from ytdl_subscribe.validators.config.overrides.overrides_validator import OverridesValidator
@dataclass
class PlaylistMetadata:
order_index: int
playlist_id: str
playlist_extractor: str
# TODO: strip things out of entry into BaseEntry # TODO: strip things out of entry into BaseEntry
class BaseEntry(ABC): class BaseEntry(ABC):
def __init__(self, **kwargs): def __init__(self, **kwargs):
@ -41,14 +49,13 @@ class BaseEntry(ABC):
return self.kwargs("extractor") return self.kwargs("extractor")
@property @property
def order_index(self) -> int: def playlist_metadata(self) -> Optional[PlaylistMetadata]:
""" """
Reserved for any child entry class that might have some kind of ordering to it. Reserved for any child entry class that resides in a playlist.
Returns 1 unless overwritten.
:return: The order index (1-based) :return: Playlist metadata for this entry
""" """
return 1 return None
def to_dict(self) -> Dict[str, str]: def to_dict(self) -> Dict[str, str]:
"""Returns the entry's values as a dictionary""" """Returns the entry's values as a dictionary"""

View file

@ -1,9 +1,11 @@
from typing import Dict from typing import Dict
from typing import List from typing import List
from typing import Optional
from sanitize_filename import sanitize from sanitize_filename import sanitize
from ytdl_subscribe.entries.entry import Entry from ytdl_subscribe.entries.entry import Entry
from ytdl_subscribe.entries.entry import PlaylistMetadata
class SoundcloudTrack(Entry): class SoundcloudTrack(Entry):
@ -65,23 +67,23 @@ class SoundcloudAlbumTrack(SoundcloudTrack):
Entry object to represent a Soundcloud track yt-dlp that belongs to an album. Entry object to represent a Soundcloud track yt-dlp that belongs to an album.
""" """
def __init__(self, album: str, album_year: int, track_number: int, **kwargs): def __init__(self, album: str, album_year: int, playlist_metadata: PlaylistMetadata, **kwargs):
""" """
Initialize the album track using album metadata and ytdl metadata for the specific track. Initialize the album track using album metadata and ytdl metadata for the specific track.
""" """
super().__init__(**kwargs) super().__init__(**kwargs)
self._album = album self._album = album
self._album_year = album_year self._album_year = album_year
self._track_number = track_number self._playlist_metadata = playlist_metadata
@property
def playlist_metadata(self) -> Optional[PlaylistMetadata]:
return self._playlist_metadata
@property @property
def track_number(self) -> int: def track_number(self) -> int:
"""Returns the entry's track number""" """Returns the entry's track number"""
return self._track_number return self._playlist_metadata.order_index
@property
def order_index(self) -> int:
return self._track_number
@property @property
def album(self) -> str: def album(self) -> str:
@ -95,12 +97,16 @@ class SoundcloudAlbumTrack(SoundcloudTrack):
@classmethod @classmethod
def from_soundcloud_entry( def from_soundcloud_entry(
cls, soundcloud_track: SoundcloudTrack, album: str, album_year: int, track_number: int cls,
album: str,
album_year: int,
soundcloud_track: SoundcloudTrack,
playlist_metadata: PlaylistMetadata,
) -> "SoundcloudAlbumTrack": ) -> "SoundcloudAlbumTrack":
return SoundcloudAlbumTrack( return SoundcloudAlbumTrack(
album=album, album=album,
album_year=album_year, album_year=album_year,
track_number=track_number, playlist_metadata=playlist_metadata,
**soundcloud_track._kwargs, **soundcloud_track._kwargs,
) )
@ -130,10 +136,12 @@ class SoundcloudAlbum(Entry):
album_tracks = [ album_tracks = [
SoundcloudAlbumTrack.from_soundcloud_entry( SoundcloudAlbumTrack.from_soundcloud_entry(
soundcloud_track=track,
album=self.title, album=self.title,
album_year=self.album_year, album_year=self.album_year,
track_number=i + 1, soundcloud_track=track,
playlist_metadata=PlaylistMetadata(
playlist_id=self.uid, playlist_extractor=self.extractor, order_index=i + 1
),
) )
for i, track in enumerate(tracks) for i, track in enumerate(tracks)
] ]