示例#1
0
        private async Task OnClearAll()
        {
            if (GroupedFavoriteByWeekList.Count == 0)
            {
                return;
            }

            bool canNavigate = await NavigationManager.CanPopUpNavigateAsync <ChoiceModalViewModel>();

            if (canNavigate)
            {
                var confirmDelegateAction = new Action(async() =>
                {
                    await Task.Run(() =>
                    {
                        var favoriteCollection         = App.liteDB.GetCollection <FavoritedAnime>();
                        var animesToCancelNotification = favoriteCollection.FindAll().ToList();
                        favoriteCollection.DeleteAll();
                    });

                    GroupedFavoriteByWeekList.Clear();
                });

                await NavigationManager.
                NavigatePopUpAsync <ChoiceModalViewModel>(Lang.Lang.ClearFavoriteList, Lang.Lang.ClearCannotBeUndone, confirmDelegateAction);
            }
        }
示例#2
0
        private async Task OnArchiveFavorite()
        {
            if (SelectedItems?.Count == 0)
            {
                return;
            }

            bool canNavigate = await NavigationManager.CanPopUpNavigateAsync <ChoiceModalViewModel>();

            if (canNavigate)
            {
                var action = new Action(async() =>
                {
                    var items = SelectedItems.Cast <FavoritedAnime>().ToList();
                    SelectedItems.Clear();
                    var favoriteCollection = App.liteDB.GetCollection <FavoritedAnime>();

                    foreach (var item in items)
                    {
                        item.IsArchived = !item.IsArchived;
                        item.CanGenerateNotifications = false;
                        favoriteCollection.Update(item.Anime.MalId, item);
                    }

                    var collection      = await ConstructGroupedCollectionAsync();
                    _originalCollection = collection;

                    GroupedFavoriteByWeekList.ReplaceRange(_originalCollection);
                });

                await NavigationManager.NavigatePopUpAsync <ChoiceModalViewModel>(Lang.Lang.Shelving, Lang.Lang.ShelvingMessage, action);
            }
        }
示例#3
0
        private async Task OnApplyFilter()
        {
            var checkedGenres     = FilterData.Genres.Where(p => p.IsChecked).Select(p => p.Genre).ToList();
            var checkedDaysOfWeek = FilterData.DayOfWeekOrder.Where(p => p.IsChecked).ToList();

            MessagingCenter.Send(this, "CloseFilterView");

            await Task.Delay(TimeSpan.FromMilliseconds(500)); // usado para impedir que seja visto um leve engasto na filtragem

            var animeToRemove = new List <FavoritedAnime>();

            // meio encontrado de não ter a originalCollection filtrada, não está bom, mas é a correção por hora
            _originalCollection = await ConstructGroupedCollectionAsync();

            var groupAnimes = new List <GroupedFavoriteAnimeByWeekDay>(_originalCollection);

            //TODO:contar a quantidade de animes cadastrados e ver se todos estão aparecendo apenas uma única vez

            //TODO:olhar aqui em conjunto com o HasAnyDayOfWeek
            for (int i = 0; i < groupAnimes.Count; i++)
            {
                GroupedFavoriteAnimeByWeekDay favoritedAnimeGroup = groupAnimes[i];

                for (int j = 0; j < favoritedAnimeGroup.Count; j++)
                {
                    FavoritedAnime favoritedAnime = favoritedAnimeGroup[j];

                    var hasAllGenresTask     = favoritedAnime.HasAllSpecifiedGenresAsync(checkedGenres.ToArray());
                    var hasAnyDaysOfWeekTask = favoritedAnime.HasAnyDayOfWeekAsync(checkedDaysOfWeek.ToArray());

                    if (!await hasAllGenresTask || !await hasAnyDaysOfWeekTask)
                    {
                        animeToRemove.Add(favoritedAnime);
                    }
                }
            }

            if (animeToRemove.Count > 0)
            {
                foreach (var item in animeToRemove)
                {
                    foreach (var group in groupAnimes)
                    {
                        if (group.Contains(item))
                        {
                            group.Remove(item);
                        }
                    }
                }
            }

            var groupsWithAnimes = groupAnimes.Where(p => p.Count > 0);

            GroupedFavoriteByWeekList.ReplaceRange(groupsWithAnimes);
        }
示例#4
0
        private async Task OnSearch()
        {
            var resultListTask = Task.Run(() =>
            {
                IList <GroupedFavoriteAnimeByWeekDay> result = null;

                result = _originalCollection.Select(animeGroup
                                                    => new GroupedFavoriteAnimeByWeekDay(animeGroup.GroupName,
                                                                                         animeGroup.Where(anime => anime.Anime.Title.ToLowerInvariant().Contains(SearchQuery.ToLowerInvariant()))
                                                                                         .ToList()))
                         .Where(animeGroup => animeGroup.Count > 0)
                         .ToList();

                return(result);
            });

            GroupedFavoriteByWeekList.ReplaceRange(await resultListTask);
        }
示例#5
0
        public async Task LoadAsync(object param)
        {
            if (_isUpdatingAnimes)
            {
                return;
            }

            _settingsPreferences = App.liteDB.GetCollection <SettingsPreferences>().FindById(0);

            FilterData = new FilterData
            {
                Genres         = ANT.UTIL.AnimeExtension.FillGenres(_settingsPreferences.ShowNSFW),
                DayOfWeekOrder = UTIL.AnimeExtension.FillTodayDayOfWeek(),
            };

            _originalCollection = await ConstructGroupedCollectionAsync();

            GroupedFavoriteByWeekList.ReplaceRange(_originalCollection);
        }
示例#6
0
        private async void OnResetFilter()
        {
            var checkedGenres = FilterData.Genres.Where(p => p.IsChecked);
            var checkedDays   = FilterData.DayOfWeekOrder.Where(p => p.IsChecked);

            foreach (var item in checkedGenres)
            {
                item.IsChecked = false;
            }
            foreach (var item in checkedDays)
            {
                item.IsChecked = false;
            }

            _originalCollection = await ConstructGroupedCollectionAsync();

            GroupedFavoriteByWeekList.ReplaceRange(_originalCollection);
            MessagingCenter.Send(this, "CloseFilterView");

            //TODO: mostrar o padrão de filtro quando o sistema de filtro for resetado
        }