Esempio n. 1
0
        public bool Execute(Account user, object result, string args)
        {
            var api       = _spotifyService.GetSpotifyWebApi(_spotifyService.GetSpotifyToken(user));
            var tracks    = result as List <SimpleTrack>;
            var playlists = _spotifyService.GetUserPlaylists(api, user);

            if (playlists == null || tracks == null)
            {
                return(false);
            }
            for (int i = 0; i < playlists.Items.Count; i++)
            {
                if (playlists.Items[i].Name == "AreaPlaylist")
                {
                    Console.WriteLine("AreaPlaylist already exists, adding new track to it");
                    _spotifyService.AddTracksToPlaylist(api, tracks, playlists.Items[i].Id, user);
                    return(true);
                }
            }
            FullPlaylist playlist = _spotifyService.CreatePlaylist(api, "AreaPlaylist", user);

            if (playlist != null)
            {
                Console.WriteLine("AreayPlaylist created and tracks added");
                _spotifyService.AddTracksToPlaylist(api, tracks, playlist.Id, user);
                return(true);
            }
            Console.WriteLine("AreaPlaylist not found even after creating it");
            return(false);
        }
Esempio n. 2
0
        /// <summary>
        /// Save the new playlist to the users spotify account
        /// </summary>
        /// <returns></returns>
        public async Task SavePlaylist()
        {
            var playlist = await SpotifyService.CreatePlaylist(AuthenticationService.User, AuthenticationService.AuthenticationToken, "Favorite Artists + Top Songs " + DateTime.Now.ToString(), "Created with Randify!", isPublic : true);

            try
            {
                var tracks = new List <Track>();

                for (int i = 0; i < Tracks.Count; i++)
                {
                    if (!string.IsNullOrWhiteSpace(Tracks[i].Id))
                    {
                        tracks.Add(Tracks[i]);
                    }

                    if (i % 100 == 0)
                    {
                        await SpotifyService.AddTracksToPlaylist(AuthenticationService.User, AuthenticationService.AuthenticationToken, playlist, tracks);

                        tracks.Clear();
                    }
                }

                await SpotifyService.AddTracksToPlaylist(AuthenticationService.User, AuthenticationService.AuthenticationToken, playlist, tracks);
            }
            catch (Exception ex)
            {
                PageException = ex;
            }

            ShowPlaylistSaved = true;

            StateHasChanged();
        }
Esempio n. 3
0
        /// <summary>
        /// Randomize the currently playlist, remove all of the tracks from the playlist, add all of the tracks back in a random order
        /// </summary>
        /// <returns></returns>
        public async Task Randify()
        {
            if (IsRandifying || IsPlaylistLoading)
            {
                return;
            }

            IsRandifying = true;

            var currentPlaylist     = CurrentPlaylist;
            var randomTracks        = PlaylistTracks.ToList();
            var listOfSkippedTracks = new List <PlaylistTrack>();

            var tracks = new List <Track>();

            // it looks overcomplicated and you're right, but the spotify endpoint has a limit of 100 songs
            try
            {
                for (int i = 0; i < randomTracks.Count; i++)
                {
                    if (!string.IsNullOrEmpty(randomTracks[i].Track.Id) && !string.IsNullOrWhiteSpace(randomTracks[i].Track.Id))
                    {
                        tracks.Add(randomTracks[i].Track);
                    }
                    else
                    {
                        listOfSkippedTracks.Add(randomTracks[i]);
                    }

                    if (i % 100 == 0)
                    {
                        await SpotifyService.RemoveTracksFromPlaylist(AuthenticationService.User, AuthenticationService.AuthenticationToken, currentPlaylist, tracks);

                        tracks.Clear();
                    }
                }

                await SpotifyService.RemoveTracksFromPlaylist(AuthenticationService.User, AuthenticationService.AuthenticationToken, currentPlaylist, tracks);
            }
            catch (Exception ex)
            {
                PageException = ex;
            }

            tracks.Clear();

            randomTracks = randomTracks
                           .OrderBy(o => Guid.NewGuid())
                           .ToList();

            // it looks overcomplicated and you're right, but the spotify endpoint has a limit of 100 songs
            try
            {
                for (int i = 0; i < randomTracks.Count; i++)
                {
                    if (!string.IsNullOrEmpty(randomTracks[i].Track.Id) && !string.IsNullOrWhiteSpace(randomTracks[i].Track.Id))
                    {
                        tracks.Add(randomTracks[i].Track);
                    }

                    if (i % 100 == 0)
                    {
                        await SpotifyService.AddTracksToPlaylist(AuthenticationService.User, AuthenticationService.AuthenticationToken, currentPlaylist, tracks);

                        tracks.Clear();
                    }
                }

                await SpotifyService.AddTracksToPlaylist(AuthenticationService.User, AuthenticationService.AuthenticationToken, currentPlaylist, tracks);
            }
            catch (Exception ex)
            {
                PageException = ex;
            }

            foreach (var skippedTrack in listOfSkippedTracks)
            {
                randomTracks.Remove(skippedTrack);
            }

            listOfSkippedTracks.Reverse();

            foreach (var skippedTrack in listOfSkippedTracks)
            {
                randomTracks.Insert(0, skippedTrack);
            }

            IsRandifying = false;

            await BindPlaylistAfterSort(randomTracks);
        }