Example #1
0
        public void GetDynamicPlaylist_WhereMoodAndStyle_CanSteerDynamicPlaylistByMood(string title, string styles, string moods)
        {
            //arrange
            TermList styleTerms = new TermList();

            foreach (string s in styles.Split(','))
            {
                styleTerms.Add(s);
            }

            TermList moodTerms = new TermList();

            foreach (string s in moods.Split(','))
            {
                moodTerms.Add(s);
            }

            DynamicArgument dynamicArgument = new DynamicArgument
            {
                Adventurousness = 0.4,
                Type            = "artist-description",
                Variety         = 0.4 /* variety of artists */
            };

            dynamicArgument.Styles.AddRange(styleTerms);

            dynamicArgument.Moods.AddRange(moodTerms);

            //act
            using (EchoNestSession session = new EchoNestSession(ConfigurationManager.AppSettings.Get("echoNestApiKey")))
            {
                //act
                DynamicPlaylistResponse searchResponse = session.Query <Dynamic>().Execute(dynamicArgument);

                //assert
                Assert.IsNotNull(searchResponse);
                Assert.IsNotNull(searchResponse.Songs);
                Assert.IsTrue(searchResponse.Songs.Any());

                // arrange next part of test
                string sessionId = searchResponse.SessionId;

                // output
                Console.WriteLine("Dynamic Playlist Session Id: {0}", sessionId);
                Console.WriteLine();
                Console.WriteLine("Songs for : {0}", title);
                foreach (SongBucketItem song in searchResponse.Songs)
                {
                    Console.WriteLine("\t{0} ({1})", song.Title, song.ArtistName);
                }
                Console.WriteLine();
                Console.WriteLine("Steering Playlist by mood = -happy");
                Console.WriteLine();

                dynamicArgument = new DynamicArgument {
                    SteerMood = "-happy", SessionId = sessionId
                };
                searchResponse = session.Query <Dynamic>().Execute(dynamicArgument);
                Console.WriteLine("Next song in dynamic playlist for : {0}", title);
                foreach (SongBucketItem song in searchResponse.Songs)
                {
                    Console.WriteLine("\t{0} ({1})", song.Title, song.ArtistName);
                }

                Console.WriteLine();
                Console.WriteLine("Steering Playlist by tempo = +10% (tempo^1.1)");
                Console.WriteLine();
                dynamicArgument = new DynamicArgument {
                    Steer = "tempo^1.1", SessionId = sessionId
                };
                searchResponse = session.Query <Dynamic>().Execute(dynamicArgument);
                Console.WriteLine("Next song in dynamic playlist for : {0}", title);
                foreach (SongBucketItem song in searchResponse.Songs)
                {
                    Console.WriteLine("\t{0} ({1})", song.Title, song.ArtistName);
                }
                Console.WriteLine();
            }
        }
        public bool MoveNext(CancellationToken token)
        {
            if (string.IsNullOrEmpty(_sessionId))
            {
                using (var session = new EchoNestSession(EchoNestModule.ApiKey))
                {
                    var argument = new DynamicArgument();
                    argument.Type = "artist-radio";
                    argument.Artist.Add(_initialArtistName);
                    argument.Dmca = true;

                    var response = session.Query <Dynamic>().Execute(argument);

                    if (response.Status.Code == ResponseCode.Success)
                    {
                        _sessionId = response.SessionId;

                        var song = response
                                   .Songs
                                   .FirstOrDefault(s => s.ArtistName.Equals(_initialArtistName, StringComparison.InvariantCultureIgnoreCase));

                        if (song == null)
                        {
                            song = response.Songs.FirstOrDefault();
                        }

                        if (song != null)
                        {
                            if (token.IsCancellationRequested)
                            {
                                token.ThrowIfCancellationRequested();
                            }

                            var queryResult = _radio.GetTracksByName(_initialArtistName + " " + song.Title);

                            if (!queryResult.Any())
                            {
                                queryResult = _radio.GetTracksByName(_initialArtistName);
                            }

                            _currentTracks =
                                queryResult
                                .Where(s => s.Artist.Equals(_initialArtistName, StringComparison.InvariantCultureIgnoreCase))
                                .Take(1)
                                .ToArray();

                            if (!_currentTracks.Any())
                            {
                                _toastService.Show("Unable to find any tracks matching the query");
                                return(false);
                            }

                            return(true);
                        }
                    }
                    else
                    {
                        _toastService.Show(response.Status.Message);
                    }
                }
            }
            else
            {
                using (var session = new EchoNestSession(EchoNestModule.ApiKey))
                {
                    if (token.IsCancellationRequested)
                    {
                        token.ThrowIfCancellationRequested();
                    }

                    var argument = new DynamicArgument
                    {
                        SessionId = _sessionId
                    };

                    if (_likesCurrentTrack.HasValue)
                    {
                        if (!_likesCurrentTrack.Value)
                        {
                            argument.Ban = "artist";
                        }
                    }

                    if (_currentTrackRating.HasValue)
                    {
                        argument.Rating = Convert.ToInt32(_currentTrackRating.GetValueOrDefault(1));
                    }

                    var response = session.Query <Dynamic>().Execute(argument);

                    _likesCurrentTrack  = null;
                    _currentTrackRating = null;

                    if (response.Status.Code == ResponseCode.Success)
                    {
                        var song = response.Songs.FirstOrDefault();

                        if (song != null)
                        {
                            var queryResult = _radio.GetTracksByName(song.ArtistName + " " + song.Title);

                            if (!queryResult.Any())
                            {
                                queryResult = _radio.GetTracksByName(song.ArtistName);
                            }

                            _currentTracks =
                                queryResult
                                .Where(s => s.Artist.Equals(song.ArtistName, StringComparison.InvariantCultureIgnoreCase))
                                .Take(1)
                                .ToArray();

                            if (!_currentTracks.Any())
                            {
                                _toastService.Show("Unable to find any tracks matching the query");

                                if (response.Songs.Any())
                                {
                                    return(MoveNext(token));
                                }

                                return(false);
                            }

                            return(true);
                        }
                    }
                    else
                    {
                        _toastService.Show(response.Status.Message);
                    }
                }
            }

            return(false);
        }