Ejemplo n.º 1
0
        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" }));
        }
Ejemplo n.º 2
0
        public async Task <bool> PostPlaylistTracksAsync(SpotifyToken token, string playlistId, PostPlaylistTracks tracks)
        {
            _apiClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
            var response = await _apiClient.PostAsJsonAsync($"playlists/{playlistId}/tracks", tracks);

            return(response.IsSuccessStatusCode);
        }