Esempio n. 1
0
        private async Task RefreshQueueAsync(int[] itemIdsToFetch = null)
        {
            IMediaChannel mediaChannel = MediaSender.GetChannel <IMediaChannel>();

            int[] itemIds = itemIdsToFetch ?? await mediaChannel?.QueueGetItemIdsMessage();

            if (itemIds != null && itemIds.Count() > 0)
            {
                Queue <int>       itemIdsQueue = new Queue <int>(itemIds);
                IList <QueueItem> currentQueue = Queue.ToList();

                while (itemIdsQueue.Count > 0)
                {
                    foreach (QueueItem item in await mediaChannel.QueueGetItemsMessage(itemIdsQueue.DequeueChunk(20).ToArray()))
                    {
                        if (currentQueue.FirstOrDefault(i => i.ItemId == item.ItemId) != null)
                        {
                            currentQueue[currentQueue.IndexOf(Queue.FirstOrDefault(i => i.ItemId == item.ItemId))] = item;
                        }
                        else
                        if (item.OrderId < currentQueue.Count)
                        {
                            currentQueue.Insert((int)item.OrderId, item);
                        }
                        else
                        {
                            currentQueue.Add(item);
                        }
                    }
                }

                Queue = new ObservableCollection <QueueItem>(currentQueue);
            }
        }