Exemple #1
0
        static void SongQueueSample(ISongPlayer player, ISongProvider songProvider)
        {
            var queue = new VoteableQueue<Song>();
            queue.ItemAdded += (sender, eventArgs) =>
            {
                Console.WriteLine("Added song " + eventArgs.Item.Item.Name + " to queue");

                if (queue.CurrentQueue.Count() == 1)
                {
                    VoteableQueueItem<Song> head;

                    if (queue.TryPeek(out head))
                    {
                        player.Start(head.Item);
                    }
                }
            };
            player.CurrentSongChanged += (sender, eventArgs) => Console.WriteLine("Current song is " + eventArgs.NewValue.Name);
            player.CurrentSongCompleted += (sender, eventArgs) =>
            {
                VoteableQueueItem<Song> head;

                if (queue.TryDequeue(out head))
                {
                    if (queue.TryPeek(out head))
                    {
                        player.Start(head.Item);
                    }
                }
            };

            string query;

            do
            {
                Console.WriteLine("Enter query >> ");
                query = Console.ReadLine();

                if (!string.IsNullOrEmpty(query))
                {
                    songProvider
                        .GetSongs(query, CancellationToken.None)
                        .ContinueWith(resultTask =>
                        {
                            var song = resultTask.Result.FirstOrDefault();

                            if (song != null)
                            {
                                queue.Enqueue(song);
                            }
                        });
                }
            } while (string.IsNullOrEmpty(query));
        }
        public void Upvote_ItemMovedUpInList()
        {
            var queue = new VoteableQueue<int>();

            var item1 = queue.Enqueue(1);
            var item2 = queue.Enqueue(2);
            var item3 = queue.Enqueue(3);

            queue.Upvote(item3.Id);

            Assert.Equal(new[] { item1, item3, item2 }, queue.CurrentQueue);
        }