Exemplo n.º 1
0
        /// <summary>
        /// パラメータの分解された値を処理する
        /// </summary>
        /// <param name="Param"></param>
        /// <param name="IsFlag"></param>
        protected void ParseParam(string Param, bool IsFlag)
        {
            if (NextCommand == NextCommandType.None || IsFlag)
            {
                NextCommand = NextCommandType.None;
                if (Param[0] == 'P' || Param[0] == 'p')
                {
                    NextCommand = NextCommandType.SetPath;
                }
                else if (Param[0] == 'F' || Param[0] == 'F')
                {
                    NextCommand = NextCommandType.SetFilter;
                }
                else if (Param[0] == 'H' || Param[1] == 'h')
                {
                    RequestedHelp = true;
                }
            }
            else
            {
                switch (NextCommand)
                {
                case NextCommandType.SetPath:
                    Path = Param;
                    break;

                case NextCommandType.SetFilter:
                    Filter = Filter;
                    break;
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Switch to next song.
        /// </summary>
        /// <param name="type">the type of next operation.</param>
        /// <returns></returns>
        public async Task Next(NextCommandType type)
        {
            ThrowExceptionIfCurrentChannelIsNull();
            ReportType reportType;

            if (CurrentSong == null)
            {
                reportType = ReportType.PlayListEmpty;
            }
            else
            {
                switch (type)
                {
                case NextCommandType.CurrentSongEnded:
                    reportType = ReportType.CurrentSongEnded;
                    break;

                case NextCommandType.SkipCurrentSong:
                    reportType = ReportType.SkipCurrentSong;
                    break;

                case NextCommandType.BanCurrentSong:
                    reportType = ReportType.BanCurrentSong;
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(type), type, null);
                }
            }

            await Report(reportType, CurrentChannel.Id, CurrentSong?.Sid, null /* should not pass the start song code here */);
        }
Exemplo n.º 3
0
        public async void TestNext(bool loggedOn, NextCommandType type)
        {
            var player = GetPlayer(loggedOn);
            await player.ChangeChannel(new Channel(0));

            for (var i = 0; i < 10; ++i)
            {
                var originalSong = player.CurrentSong;
                await player.Next(type);

                Validator.ValidateSong(player.CurrentSong);
                Assert.AreNotEqual(originalSong, player.CurrentSong);
            }
        }
Exemplo n.º 4
0
        public async void TestNoAvailableSongs_Next(NextCommandType type)
        {
            var emptyPlayList = _defaultPlayList.DeepClone();

            emptyPlayList["song"] = new JArray();
            var serverConnectionMock = new Mock <IServerConnection>();

            serverConnectionMock.Setup(s => s.Get(It.Is <Uri>(u => u.AbsolutePath.EndsWith("playlist") && u.GetQueries().Contains(new KeyValuePair <string, string>("type", "n"))),
                                                  It.IsAny <Action <HttpWebRequest> >())).ReturnsAsync(Resource.PlayList).Verifiable();
            serverConnectionMock.Setup(s => s.Get(It.Is <Uri>(u => u.AbsolutePath.EndsWith("playlist") && u.GetQueries().Contains(new KeyValuePair <string, string>("type", GetReportTypeStringByNextCommandType(type)))),
                                                  It.IsAny <Action <HttpWebRequest> >())).ReturnsAsync(emptyPlayList.ToString()).Verifiable();

            var player = new Player(new Session(serverConnectionMock.Object));
            await player.ChangeChannel(new Channel(0));

            await AssertEx.ThrowsAsync <NoAvailableSongsException>(async() => await player.Next(type));

            serverConnectionMock.Verify();
        }
Exemplo n.º 5
0
        public async void TestNext(NextCommandType type)
        {
            var    playList   = _defaultPlayList.DeepClone();
            string reportType = GetReportTypeStringByNextCommandType(type);

            var serverConnectionMock = new Mock <IServerConnection>();

            serverConnectionMock.Setup(s => s.Get(It.Is <Uri>(u => u.AbsolutePath.EndsWith("playlist") &&
                                                              (u.GetQueries().Contains(new KeyValuePair <string, string>("type", "n")) ||
                                                               u.GetQueries().Contains(new KeyValuePair <string, string>("type", reportType))) &&
                                                              !u.GetQueries().ContainsKey("start")),
                                                  It.IsAny <Action <HttpWebRequest> >())).Returns(() => Task.FromResult(playList.ToString())).Callback(
                () =>
            {
                if (type == NextCommandType.CurrentSongEnded)
                {
                    playList["song"] = new JArray();
                }
                else
                {
                    var first = playList["song"][0];
                    first.Remove();
                    playList["song"].Last.AddAfterSelf(first);
                }
            }).Verifiable();
            var session = new Session(serverConnectionMock.Object);
            var player  = new Player(session);
            await player.ChangeChannel(new Channel(0));

            var originalSong = player.CurrentSong;

            for (var i = 0; i < 5; ++i)
            {
                await player.Next(type);

                var newSong = player.CurrentSong;
                Assert.AreNotEqual(newSong, originalSong);
                originalSong = newSong;
            }
            serverConnectionMock.Verify();
        }
        public async void TestNext(NextCommandType type)
        {
            var playList = _defaultPlayList.DeepClone();
            string reportType = GetReportTypeStringByNextCommandType(type);

            var serverConnectionMock = new Mock<IServerConnection>();
            serverConnectionMock.Setup(s => s.Get(It.Is<Uri>(u => u.AbsolutePath.EndsWith("playlist")
                                                                  && (u.GetQueries().Contains(new KeyValuePair<string, string>("type", "n"))
                                                                      || u.GetQueries().Contains(new KeyValuePair<string, string>("type", reportType)))
                                                                  && !u.GetQueries().ContainsKey("start")),
                It.IsAny<Action<HttpWebRequest>>())).Returns(() => Task.FromResult(playList.ToString())).Callback(
                    () =>
                    {
                        if (type == NextCommandType.CurrentSongEnded)
                        {
                            playList["song"] = new JArray();
                        }
                        else
                        {
                            var first = playList["song"][0];
                            first.Remove();
                            playList["song"].Last.AddAfterSelf(first);
                        }
                    }).Verifiable();
            var session = new Session(serverConnectionMock.Object);
            var player = new Player(session);
            await player.ChangeChannel(new Channel(0));

            var originalSong = player.CurrentSong;
            for (var i = 0; i < 5; ++i)
            {
                await player.Next(type);
                var newSong = player.CurrentSong;
                Assert.AreNotEqual(newSong, originalSong);
                originalSong = newSong;
            }
            serverConnectionMock.Verify();
        }
Exemplo n.º 7
0
        private static string GetReportTypeStringByNextCommandType(NextCommandType type)
        {
            string reportType;

            switch (type)
            {
            case NextCommandType.SkipCurrentSong:
                reportType = "s";
                break;

            case NextCommandType.BanCurrentSong:
                reportType = "b";
                break;

            case NextCommandType.CurrentSongEnded:
                reportType = "e";
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(type));
            }

            return(reportType);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Switch to next song.
        /// </summary>
        /// <param name="type">the type of next operation.</param>
        /// <returns></returns>
        public async Task Next(NextCommandType type)
        {
            ThrowExceptionIfCurrentChannelIsNull();
            ReportType reportType;
            if (CurrentSong == null)
            {
                reportType = ReportType.PlayListEmpty;
            }
            else
            {
                switch (type)
                {
                    case NextCommandType.CurrentSongEnded:
                        reportType = ReportType.CurrentSongEnded;
                        break;
                    case NextCommandType.SkipCurrentSong:
                        reportType = ReportType.SkipCurrentSong;
                        break;
                    case NextCommandType.BanCurrentSong:
                        reportType = ReportType.BanCurrentSong;
                        break;
                    default:
                        throw new ArgumentOutOfRangeException(nameof(type), type, null);
                }
            }

            await Report(reportType, CurrentChannel.Id, CurrentSong?.Sid, null /* should not pass the start song code here */);
        }
 public async void TestNext(bool loggedOn, NextCommandType type)
 {
     var player = GetPlayer(loggedOn);
     await player.ChangeChannel(new Channel(0));
     for (var i = 0; i < 10; ++i)
     {
         var originalSong = player.CurrentSong;
         await player.Next(type);
         Validator.ValidateSong(player.CurrentSong);
         Assert.AreNotEqual(originalSong, player.CurrentSong);
     }
 }
Exemplo n.º 10
0
        public async void TestNoAvailableSongs_Next(NextCommandType type)
        {
            var emptyPlayList = _defaultPlayList.DeepClone();
            emptyPlayList["song"] = new JArray();
            var serverConnectionMock = new Mock<IServerConnection>();
            serverConnectionMock.Setup(s => s.Get(It.Is<Uri>(u => u.AbsolutePath.EndsWith("playlist") && u.GetQueries().Contains(new KeyValuePair<string, string>("type", "n"))),
                It.IsAny<Action<HttpWebRequest>>())).ReturnsAsync(Resource.PlayList).Verifiable();
            serverConnectionMock.Setup(s => s.Get(It.Is<Uri>(u => u.AbsolutePath.EndsWith("playlist") && u.GetQueries().Contains(new KeyValuePair<string, string>("type", GetReportTypeStringByNextCommandType(type)))),
                It.IsAny<Action<HttpWebRequest>>())).ReturnsAsync(emptyPlayList.ToString()).Verifiable();

            var player = new Player(new Session(serverConnectionMock.Object));
            await player.ChangeChannel(new Channel(0));
            await AssertEx.ThrowsAsync<NoAvailableSongsException>(async () => await player.Next(type));
            serverConnectionMock.Verify();
        }
Exemplo n.º 11
0
        private static string GetReportTypeStringByNextCommandType(NextCommandType type)
        {
            string reportType;
            switch (type)
            {
                case NextCommandType.SkipCurrentSong:
                    reportType = "s";
                    break;
                case NextCommandType.BanCurrentSong:
                    reportType = "b";
                    break;
                case NextCommandType.CurrentSongEnded:
                    reportType = "e";
                    break;
                default:
                    throw new ArgumentOutOfRangeException(nameof(type));
            }

            return reportType;
        }