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); } }