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); } }
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); } }
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); }
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); }
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); }
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 }