示例#1
0
 public async Task <IEnumerable <Album> > GetAlbumsAsync(AlbumSortOrder sortOrder = AlbumSortOrder.Default)
 {
     return(await LoadAlbumsAsync(
                selection : null,
                selectionArgs : null,
                sortOrder : sortOrder
                ));
 }
        public async Task <IEnumerable <Album> > GetAlbumsAsync(AlbumSortOrder sortOrder = AlbumSortOrder.Default)
        {
            return(await Task.Run(() =>
            {
                var mediaQuery = PrepareMediaQuery();

                return mediaQuery.ToAlbums(sortOrder);
            }));
        }
 internal static IEnumerable <Album> ToAlbums(this MPMediaQuery mediaQuery, AlbumSortOrder sortOrder)
 {
     foreach (var mediaItem in mediaQuery.Items)
     {
         if (mediaItem != null)
         {
             yield return(mediaItem.ToAlbum());
         }
     }
 }
示例#4
0
 /// <summary>
 /// Changes Album ListView sort order.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 public void AlbumsSortByDate(object sender, ref string lastAlbumsHeaderClicked, ref ListSortDirection lastAlbumsDirection)
 {
     if (_lastAlbumSortOrder == AlbumSortOrder.ByDate)
     {
         SortListView(sender, ref lastAlbumsHeaderClicked, ref lastAlbumsDirection, "Title");
         _lastAlbumSortOrder = AlbumSortOrder.ByTitleAsc;
         Albums = Albums.OrderBy(i => i.Title).ToList();
     }
     else if (_lastAlbumSortOrder == AlbumSortOrder.ByTitleAsc)
     {
         SortListView(sender, ref lastAlbumsHeaderClicked, ref lastAlbumsDirection, "Title");
         _lastAlbumSortOrder = AlbumSortOrder.ByTitleDesc;
         Albums = Albums.OrderByDescending(i => i.Title).ToList();
     }
     else
     {
         SortListView(sender, ref lastAlbumsHeaderClicked, ref lastAlbumsDirection, "Date");
         _lastAlbumSortOrder = AlbumSortOrder.ByDate;
         Albums = Albums.OrderBy(i => i.Date).ToList();
     }
     OnPropertyChanged("LastAlbumSortOrderText");
 }
        public async Task <IEnumerable <Album> > SearchAlbumsAsync(string searchTerm, AlbumSortOrder sortOrder = AlbumSortOrder.Default)
        {
            if (string.IsNullOrWhiteSpace(searchTerm))
            {
                throw new ArgumentNullException(nameof(searchTerm));
            }

            return(await Task.Run(() =>
            {
                var mediaQuery = PrepareMediaQuery();
                var value = NSObject.FromObject(searchTerm);
                var searchTermPredicate = MPMediaPropertyPredicate.PredicateWithValue(value, MPMediaItem.TitleProperty, MPMediaPredicateComparison.Contains);
                mediaQuery.AddFilterPredicate(searchTermPredicate);

                return mediaQuery.ToAlbums(sortOrder);
            }));
        }
        public async Task <IEnumerable <Album> > GetAlbumsByIdAsync(IEnumerable <string> albumIds, AlbumSortOrder sortOrder = AlbumSortOrder.Default)
        {
            if (!albumIds.HasValue())
            {
                throw new ArgumentException(nameof(albumIds));
            }
            return(await Task.Run(() =>
            {
                var mediaQuery = PrepareMediaQuery();
                var value = NSArray.FromNSObjects(albumIds.Select(s => NSObject.FromObject(s)).ToArray());
                var arrayPredictor = MPMediaPropertyPredicate.PredicateWithValue(value, MPMediaItem.PersistentIDProperty, MPMediaPredicateComparison.Contains);
                mediaQuery.AddFilterPredicate(arrayPredictor);

                return mediaQuery.ToAlbums(sortOrder);
            }));
        }
        public async Task <IEnumerable <Album> > GetAlbumsByGenreAsync(string genreId, AlbumSortOrder sortOrder = AlbumSortOrder.Default)
        {
            if (string.IsNullOrWhiteSpace(genreId))
            {
                throw new ArgumentNullException(nameof(genreId));
            }

            return(await Task.Run(() =>
            {
                var mediaQuery = PrepareMediaQuery();
                var value = NSObject.FromObject(genreId);
                var genreIdPredicate = MPMediaPropertyPredicate.PredicateWithValue(value, MPMediaItem.GenrePersistentIDProperty);
                mediaQuery.AddFilterPredicate(genreIdPredicate);

                return mediaQuery.ToAlbums(sortOrder);
            }));
        }
示例#8
0
        private async Task <IEnumerable <Album> > LoadAlbumsAsync(string selection, string[] selectionArgs, AlbumSortOrder sortOrder)
        {
            return(await Task.Run(() =>
            {
                var cursor = Android.App.Application.Context.ContentResolver.Query(
                    uri: MediaStore.Audio.Albums.ExternalContentUri,
                    projection: _projections,
                    selection: selection,
                    selectionArgs: selectionArgs,
                    sortOrder: sortOrder.ToStringSortOrder()
                    );

                return cursor.ToAlbums();
            }));
        }
示例#9
0
        public async Task <IEnumerable <Album> > SearchAlbumsAsync(string searchTerm, AlbumSortOrder sortOrder = AlbumSortOrder.Default)
        {
            if (string.IsNullOrWhiteSpace(searchTerm))
            {
                throw new ArgumentNullException(nameof(searchTerm));
            }

            return(await LoadAlbumsAsync(
                       selection : MediaStore.Audio.AlbumColumns.Album + " like ?",
                       selectionArgs : new[] { searchTerm + "%" },
                       sortOrder : sortOrder
                       ));
        }
示例#10
0
        public async Task <IEnumerable <Album> > GetAlbumsByIdAsync(IEnumerable <string> albumIds, AlbumSortOrder sortOrder = AlbumSortOrder.Default)
        {
            if (!albumIds.HasValue())
            {
                throw new ArgumentException(nameof(albumIds));
            }

            var selectionBuilder = new StringBuilder();

            selectionBuilder.Append(MediaStore.Audio.AlbumColumns.AlbumId + " IN (");
            selectionBuilder.Append(string.Join(",", albumIds));
            selectionBuilder.Append(")");

            return(await LoadAlbumsAsync(
                       selection : selectionBuilder.ToString(),
                       selectionArgs : null,
                       sortOrder : sortOrder
                       ));
        }