public async Task <ActionResult <bool> > PostImportAsync([FromQuery] SpotifyToken token, IFormFile importFile, string userId) { if (string.IsNullOrEmpty(token?.AccessToken)) { return(RedirectToAction(nameof(GetAuthorization))); } if (importFile == null || importFile?.Length == 0) { return(BadRequest()); } StreamReader reader = new StreamReader(importFile.OpenReadStream()); string jsonData = await reader.ReadToEndAsync(); var data = JsonConvert.DeserializeObject <SpotifyData>(jsonData); if (data.Version != SpotifyDataVersion.VERSION_1) { return(RedirectToPage($"/Index", new { AccessToken = token.AccessToken, Message = "Unsuported version", Type = "warning" })); } var userPlaylists = await GetPlaylistsDictionaryAsync(token); foreach (var playlist in data.Playlists) { var playlistId = ""; if (!userPlaylists.ContainsKey(playlist.Name)) { var playlistObject = await _spotifyService.PostPlaylistAsync(token, userId, new PostPlaylist { Collaborative = playlist.Collaborative, Name = playlist.Name, Description = playlist.Description, Public = playlist.Public }); userPlaylists.Add(playlistObject.Name, playlistObject.Id); } playlistId = userPlaylists[playlist.Name]; var importTotalTracks = playlist.Tracks.Count; var userPlaylistTracks = await GetPlaylistTracksListAsync(token, playlistId); var importTotalTracksIterator = 0; do { PostPlaylistTracks tracks = new PostPlaylistTracks(); for (var j = 0; (importTotalTracksIterator < importTotalTracks && j < 50); j++) { var track = playlist.Tracks[(importTotalTracksIterator++)]; if (userPlaylistTracks.Contains(track.Uri)) { j--; continue; } tracks.Uris.Add(track.Uri); } await _spotifyService.PostPlaylistTracksAsync(token, playlistId, tracks); } while (importTotalTracksIterator < importTotalTracks); } var userTracks = await GetTracksListAsync(token); var totalTracks = data.Tracks.Count; var i = 0; while (i < totalTracks) { var groupTracks = new List <string>(); for (var j = 0; (i < totalTracks && j < 50); j++) { var track = data.Tracks[(i++)]; if (userTracks.Contains(track.Uri)) { j--; continue; } groupTracks.Add(track.Id); } await _spotifyService.PutTracksAsync(token, new PutTracks { Ids = string.Join(",", groupTracks.ToArray()) }); } foreach (var playlistFollow in data.FollowPlaylists) { var urisplit = playlistFollow.Split(":"); if (urisplit.Length != 3) { continue; } var playlistId = urisplit[2]; if (!await _spotifyService.IsFollowPlaylistAsync(token, playlistId)) { await _spotifyService.FollowPlaylistAsync(token, playlistId); } } return(RedirectToPage($"/Index", new { Message = "Imported!", Type = "success" })); }