using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Sony.Filtr.Contracts.Entities; using Sony.Filtr.PlaylistSynchronization; using Sony.Filtr.SpotifyWebAPI; using Sony.Filtr.Utility.Extensions; namespace Sony.Filtr.Worker.Onetime { public class TrackSearchTest { private readonly ServiceAccountManager _serviceAccountManager; private readonly SpotifyWebApi _spotifyWebApi; public TrackSearchTest(ServiceAccountManager serviceAccountManager, SpotifyWebApi spotifyWebApi) { _serviceAccountManager = serviceAccountManager; _spotifyWebApi = spotifyWebApi; } public async Task ExecuteAsync() { var serviceAccount = _serviceAccountManager.GetServiceAccount(8); var authClient = _spotifyWebApi.GetAuthenticatedSession(serviceAccount); var targetPlaylist = new SpotifyLink("spotify:user:viruzi:playlist:4KoUjsUaHgLWgppFLRRku6"); int maxLimit = 50; var query = "white christmas"; var searchTracksResponse = await _spotifyWebApi.SearchTracksAsync(query, limit:maxLimit, offset: 0); int offsets = (searchTracksResponse.tracks.total + maxLimit-1) / maxLimit; var tracks = searchTracksResponse.tracks.items.ToList(); await authClient.AddAllTrackAsync(targetPlaylist.ExtractSpotifyPlaylistUserName(), targetPlaylist.ExtractPlaylistID(), tracks.Select(t => t.uri).ToList()); await Enumerable.Range(1, offsets).ForEachAsync(1, async offsetIndex => { var response = await _spotifyWebApi.SearchTracksAsync(query, limit: maxLimit, offset: offsetIndex*maxLimit); var tracksWithCorrectTitle = response.tracks.items.Where(t => t.name.IndexOf(query, StringComparison.CurrentCultureIgnoreCase) > 0).ToList(); if (tracksWithCorrectTitle.Any()) { await authClient.AddAllTrackAsync(targetPlaylist.ExtractSpotifyPlaylistUserName(), targetPlaylist.ExtractPlaylistID(), tracksWithCorrectTitle.Select(t => t.uri).ToList()); } }); } } }