Ejemplo n.º 1
0
        internal DacpRequest GetCueShuffleRequest(DacpQueryElement query, string sort)
        {
            DacpRequest request = GetCueRequest(query, sort);

            request.QueryParameters["dacp.shufflestate"] = "1";
            return(request);
        }
Ejemplo n.º 2
0
        internal DacpRequest GetCueSongRequest(DacpQueryElement query, string sort, int index)
        {
            DacpRequest request = GetCueRequest(query, sort);

            request.QueryParameters["index"] = index.ToString();
            return(request);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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); }
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
 public void Add(DacpQueryElement element)
 {
     _elements.Add(element);
 }
Ejemplo n.º 12
0
        internal Task <List <T> > GetGroupsAsync <T>(DacpQueryElement query, Func <DacpNodeDictionary, T> itemGenerator)
        {
            DacpRequest request = GetGroupsRequest(query);

            return(Client.GetListAsync(request, itemGenerator));
        }