public async Task <bool> RequestStationsAsync() { DacpRequest request = new DacpRequest("/databases/{0}/containers", ID); request.QueryParameters["meta"] = "dmap.itemname,dmap.itemid,com.apple.itunes.cloud-id,dmap.downloadstatus,dmap.persistentid,daap.baseplaylist,com.apple.itunes.special-playlist,com.apple.itunes.smart-playlist,com.apple.itunes.saved-genius,dmap.parentcontainerid,dmap.editcommandssupported,com.apple.itunes.jukebox-current,daap.songcontentdescription,dmap.haschildcontainers"; try { var response = await Client.SendRequestAsync(request).ConfigureAwait(false); var containers = DacpUtility.GetItemsFromNodes(response.Nodes, n => DacpContainer.GetContainer(this, n)); List <iTunesRadioStation> newStations = new List <iTunesRadioStation>(); List <iTunesRadioStation> newFeaturedStations = new List <iTunesRadioStation>(); // There is a property (aeRf) that indicates whether a station is a "featured" station, but in some cases // featured stations may not have this property set to "true". // For now, checking the index of the last "featured" station as a workaround. int lastFeaturedStationIndex = 0; var stations = containers.Where(c => c.Type == ContainerType.iTunesRadio).Select(c => (iTunesRadioStation)c).ToArray(); for (int i = 0; i < stations.Length; i++) { if (stations[i].IsFeaturedStation) { lastFeaturedStationIndex = i; } } for (int i = 0; i < stations.Length; i++) { if (i <= lastFeaturedStationIndex) { newFeaturedStations.Add(stations[i]); } else { newStations.Add(stations[i]); } } Stations = newStations; FeaturedStations = newFeaturedStations; } catch// (Exception e) { Stations = new List <iTunesRadioStation>(); FeaturedStations = new List <iTunesRadioStation>(); //Client.HandleHTTPException(request, e); return(false); } return(true); }
public async Task <bool> RequestContainersAsync() { DacpRequest request = new DacpRequest("/databases/{0}/containers", ID); request.QueryParameters["meta"] = "dmap.itemname,dmap.itemid,com.apple.itunes.cloud-id,dmap.downloadstatus,dmap.persistentid,daap.baseplaylist,com.apple.itunes.special-playlist,com.apple.itunes.smart-playlist,com.apple.itunes.saved-genius,dmap.parentcontainerid,dmap.editcommandssupported,com.apple.itunes.jukebox-current,daap.songcontentdescription,dmap.haschildcontainers"; try { var response = await Client.SendRequestAsync(request).ConfigureAwait(false); var newContainers = DacpUtility.GetItemsFromNodes(response.Nodes, n => DacpContainer.GetContainer(this, n)).ToList(); List <Playlist> newPlaylists = new List <Playlist>(); List <Playlist> newParentPlaylists = new List <Playlist>(); List <GeniusMix> newGeniusMixes = new List <GeniusMix>(); foreach (DacpContainer container in newContainers) { if (container.BasePlaylist) { BasePlaylist = container; continue; } switch (container.Type) { case ContainerType.Playlist: newPlaylists.Add((Playlist)container); if (container.ParentContainerID == 0) { newParentPlaylists.Add((Playlist)container); } break; case ContainerType.Music: MusicContainer = (MusicContainer)container; break; case ContainerType.Movies: MoviesContainer = (MoviesContainer)container; break; case ContainerType.TVShows: TVShowsContainer = (TVShowsContainer)container; break; case ContainerType.Podcasts: PodcastsContainer = (PodcastsContainer)container; break; case ContainerType.iTunesU: iTunesUContainer = (iTunesUContainer)container; break; case ContainerType.Books: BooksContainer = (BooksContainer)container; break; case ContainerType.Purchased: break; case ContainerType.Rentals: break; case ContainerType.GeniusMixes: break; case ContainerType.GeniusMix: newGeniusMixes.Add((GeniusMix)container); break; default: break; } } Containers = newContainers; Playlists = newPlaylists; ParentPlaylists = newParentPlaylists; GeniusMixes = newGeniusMixes; } catch// (Exception e) { //Client.HandleHTTPException(request, e); return(false); } return(true); }