private async Task ApplyFilters() { if (AllCards != null && !_suspendFilters) { var filtered = from c in AllCards where (!FilteredByFaction || (FactionFilter != Faction.UNALIGNED && c.ValidFactions.Contains(FactionFilter) && c.ValidFactions.Count() != FACTION_COUNT) || (FactionFilter == Faction.UNALIGNED && c.Faction == Faction.UNALIGNED && c.ValidFactions.Count() == FACTION_COUNT)) && (!FilteredByType || c.Type == TypeFilter) && (CostFilter == MAX_COSTS_FILTER || ((CostFilter == MAX_COSTS_FILTER - 1 && c.Cost >= CostFilter) || c.Cost == CostFilter)) && (RarityFilter == 0 || (int)c.Rarity == RarityFilter) && ((TraitFilter == null || !TraitFilter.Any()) || TraitFilter.Intersect(c.Traits).Any()) && (CurrentDeck == null || !FilterByDeck || CurrentDeck.Contains(c) || CurrentDeck.Champion == c) && (string.IsNullOrEmpty(CardSetFilter) || CardSetFilter == _CARD_SET_FILTER_DEFAULT || c.CardSet == (CardSet)Enum.Parse(typeof(CardSet), CardSetFilter)) && (string.IsNullOrEmpty(SearchText) || c.Text.ToLower().Contains(SearchText.ToLower()) || c.Name.ToLower().Contains(SearchText.ToLower()) || c.Race.ToString().ToLower().Contains(SearchText.ToLower()) || SearchText.ToUpper().Contains(c.CardSet.ToString())) orderby c.Rarity == Rarity.TOKEN, c.Type == CardType.CHAMPION descending, c.Faction descending, c.Cost, c.Name select c; IsBusy = true; var newList = await Task.Run(() => filtered.ToList()); FilteredCards = newList; IsBusy = false; UpdateStatus(); ResetFiltersCommand.RaiseCanExecuteChanged(); } }
private async Task DeckInitialize(Deck deck) { CurrentDeck = deck; IsChooser = CurrentDeck != null; if (!IsChooser) { ChooserFilterText = ""; } Message = ""; if (IsChooser) { //filter cards according to deck AllCards = _unfilteredCards.Where((c) => (c.ValidFactions.Contains(CurrentDeck.DeckFaction) && c.Rarity != Rarity.TOKEN)).ToList(); ChooserFilterText = "IconDeckFilter.png"; CanFilterByEclipse = CurrentDeck.DeckFaction == Faction.ECLIPSE; CanFilterByScales = CurrentDeck.DeckFaction == Faction.SCALES; CanFilterByStrife = CurrentDeck.DeckFaction == Faction.STRIFE; CanFilterByThorns = CurrentDeck.DeckFaction == Faction.THORNS; CanFilterBySilence = CurrentDeck.DeckFaction == Faction.SILENCE; CanFilterByEssence = CurrentDeck.DeckFaction == Faction.ESSENCE; CanFilterByDelirium = CurrentDeck.DeckFaction == Faction.DELIRIUM; CanFilterByEighth = (int)CurrentDeck.DeckFaction == 9; if (ResetFiltersCommand.CanExecute(null)) { ResetFiltersCommand.Execute(null); } else { await ApplyFilters(); } RaisePropertyChanged(nameof(CanFilterByEclipse)); RaisePropertyChanged(nameof(CanFilterByScales)); RaisePropertyChanged(nameof(CanFilterByStrife)); RaisePropertyChanged(nameof(CanFilterByThorns)); RaisePropertyChanged(nameof(CanFilterBySilence)); RaisePropertyChanged(nameof(CanFilterByEssence)); RaisePropertyChanged(nameof(CanFilterByDelirium)); RaisePropertyChanged(nameof(CanFilterByEighth)); } else { AllCards = _unfilteredCards?.ToList(); FilteredCards = AllCards; CanFilterByEclipse = true; CanFilterByScales = true; CanFilterByStrife = true; CanFilterByThorns = true; CanFilterBySilence = true; CanFilterByEssence = true; CanFilterByDelirium = true; CanFilterByEighth = true; FilterByDeck = false; if (ResetFiltersCommand.CanExecute(null)) { ResetFiltersCommand.Execute(null); } else { await ApplyFilters(); } } }