Example #1
0
        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)));
        }
Example #2
0
        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);
        }
Example #3
0
        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)));
        }
Example #4
0
        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);
        }
Example #5
0
        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)));
        }
Example #6
0
        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);
        }
Example #7
0
        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);
        }
Example #8
0
        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);
        }
Example #10
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);
        }
Example #11
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);
        }
Example #13
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); }
        }
        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));
        }
Example #15
0
        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);
        }
Example #16
0
        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);
        }
Example #17
0
        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);
        }
Example #18
0
        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);
        }
Example #19
0
        public Task <List <iTunesUCourse> > GetUnplayedCoursesAsync()
        {
            var query = DacpQueryCollection.And(DacpQueryPredicate.Is("daap.songuserplaycount", 0), GroupsQuery);

            return(GetGroupsAsync(query, n => new iTunesUCourse(this, n)));
        }
Example #20
0
        public Task <List <Podcast> > GetUnplayedShowsAsync()
        {
            var query = DacpQueryCollection.And(DacpQueryPredicate.Is("daap.songuserplaycount", 0), GroupsQuery);

            return(GetGroupsAsync(query, n => new Podcast(this, n)));
        }