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); }
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); }
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); }
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); }