示例#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));
            }
        }
        private void AddTracksToBlacklistClicked(object sender, EventArgs e)
        {
            var blacklistHelper = new TrackBlacklistHelper();
            var text            = Clipboard.GetText();

            if (text.Contains("\n"))
            {
                blacklistHelper.AddRangeToBlacklist(text.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries));
            }
            else
            {
                blacklistHelper.AddToBlacklist(text);
            }
        }