diff --git a/ytdl_subscribe/downloaders/soundcloud_downloader.py b/ytdl_subscribe/downloaders/soundcloud_downloader.py index dbba1da3..69f7bb96 100644 --- a/ytdl_subscribe/downloaders/soundcloud_downloader.py +++ b/ytdl_subscribe/downloaders/soundcloud_downloader.py @@ -31,7 +31,9 @@ class SoundcloudDownloader(Downloader): artist_albums_url = f"{self.artist_url(artist_name)}/albums" info = self.extract_info(url=artist_albums_url) - return [SoundcloudAlbum(**e) for e in info["entries"]] + albums = [SoundcloudAlbum(**e) for e in info["entries"]] + + return [album for album in albums if album.track_count > 0] def download_tracks(self, artist_name) -> List[SoundcloudTrack]: """ diff --git a/ytdl_subscribe/entries/entry.py b/ytdl_subscribe/entries/entry.py index 436e11b2..45fdeaf5 100644 --- a/ytdl_subscribe/entries/entry.py +++ b/ytdl_subscribe/entries/entry.py @@ -13,7 +13,7 @@ from ytdl_subscribe.validators.config.overrides.overrides_validator import Overr @dataclass class PlaylistMetadata: - order_index: int + playlist_index: int playlist_id: str playlist_extractor: str diff --git a/ytdl_subscribe/entries/soundcloud.py b/ytdl_subscribe/entries/soundcloud.py index d337eecc..8faed23f 100644 --- a/ytdl_subscribe/entries/soundcloud.py +++ b/ytdl_subscribe/entries/soundcloud.py @@ -83,7 +83,7 @@ class SoundcloudAlbumTrack(SoundcloudTrack): @property def track_number(self) -> int: """Returns the entry's track number""" - return self._playlist_metadata.order_index + return self._playlist_metadata.playlist_index @property def album(self) -> str: @@ -96,7 +96,7 @@ class SoundcloudAlbumTrack(SoundcloudTrack): return self._album_year @classmethod - def from_soundcloud_entry( + def from_soundcloud_track( cls, album: str, album_year: int, @@ -129,21 +129,24 @@ class SoundcloudAlbum(Entry): Returns all tracks in the album represented as album-tracks. They will share the same album name, have ordered track numbers, and a shared album year. """ - tracks = [SoundcloudTrack(**entry) for entry in self.kwargs("entries")] - - if skip_premiere_tracks: - tracks = [track for track in tracks if not track.is_premiere] + tracks = [ + track + for track in self._single_tracks + if not (skip_premiere_tracks and track.is_premiere) + ] album_tracks = [ - SoundcloudAlbumTrack.from_soundcloud_entry( + SoundcloudAlbumTrack.from_soundcloud_track( album=self.title, album_year=self.album_year, soundcloud_track=track, playlist_metadata=PlaylistMetadata( - playlist_id=self.uid, playlist_extractor=self.extractor, order_index=i + 1 + playlist_id=self.uid, + playlist_extractor=self.extractor, + playlist_index=track.kwargs("playlist_index"), ), ) - for i, track in enumerate(tracks) + for track in tracks ] return album_tracks diff --git a/ytdl_subscribe/ytdl_additions/enhanced_download_archive.py b/ytdl_subscribe/ytdl_additions/enhanced_download_archive.py index cf8a0511..c5e2a71d 100644 --- a/ytdl_subscribe/ytdl_additions/enhanced_download_archive.py +++ b/ytdl_subscribe/ytdl_additions/enhanced_download_archive.py @@ -71,7 +71,8 @@ class DownloadArchive: def to_file(self, file_path: str) -> "DownloadArchive": with open(file_path, "w", encoding="utf8") as file: - file.writelines(self._download_archive_lines) + for line in self._download_archive_lines: + file.write(f"{line}\n") return self def contains(self, entry_id: str) -> bool: