diff --git a/music_kraken/objects/song.py b/music_kraken/objects/song.py index e396a32..37f1a6e 100644 --- a/music_kraken/objects/song.py +++ b/music_kraken/objects/song.py @@ -560,7 +560,6 @@ class Artist(Base): id3Mapping.ARTIST: [self.name], id3Mapping.ARTIST_WEBPAGE_URL: self.source_collection.url_list, }) - metadata.merge_many([s.get_artist_metadata() for s in self.source_collection]) return metadata diff --git a/music_kraken/objects/source.py b/music_kraken/objects/source.py index 710f7ee..130cacd 100644 --- a/music_kraken/objects/source.py +++ b/music_kraken/objects/source.py @@ -108,6 +108,9 @@ class SourceCollection: self.extend(data or []) + def has_source_page(self, *source_pages: SourcePages) -> bool: + return any(source_page in self._page_to_source_list for source_page in source_pages) + def get_sources(self, *source_pages: List[Source]) -> Generator[Source]: if not len(source_pages): source_pages = self.source_pages @@ -146,7 +149,7 @@ class SourceCollection: @property def url_list(self) -> List[str]: - return [source.url for source in self.get_sources(SourcePages.ARTIST)] + return [source.url for source in self.get_sources()] @property def homepage_list(self) -> List[str]: diff --git a/music_kraken/pages/abstract.py b/music_kraken/pages/abstract.py index 712c371..c405c60 100644 --- a/music_kraken/pages/abstract.py +++ b/music_kraken/pages/abstract.py @@ -419,9 +419,10 @@ class Page: if song.target_collection.empty: song.target_collection.append(new_target) + if not song.source_collection.has_source_page(self.SOURCE_TYPE): + return DownloadResult(error_message=f"No {self.__class__.__name__} source found for {song.option_string}.") + sources = song.source_collection.get_sources(self.SOURCE_TYPE) - if len(sources) == 0: - return DownloadResult(error_message=f"No source found for {song.title} as {self.__class__.__name__}.") temp_target: Target = Target( relative_to_music_dir=False, @@ -448,14 +449,19 @@ class Page: self.LOGGER.info(f"{song.option_string} already exists, thus not downloading again.") return r - source = sources[0] - if not found_on_disc: - r = self.download_song_to_target(source=source, target=temp_target, desc=song.option_string) + for source in sources: + r = self.download_song_to_target(source=source, target=temp_target, desc=song.option_string) - if not r.is_fatal_error: - r.merge(self._post_process_targets(song, temp_target, - [] if found_on_disc else self.get_skip_intervals(song, source))) + if not r.is_fatal_error: + break + + if temp_target.exists: + r.merge(self._post_process_targets( + song=song, + temp_target=temp_target, + interval_list=[] if found_on_disc else self.get_skip_intervals(song, source) + )) return r