Exemplo n.º 1
0
 public MediaListFilterDialogFragment(BaseAniDroidActivity context, IMediaListView mediaListView, MediaType type, IList <string> genres, IList <MediaTag> tags)
 {
     _context              = context;
     _mediaListView        = mediaListView;
     _mediaListFilterModel = mediaListView.GetMediaListFilter();
     _type   = type;
     _genres = genres;
     _tags   = tags;
 }
Exemplo n.º 2
0
        public void SetFilter(MediaListFilterModel filterModel)
        {
            if (_unfilteredItems?.Any() != true)
            {
                return;
            }

            if (filterModel?.IsFilteringActive != true)
            {
                Items = _unfilteredItems;
            }
            else
            {
                var items = _unfilteredItems.AsEnumerable();

                if (!string.IsNullOrWhiteSpace(filterModel.Title))
                {
                    var loweredTitle = filterModel.Title.ToLowerInvariant();

                    items = items.Where(x =>
                                        x.Model.Media?.Title?.English?.ToLowerInvariant().Contains(loweredTitle) == true ||
                                        x.Model.Media?.Title?.Romaji?.ToLowerInvariant().Contains(loweredTitle) == true ||
                                        x.Model.Media?.Title?.Native?.ToLowerInvariant().Contains(loweredTitle) == true);
                }
                if (filterModel.Format != null)
                {
                    items = items.Where(x => x.Model.Media?.Format == filterModel.Format);
                }
                if (filterModel.Status != null)
                {
                    items = items.Where(x => x.Model.Media?.Status == filterModel.Status);
                }
                if (filterModel.Season != null)
                {
                    items = items.Where(x => x.Model.Media?.Season == filterModel.Season);
                }
                if (filterModel.Year != null)
                {
                    items = items.Where(x => x.Model.Media?.SeasonYear == filterModel.Year || x.Model?.Media?.StartDate?.Year == filterModel.Year);
                }
                if (filterModel.Source != null)
                {
                    items = items.Where(x => x.Model.Media?.Source == filterModel.Source);
                }
                if (filterModel.LicensedBy?.Any() == true)
                {
                    items = items.Where(x => x.Model.Media?.ExternalLinks?.Select(y => y.Site).ContainsAny(filterModel.LicensedBy) == true);
                }
                if (filterModel.IncludedGenres?.Any() == true)
                {
                    items = items.Where(x => x.Model.Media?.Genres.ContainsAny(filterModel.IncludedGenres) == true);
                }
                if (filterModel.IncludedTags?.Any() == true)
                {
                    items = items.Where(x => x.Model.Media?.Tags?.Select(x => x.Name).ContainsAny(filterModel.IncludedTags) == true);
                }

                Items = items.ToList();
            }

            NotifyDataSetChanged();
        }