internal DacpRequest GetCueShuffleRequest(DacpQueryElement query, string sort) { DacpRequest request = GetCueRequest(query, sort); request.QueryParameters["dacp.shufflestate"] = "1"; return(request); }
internal DacpRequest GetCueSongRequest(DacpQueryElement query, string sort, int index) { DacpRequest request = GetCueRequest(query, sort); request.QueryParameters["index"] = index.ToString(); return(request); }
internal DacpRequest GetPlayQueueEditRequest(string command, DacpQueryElement query, PlayQueueMode mode, string sort = null) { DacpRequest request = new DacpRequest("/ctrl-int/1/playqueue-edit"); request.QueryParameters["command"] = command; if (query != null) { request.QueryParameters["query"] = query.ToString(); } request.QueryParameters["mode"] = ((int)mode).ToString(); if (sort != null) { request.QueryParameters["sort"] = sort; } if (this != Client.MainDatabase) { request.QueryParameters["srcdatabase"] = "0x" + PersistentID.ToString("x16"); } // TODO: Handle this separately if (mode == PlayQueueMode.Replace) { request.QueryParameters["clear-previous"] = "1"; } return(request); }
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 <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 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); }
private DacpRequest GetCueRequest(DacpQueryElement query, string sort) { DacpRequest request = new DacpRequest("/ctrl-int/1/cue"); request.QueryParameters["command"] = "play"; if (query != null) { request.QueryParameters["query"] = query.ToString(); } request.QueryParameters["sort"] = sort; request.QueryParameters["srcdatabase"] = "0x" + PersistentID.ToString("x16"); request.QueryParameters["clear-first"] = "1"; return(request); }
internal DacpRequest GetItemsRequest(DacpQueryElement query, string sort = "album", bool requestSortHeaders = false) { // Apple's Remote uses the Base Playlist ID here rather than the actual container ID. DacpRequest request = new DacpRequest("/databases/{0}/containers/{1}/items", Database.ID, Database.BasePlaylist.ID); request.QueryParameters["meta"] = ItemsMeta; request.QueryParameters["type"] = "music"; request.QueryParameters["sort"] = sort; if (requestSortHeaders) { request.QueryParameters["include-sort-headers"] = "1"; } if (query != null) { request.QueryParameters["query"] = query.ToString(); } return(request); }
internal DacpRequest GetGroupsRequest(DacpQueryElement query, bool includeSortHeaders = false, string groupType = "albums") { DacpRequest request = new DacpRequest("/databases/{0}/groups", Database.ID); request.QueryParameters["meta"] = GroupsMeta; request.QueryParameters["type"] = "music"; request.QueryParameters["group-type"] = groupType; if (includeSortHeaders) { request.QueryParameters["include-sort-headers"] = "1"; } request.QueryParameters["sort"] = "album"; if (query != null) { request.QueryParameters["query"] = query.ToString(); } return(request); }
public void Add(DacpQueryElement element) { _elements.Add(element); }
internal Task <List <T> > GetGroupsAsync <T>(DacpQueryElement query, Func <DacpNodeDictionary, T> itemGenerator) { DacpRequest request = GetGroupsRequest(query); return(Client.GetListAsync(request, itemGenerator)); }