much progress

This commit is contained in:
Hellow 2023-05-25 01:27:05 +02:00
parent 8af48fb4d4
commit a1650d560c
4 changed files with 43 additions and 1 deletions

View File

@ -96,7 +96,7 @@ class Collection:
return AppendResult(True, existing_object, False) return AppendResult(True, existing_object, False)
# if the object does already exist # if the object does already exist
# thus merging and don't add it afterwards # thus merging and don't add it afterward
if merge_into_existing: if merge_into_existing:
existing_object.merge(element) existing_object.merge(element)
# in case any relevant data has been added (e.g. it remaps the old object) # in case any relevant data has been added (e.g. it remaps the old object)

View File

@ -11,6 +11,10 @@ class DatabaseObject:
COLLECTION_ATTRIBUTES: tuple = tuple() COLLECTION_ATTRIBUTES: tuple = tuple()
SIMPLE_ATTRIBUTES: dict = dict() SIMPLE_ATTRIBUTES: dict = dict()
# contains all collection attributes, which describe something "smaller"
# e.g. album has songs, but not artist.
DOWNWARDS_COLLECTION_ATTRIBUTES: tuple = tuple()
def __init__(self, _id: int = None, dynamic: bool = False, **kwargs) -> None: def __init__(self, _id: int = None, dynamic: bool = False, **kwargs) -> None:
self.automatic_id: bool = False self.automatic_id: bool = False

View File

@ -204,6 +204,8 @@ class Album(MainObject):
"notes": FormattedText() "notes": FormattedText()
} }
DOWNWARDS_COLLECTION_ATTRIBUTES = ("song_collection",)
def __init__( def __init__(
self, self,
_id: int = None, _id: int = None,
@ -422,6 +424,8 @@ class Artist(MainObject):
"general_genre": "" "general_genre": ""
} }
DOWNWARDS_COLLECTION_ATTRIBUTES = ("feature_song_collection", "main_album_collection")
def __init__( def __init__(
self, self,
_id: int = None, _id: int = None,
@ -646,6 +650,8 @@ class Label(MainObject):
"notes": FormattedText() "notes": FormattedText()
} }
DOWNWARDS_COLLECTION_ATTRIBUTES = COLLECTION_ATTRIBUTES
def __init__( def __init__(
self, self,
_id: int = None, _id: int = None,

View File

@ -237,6 +237,38 @@ class Page(threading.Thread):
def fetch_label(self, source: Source, stop_at_level: int = 1) -> Label: def fetch_label(self, source: Source, stop_at_level: int = 1) -> Label:
return Label() return Label()
def download(self, music_object: DatabaseObject, download_all: bool = False) -> DownloadResult:
self._download(music_object, {}, download_all)
return DownloadResult()
def _download(self, music_object: DatabaseObject, naming_objects: Dict[Type[DatabaseObject], DatabaseObject], download_all: bool = False) -> list:
# Skips all releases, that are defined in shared.ALBUM_TYPE_BLACKLIST, if download_all is False
if isinstance(music_object, Album):
if not download_all and music_object.album_type in shared.ALBUM_TYPE_BLACKLIST:
return []
naming_objects[type(music_object)] = music_object
if isinstance(music_object, Song):
print("Downloading", music_object)
return [music_object]
return_values: List = []
for collection_name in music_object.DOWNWARDS_COLLECTION_ATTRIBUTES:
collection: Collection = getattr(self, collection_name)
sub_ordered_music_object: DatabaseObject
for sub_ordered_music_object in collection:
return_values.extend(self._download(sub_ordered_music_object, naming_objects.copy(), download_all))
return return_values
def download_song(self, song: Song, naming_objects: Dict[Type[DatabaseObject], DatabaseObject]):
pass
@classmethod @classmethod
def download( def download(
cls, cls,