public Task <IDacpList> GetGenreArtistsAsync(string genreName) { var query = DacpQueryCollection.And(DacpQueryPredicate.Is("daap.songgenre", genreName), DacpQueryPredicate.IsNotEmpty("daap.songartist"), MediaKindQuery); DacpRequest request = GetGroupsRequest(query, true, "artists"); return(Client.GetAlphaGroupedListAsync(request, n => new Artist(this, n))); }
public async Task <bool> SendPlayItemCommandAsync(DacpItem item, PlayQueueMode mode = PlayQueueMode.Replace) { DacpRequest request; if (Client.ServerSupportsPlayQueue) { request = Database.GetPlayQueueEditRequest("add", DacpQueryPredicate.Is("dmap.itemid", item.ID), mode, "name"); request.QueryParameters["queuefilter"] = string.Format("genre:{0}", Uri.EscapeDataString(DacpUtility.EscapeSingleQuotes(Name))); } else { var items = await GetItemsAsync(); int index = items.FindIndex(i => i.ID == item.ID); if (index < 0) { return(false); } request = Database.GetCueSongRequest(DacpQueryCollection.And(GenreQuery, Container.MediaKindQuery), "name", index); } try { await Client.SendRequestAsync(request).ConfigureAwait(false); } catch { return(false); } return(true); }
public Task <IDacpList> GetUnwatchedMoviesAsync() { var query = DacpQueryCollection.And(DacpQueryPredicate.Is("daap.songuserplaycount", 0), MediaKindQuery); DacpRequest request = GetItemsRequest(query, "name", true); return(Client.GetAlphaGroupedListAsync(request, n => new Movie(this, n))); }
public async Task <List <Artist> > GetArtistsAsync() { if (_artists != null && _artistCacheRevision == Client.CurrentLibraryUpdateNumber) { return(_artists); } var query = DacpQueryCollection.And(DacpQueryPredicate.IsNotEmpty("daap.songartist"), MediaKindQuery); DacpRequest request = GetGroupsRequest(query, true, "artists"); try { var response = await Client.SendRequestAsync(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 = Client.CurrentLibraryUpdateNumber; return(_artists); }
public Task <IDacpList> GetGenreSongsAsync(string genreName) { var query = DacpQueryCollection.And(DacpQueryPredicate.Is("daap.songgenre", genreName), MediaKindQuery); DacpRequest request = GetItemsRequest(query, "name", true); return(Client.GetAlphaGroupedListAsync(request, n => new Song(this, n))); }
public async Task <bool> SendPlaySongCommandAsync(Song song, PlayQueueMode mode = PlayQueueMode.Replace) { DacpRequest request; if (Client.ServerSupportsPlayQueue) { request = Database.GetPlayQueueEditRequest("add", DacpQueryPredicate.Is("dmap.itemid", song.ID), mode, "album"); request.QueryParameters["queuefilter"] = string.Format("artist:{0}", ArtistID); } else { var songs = await GetSongsAsync().ConfigureAwait(false); int index = songs.FindIndex(s => s.ID == song.ID); if (index < 0) { return(false); } request = Database.GetCueSongRequest(ItemQuery, "album", index); } try { await Client.SendRequestAsync(request).ConfigureAwait(false); } catch { return(false); } return(true); }
public async Task <bool> SendPlayQueueCommandAsync(PlayQueueMode mode = PlayQueueMode.Replace) { var query = DacpQueryPredicate.Is("dmap.itemid", ID); DacpRequest request = Database.GetPlayQueueEditRequest("add", query, mode); try { await Client.SendRequestAsync(request).ConfigureAwait(false); } catch { return(false); } return(true); }
private DacpRequest GetPlaySpecRequest() { DacpRequest request = new DacpRequest("/ctrl-int/1/playspec"); request.QueryParameters["database-spec"] = DacpQueryPredicate.Is("dmap.persistentid", "0x" + Database.PersistentID.ToString("x16")).ToString(); request.QueryParameters["container-spec"] = DacpQueryPredicate.Is("dmap.persistentid", "0x" + PersistentID.ToString("x16")).ToString(); return(request); }
public async Task <bool> SendPlayCommandAsync() { DacpRequest request = new DacpRequest("/ctrl-int/1/playspec"); request.QueryParameters["database-spec"] = DacpQueryPredicate.Is("dmap.itemid", "0x" + Database.ID.ToString("x")).ToString(); request.QueryParameters["container-spec"] = DacpQueryPredicate.Is("dmap.itemid", "0x" + ID.ToString("x")).ToString(); try { await Client.SendRequestAsync(request).ConfigureAwait(false); } catch { return(false); } return(true); }
internal DacpRequest GetGenresRequest(bool requestSortHeaders = false) { DacpRequest request = new DacpRequest("/databases/{0}/browse/genres", Database.ID); DacpQueryElement query = DacpQueryCollection.And(DacpQueryPredicate.IsNotEmpty("daap.songgenre"), MediaKindQuery); request.QueryParameters["filter"] = query.ToString(); if (requestSortHeaders) { request.QueryParameters["include-sort-headers"] = "1"; } return(request); }
public async Task <List <Song> > SearchSongsAsync(string searchString, CancellationToken cancellationToken) { DacpQueryElement query = DacpQueryCollection.And(DacpQueryPredicate.Is("dmap.itemname", searchString), MediaKindQuery); DacpRequest request = GetItemsRequest(query, "name", false); request.CancellationToken = cancellationToken; try { var response = await Client.SendRequestAsync(request).ConfigureAwait(false); return(DacpUtility.GetItemsFromNodes(response.Nodes, n => new Song(this, n)).ToList()); } catch { return(null); } }
public async Task <bool> SendPlaySongCommandAsync(Song song) { try { int index = IndexOf(song); DacpQueryElement query = DacpQueryCollection.And(DacpQueryPredicate.Is("dmap.itemname", _searchString), Database.MusicContainer.MediaKindQuery); DacpRequest request = Database.GetCueSongRequest(query, "name", index); await Database.Client.SendRequestAsync(request).ConfigureAwait(false); } catch { return(false); } return(true); }
public async Task <List <Audiobook> > SearchAudiobooksAsync(string searchString, CancellationToken cancellationToken) { DacpQueryElement query = DacpQueryCollection.And(DacpQueryPredicate.Is("daap.songalbum", searchString), MediaKindQuery); DacpRequest request = GetGroupsRequest(query, false, "albums"); request.CancellationToken = cancellationToken; try { var response = await Client.SendRequestAsync(request).ConfigureAwait(false); return(DacpUtility.GetItemsFromNodes(response.Nodes, n => new Audiobook(this, n)).ToList()); } catch { return(null); } }
public Task <bool> SendiTunesRadioNeverPlayThisSongCommandAsync() { if (!IsPlayingiTunesRadio) { return(Task.FromResult(false)); } DacpRequest request = new DacpRequest("/ctrl-int/1/setproperty"); request.QueryParameters["com.apple.itunes.liked-state"] = "3"; request.QueryParameters["database-spec"] = DacpQueryPredicate.Is("dmap.itemid", "0x" + CurrentDatabaseID.ToString("x")).ToString(); request.QueryParameters["item-spec"] = DacpQueryPredicate.Is("dmap.itemid", "0x" + CurrentItemID.ToString("x")).ToString(); return(SendCommandAsync(request)); }
public async Task <bool> ShuffleAllSongsAsync() { DacpRequest request; if (Client.ServerSupportsPlayQueue) { request = Database.GetPlayQueueEditRequest("add", DacpQueryPredicate.Is("dmap.itemid", ID), PlayQueueMode.Shuffle, "name"); request.QueryParameters["query-modifier"] = "containers"; } else { request = Database.GetCueShuffleRequest(MediaKindQuery, "artist"); } try { await Client.SendRequestAsync(request).ConfigureAwait(false); } catch { return(false); } return(true); }
public async Task <bool> SendPlayItemCommandAsync(DacpItem item, PlayQueueMode mode = PlayQueueMode.Replace) { DacpRequest request; if (Client.ServerSupportsPlayQueue) { var query = DacpQueryPredicate.Is("dmap.containeritemid", item.ContainerItemID); request = Database.GetPlayQueueEditRequest("add", query, mode, "physical"); request.QueryParameters["queuefilter"] = string.Format("playlist:{0}", ID); } else { request = GetPlaySpecRequest(); request.QueryParameters["container-item-spec"] = DacpQueryPredicate.Is("dmap.containeritemid", "0x" + item.ContainerItemID.ToString("x8")).ToString(); } try { await Client.SendRequestAsync(request).ConfigureAwait(false); } catch { return(false); } return(true); }
public async Task <bool> SendPlayCommandAsync(PlayQueueMode mode = PlayQueueMode.Replace) { if (!Client.ServerSupportsPlayQueue) { // Send a play request for the first item in this playlist var items = await GetItemsAsync(); if (items == null || items.Count == 0) { return(false); } return(await SendPlayItemCommandAsync(items[0], mode).ConfigureAwait(false)); } var query = DacpQueryPredicate.Is("dmap.itemid", ID); DacpRequest request = Database.GetPlayQueueEditRequest("add", query, mode); request.QueryParameters["query-modifier"] = "containers"; try { await Client.SendRequestAsync(request).ConfigureAwait(false); } catch { return(false); } return(true); }
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 Client.SendRequestAsync(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); }
public Task <List <iTunesUCourse> > GetUnplayedCoursesAsync() { var query = DacpQueryCollection.And(DacpQueryPredicate.Is("daap.songuserplaycount", 0), GroupsQuery); return(GetGroupsAsync(query, n => new iTunesUCourse(this, n))); }
public Task <List <Podcast> > GetUnplayedShowsAsync() { var query = DacpQueryCollection.And(DacpQueryPredicate.Is("daap.songuserplaycount", 0), GroupsQuery); return(GetGroupsAsync(query, n => new Podcast(this, n))); }