Exemplo n.º 1
0
        private async Task StartPlaylistGeneration()
        {
            const int tracksPerPlaylist = 9900;

            var paginator = new SimplePaginatorWithDelay(100);

            var authenticator = this.spotifyAuthorization.GetAuthenticator();
            var spotifyClient = new SpotifyClient(SpotifyClientConfig.CreateDefault().WithAuthenticator(authenticator));
            var profile       = await spotifyClient.UserProfile.Current();

            var albums = this.GetAlbums().OrderBy(a => a.Artist).ThenBy(a => a.Album).ToList();

            var cachedAlbums = this.GetCachedAlbums();

            List <string> trackUris = new List <string>();
            int           counter   = 0;

            var cachedAlbumsInLibrary = cachedAlbums.Where(ca => albums.Select(a => a.Id).Contains(ca.Id));

            trackUris.AddRange(cachedAlbumsInLibrary.SelectMany(ca => ca.TrackUris));

            var albumsNotInCache = albums.Where(a => !cachedAlbums.Any(ca => ca.Id == a.Id)).ToList();

            foreach (var album in albumsNotInCache)
            {
                Console.WriteLine($"Processing {++counter}/{albumsNotInCache.Count}: {album.Artist} - {album.Album}");
                var albumTrackUris = (await spotifyClient.PaginateAll(await spotifyClient.Albums.GetTracks(album.Id).ConfigureAwait(false), paginator)).Select(at => at.Uri).ToList();
                trackUris.AddRange(albumTrackUris);

                cachedAlbums.Add(new AlbumWithTracks {
                    Id = album.Id, TrackUris = albumTrackUris
                });

                Thread.Sleep(100);
            }

            this.SaveCachedAlbums(cachedAlbums);

            int playlistCounter = 1;

            var blacklistHelper = new TrackBlacklistHelper();

            trackUris = trackUris.Except(blacklistHelper.GetBlacklist()).ToList();

            while (trackUris.Any())
            {
                string playlistId = await GetPlaylistId(string.Format(Constants.PlaylistName, playlistCounter++), paginator, spotifyClient, profile).ConfigureAwait(false);
                await AddTracksToPlaylist(spotifyClient, playlistId, trackUris.Take(tracksPerPlaylist).ToList());

                trackUris.RemoveRange(0, Math.Min(tracksPerPlaylist, trackUris.Count));
            }
        }
Exemplo n.º 2
0
        private static async Task <string> GetPlaylistId(string playlistName, SimplePaginatorWithDelay paginator, SpotifyClient spotifyClient, PrivateUser profile)
        {
            var playlists = await spotifyClient.PaginateAll(await spotifyClient.Playlists.GetUsers(profile.Id).ConfigureAwait(false), paginator);

            var playlist = playlists.FirstOrDefault(pl => pl.Name == playlistName);

            FullPlaylist createdPlaylist = null;

            if (playlist == null)
            {
                createdPlaylist = await spotifyClient.Playlists.Create(profile.Id, new PlaylistCreateRequest(playlistName));
            }

            string playlistId = playlist?.Id ?? createdPlaylist?.Id;

            return(playlistId);
        }