fuuuuuck
This commit is contained in:
		| @@ -14,6 +14,7 @@ class DatabaseObject: | |||||||
|     # contains all collection attributes, which describe something "smaller" |     # contains all collection attributes, which describe something "smaller" | ||||||
|     # e.g. album has songs, but not artist. |     # e.g. album has songs, but not artist. | ||||||
|     DOWNWARDS_COLLECTION_ATTRIBUTES: tuple = tuple() |     DOWNWARDS_COLLECTION_ATTRIBUTES: tuple = tuple() | ||||||
|  |     UPWARDS_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 | ||||||
|   | |||||||
| @@ -47,6 +47,8 @@ class Song(MainObject): | |||||||
|         "notes": FormattedText() |         "notes": FormattedText() | ||||||
|     } |     } | ||||||
|      |      | ||||||
|  |     UPWARDS_COLLECTION_ATTRIBUTES = ("album_collection", "main_artist_collection", "feature_artist_collection") | ||||||
|  |  | ||||||
|     def __init__( |     def __init__( | ||||||
|             self, |             self, | ||||||
|             _id: int = None, |             _id: int = None, | ||||||
| @@ -204,7 +206,8 @@ class Album(MainObject): | |||||||
|         "notes": FormattedText() |         "notes": FormattedText() | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     DOWNWARDS_COLLECTION_ATTRIBUTES = ("song_collection",) |     DOWNWARDS_COLLECTION_ATTRIBUTES = ("song_collection", ) | ||||||
|  |     UPWARDS_COLLECTION_ATTRIBUTES = ("artist_collection", "label_collection") | ||||||
|  |  | ||||||
|     def __init__( |     def __init__( | ||||||
|             self, |             self, | ||||||
| @@ -425,6 +428,7 @@ class Artist(MainObject): | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     DOWNWARDS_COLLECTION_ATTRIBUTES = ("feature_song_collection", "main_album_collection") |     DOWNWARDS_COLLECTION_ATTRIBUTES = ("feature_song_collection", "main_album_collection") | ||||||
|  |     UPWARDS_COLLECTION_ATTRIBUTES = ("label_collection", ) | ||||||
|  |  | ||||||
|     def __init__( |     def __init__( | ||||||
|             self, |             self, | ||||||
|   | |||||||
| @@ -23,6 +23,7 @@ from ..utils.enums.source import SourcePages | |||||||
| from ..utils.enums.album import AlbumType | from ..utils.enums.album import AlbumType | ||||||
| from ..audio import write_metadata_to_target, correct_codec | from ..audio import write_metadata_to_target, correct_codec | ||||||
| from ..utils import shared | from ..utils import shared | ||||||
|  | from ..utils.shared import DEFAULT_VALUES, DOWNLOAD_PATH, DOWNLOAD_FILE | ||||||
| from ..utils.support_classes import Query, DownloadResult, DefaultTarget | from ..utils.support_classes import Query, DownloadResult, DefaultTarget | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -237,8 +238,26 @@ 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: |     def download(self, music_object: DatabaseObject, genre: str, download_all: bool = False) -> DownloadResult: | ||||||
|         self._download(music_object, {}, download_all) |         naming_objects = {"genre": genre} | ||||||
|  |          | ||||||
|  |         def fill_naming_objects(naming_music_object: DatabaseObject): | ||||||
|  |             nonlocal naming_objects | ||||||
|  |              | ||||||
|  |             for collection_name in naming_music_object.UPWARDS_COLLECTION_ATTRIBUTES: | ||||||
|  |                 collection: Collection = getattr(self, collection_name) | ||||||
|  |                  | ||||||
|  |                 if collection.empty(): | ||||||
|  |                     continue | ||||||
|  |                 if collection.element_type in naming_objects: | ||||||
|  |                     continue | ||||||
|  |                  | ||||||
|  |                 dom_ordered_music_object: DatabaseObject = collection[0] | ||||||
|  |                 return fill_naming_objects(dom_ordered_music_object) | ||||||
|  |            | ||||||
|  |         fill_naming_objects(music_object) | ||||||
|  |            | ||||||
|  |         self._download(music_object, {}, genre, download_all) | ||||||
|  |  | ||||||
|         return DownloadResult() |         return DownloadResult() | ||||||
|  |  | ||||||
| @@ -252,8 +271,7 @@ class Page(threading.Thread): | |||||||
|         naming_objects[type(music_object)] = music_object |         naming_objects[type(music_object)] = music_object | ||||||
|  |  | ||||||
|         if isinstance(music_object, Song): |         if isinstance(music_object, Song): | ||||||
|             print("Downloading", music_object) |             return [self._download_song(music_object, naming_objects)] | ||||||
|             return [music_object] |  | ||||||
|  |  | ||||||
|         return_values: List = [] |         return_values: List = [] | ||||||
|  |  | ||||||
| @@ -266,7 +284,31 @@ class Page(threading.Thread): | |||||||
|  |  | ||||||
|         return return_values |         return return_values | ||||||
|  |  | ||||||
|     def download_song(self, song: Song, naming_objects: Dict[Type[DatabaseObject], DatabaseObject]): |     def _download_song(self, song: Song, naming_objects: Dict[Type[DatabaseObject], DatabaseObject]): | ||||||
|  |         name_attribute = DEFAULT_VALUES.copy() | ||||||
|  |          | ||||||
|  |         # song | ||||||
|  |         name_attribute["genre"] = naming_objects["genre"] | ||||||
|  |         name_attribute["song"] = song.title | ||||||
|  |          | ||||||
|  |         if Album in naming_objects: | ||||||
|  |             album: Album = naming_objects[Album] | ||||||
|  |             name_attribute["album"] = album.title | ||||||
|  |             name_attribute["album_type"] = album.album_type.value | ||||||
|  |          | ||||||
|  |         if Artist in naming_objects: | ||||||
|  |             artist: Artist = naming_objects[Artist] | ||||||
|  |             naming_objects["artist"] = artist.name | ||||||
|  |          | ||||||
|  |         if Label in naming_objects: | ||||||
|  |             label: Label = naming_objects[Label] | ||||||
|  |             naming_objects["label"] = label.name | ||||||
|  |          | ||||||
|  |         new_target = Target( | ||||||
|  |             relative_to_music_dir=True, | ||||||
|  |             path=DOWNLOAD_PATH.format(**name_attribute), | ||||||
|  |             file=DOWNLOAD_FILE.format(**name_attribute) | ||||||
|  |         ) | ||||||
|         pass |         pass | ||||||
|  |  | ||||||
|     @classmethod |     @classmethod | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user