Пример #1
0
        public async Task <List <Artist> > GetArtistsAsync()
        {
            if (_artists != null && _artistCacheRevision == Server.CurrentLibraryUpdateNumber)
            {
                return(_artists);
            }

            var         query   = DACPQueryCollection.And(DACPQueryPredicate.IsNotEmpty("daap.songartist"), MediaKindQuery);
            DACPRequest request = GetGroupsRequest(query, true, "artists");

            try
            {
                var response = await Server.SubmitRequestAsync(request).ConfigureAwait(false);

                _groupedArtists = DACPUtility.GetAlphaGroupedDACPList(response.Nodes, n => new Artist(this, n), out _artists);
                _artistsByID    = _artists.ToDictionary(a => a.ID);
            }
            catch
            {
                _artists        = new List <Artist>();
                _artistsByID    = new Dictionary <int, Artist>();
                _groupedArtists = new DACPList <Artist>(false);
            }

            _artistCacheRevision = Server.CurrentLibraryUpdateNumber;

            return(_artists);
        }
Пример #2
0
        public async Task <IDACPList> GetGroupedComposersAsync()
        {
            if (_groupedComposers != null)
            {
                return(_groupedComposers);
            }

            DACPRequest request = GetComposersRequest(true);

            try
            {
                var response = await Server.SubmitRequestAsync(request).ConfigureAwait(false);

                // iTunes returns an "abcp" node with "mlit" list items that only contain the composer name
                if (response.Nodes.Any(n => n.Key == "abcp"))
                {
                    _groupedComposers = DACPUtility.GetAlphaGroupedDACPList(response.Nodes, d => new DACPComposer(this, (byte[])d), "abcp");
                }
                // Apple TV returns an "mlcl" node with "mlit" items that contain an ID, persistent ID, and name
                else
                {
                    _groupedComposers = DACPUtility.GetAlphaGroupedDACPList(response.Nodes, n => new DACPComposer(this, (DACPNodeDictionary)n));
                }
            }
            catch
            {
                _groupedComposers = new DACPList <DACPComposer>(false);
            }

            return(_groupedComposers);
        }
Пример #3
0
        public async Task <List <Album> > GetAlbumsAsync()
        {
            if (_albums != null && _albumCacheRevision == Server.CurrentLibraryUpdateNumber)
            {
                return(_albums);
            }

            DACPRequest request = GetGroupsRequest(GroupsQuery, true);

            try
            {
                var response = await Server.SubmitRequestAsync(request).ConfigureAwait(false);

                _groupedAlbums = DACPUtility.GetAlphaGroupedDACPList(response.Nodes, n => new Album(this, n), out _albums);
                _albumsByID    = _albums.ToDictionary(a => a.ID);
            }
            catch
            {
                _albums        = new List <Album>();
                _albumsByID    = new Dictionary <int, Album>();
                _groupedAlbums = new DACPList <Album>(false);
            }

            _albumCacheRevision = Server.CurrentLibraryUpdateNumber;

            return(_albums);
        }
Пример #4
0
        protected void ProcessEpisodes(IEnumerable <TVShowEpisode> episodes)
        {
            Episodes = episodes.OrderBy(e => e.EpisodeNumber).ToList();

            GroupedEpisodes          = GetGroupedEpisodes(Episodes);
            GroupedUnwatchedEpisodes = GetGroupedEpisodes(Episodes.Where(e => e.PlayedState != ItemPlayedState.HasBeenPlayed));
        }
Пример #5
0
        public async Task <IDACPList> GetMoviesAsync()
        {
            if (_movies != null && _movieCacheRevision == Server.CurrentLibraryUpdateNumber)
            {
                return(_movies);
            }

            DACPRequest request = GetItemsRequest(MediaKindQuery, "name", true);

            _movies = await Server.GetAlphaGroupedListAsync(request, n => new Movie(this, n));

            _movieCacheRevision = Server.CurrentLibraryUpdateNumber;

            return(_movies);
        }
Пример #6
0
        public async Task <IDACPList> GetGroupedItemsAsync()
        {
            if (_groupedItems != null)
            {
                return(_groupedItems);
            }

            var         query   = DACPQueryCollection.And(DACPQueryPredicate.Is("daap.songcomposer", Name), Container.MediaKindQuery);
            DACPRequest request = Container.GetItemsRequest(query, "album", false);

            try
            {
                var response = await Server.SubmitRequestAsync(request).ConfigureAwait(false);

                var items = DACPUtility.GetItemsFromNodes(response.Nodes, n => new DACPItem(Container, n)).ToList();

                ItemGroup <DACPItem>             currentGroup = null;
                DACPList <ItemGroup <DACPItem> > result       = new DACPList <ItemGroup <DACPItem> >(true);

                foreach (var item in items)
                {
                    if (currentGroup == null || currentGroup.Key != item.AlbumName)
                    {
                        currentGroup = new ItemGroup <DACPItem>(item.AlbumName);
                        result.Add(currentGroup);
                    }
                    currentGroup.Add(item);
                }

                _items        = items;
                _groupedItems = result;
            }
            catch
            {
                _items        = new List <DACPItem>();
                _groupedItems = new DACPList <DACPItem>(false);
            }

            return(_groupedItems);
        }
Пример #7
0
        public async Task <IDACPList> GetGroupedItemsAsync()
        {
            if (_groupedItems != null)
            {
                return(_groupedItems);
            }

            var         query   = DACPQueryCollection.And(DACPQueryPredicate.Is("daap.songgenre", Name), Container.MediaKindQuery);
            DACPRequest request = Container.GetItemsRequest(query, "name", true);

            try
            {
                var response = await Server.SubmitRequestAsync(request).ConfigureAwait(false);

                _groupedItems = DACPUtility.GetAlphaGroupedDACPList(response.Nodes, n => new DACPItem(Container, n), out _items);
            }
            catch
            {
                _items        = new List <DACPItem>();
                _groupedItems = new DACPList <DACPItem>(false);
            }

            return(_groupedItems);
        }