From f9b6df738b78bf26a0c944f10f46cf320484e526 Mon Sep 17 00:00:00 2001 From: Yan Maniez Date: Sat, 20 Oct 2018 22:10:13 +0200 Subject: [PATCH] Meilleure gestion filtres async --- AideDeJeu/AideDeJeu.Android/NativeAPI.cs | 2 +- AideDeJeu/AideDeJeu.GTK/NativeAPI.cs | 3 +- AideDeJeu/AideDeJeu.UWP/NativeAPI.cs | 2 +- .../AideDeJeu/ViewModels/FilterViewModel.cs | 189 +++++++++--------- .../AideDeJeu/ViewModels/ItemsViewModel.cs | 2 +- 5 files changed, 99 insertions(+), 99 deletions(-) diff --git a/AideDeJeu/AideDeJeu.Android/NativeAPI.cs b/AideDeJeu/AideDeJeu.Android/NativeAPI.cs index 382f0fca..6941b0be 100644 --- a/AideDeJeu/AideDeJeu.Android/NativeAPI.cs +++ b/AideDeJeu/AideDeJeu.Android/NativeAPI.cs @@ -43,7 +43,7 @@ namespace AideDeJeu.Droid { using (var outStream = new FileStream(path, FileMode.Create)) { - inStream.CopyTo(outStream); + await inStream.CopyToAsync(outStream); } } //using (var binaryReader = new BinaryReader(Android.App.Application.Context.Assets.Open(databaseName))) diff --git a/AideDeJeu/AideDeJeu.GTK/NativeAPI.cs b/AideDeJeu/AideDeJeu.GTK/NativeAPI.cs index f62e397e..0f449e14 100644 --- a/AideDeJeu/AideDeJeu.GTK/NativeAPI.cs +++ b/AideDeJeu/AideDeJeu.GTK/NativeAPI.cs @@ -1,6 +1,7 @@ using AideDeJeu.Tools; using System; using System.IO; +using System.Threading.Tasks; [assembly: Xamarin.Forms.Dependency(typeof(AideDeJeu.GTK.Version_GTK))] namespace AideDeJeu.GTK @@ -28,7 +29,7 @@ namespace AideDeJeu.GTK //return info.VersionCode; } - public string GetDatabasePath(string databaseName) + public async Task GetDatabasePathAsync(string databaseName) { return null; //var documentsDirectoryPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); diff --git a/AideDeJeu/AideDeJeu.UWP/NativeAPI.cs b/AideDeJeu/AideDeJeu.UWP/NativeAPI.cs index 169e6daf..44a92701 100644 --- a/AideDeJeu/AideDeJeu.UWP/NativeAPI.cs +++ b/AideDeJeu/AideDeJeu.UWP/NativeAPI.cs @@ -35,7 +35,7 @@ namespace AideDeJeu.UWP { using (var outStream = new FileStream(path, FileMode.Create)) { - inStream.CopyTo(outStream); + await inStream.CopyToAsync(outStream); } } } diff --git a/AideDeJeu/AideDeJeu/ViewModels/FilterViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/FilterViewModel.cs index 8b4ef08b..089874e1 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/FilterViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/FilterViewModel.cs @@ -1,6 +1,5 @@ using AideDeJeu.Tools; using AideDeJeuLib; -using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using System.Linq; using System.Threading; @@ -13,7 +12,7 @@ namespace AideDeJeu.ViewModels public abstract class FilterViewModel : BaseViewModel { public ICommand LoadItemsCommand { get; set; } - public abstract Task> FilterItems(IEnumerable items, CancellationToken cancellationToken = default); + public abstract Task> GetFilteredItemsAsync(CancellationToken cancellationToken = default); public abstract IEnumerable Filters { get; } private string _SearchText = ""; public string SearchText @@ -139,43 +138,43 @@ namespace AideDeJeu.ViewModels } } - public class SearchFilterViewModel : FilterViewModel - { - private IEnumerable _Filters = null; - public override IEnumerable Filters - { - get - { - if (_Filters == null) - { - _Filters = new List() - { - }; - RegisterFilters(); - } - return _Filters; - } - } + //public class SearchFilterViewModel : FilterViewModel + //{ + // private IEnumerable _Filters = null; + // public override IEnumerable Filters + // { + // get + // { + // if (_Filters == null) + // { + // _Filters = new List() + // { + // }; + // RegisterFilters(); + // } + // return _Filters; + // } + // } - public override async Task> FilterItems(IEnumerable items, CancellationToken token = default) - { - return await Task.Run(() => - { - return items.Where(item => - { - var spell = item; - return - ( - (Helpers.RemoveDiacritics(spell.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) || - (Helpers.RemoveDiacritics(spell.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) - ); - }).AsEnumerable(); - }, token); + // public override async Task> GetFilteredItemsAsync(CancellationToken token = default) + // { + // return await Task.Run(() => + // { + // return items.Where(item => + // { + // var spell = item; + // return + // ( + // (Helpers.RemoveDiacritics(spell.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) || + // (Helpers.RemoveDiacritics(spell.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) + // ); + // }).AsEnumerable(); + // }, token); - } + // } - } + //} #region Spells @@ -249,7 +248,7 @@ namespace AideDeJeu.ViewModels public class VFSpellFilterViewModel : SpellFilterViewModel { - public override Task> FilterItems(IEnumerable items, CancellationToken cancellationToken = default) + public override Task> GetFilteredItemsAsync(CancellationToken cancellationToken = default) { throw new System.NotImplementedException(); } @@ -309,7 +308,7 @@ namespace AideDeJeu.ViewModels public class VOSpellFilterViewModel : SpellFilterViewModel { - public override async Task> FilterItems(IEnumerable items, CancellationToken token = default) + public override async Task> GetFilteredItemsAsync(CancellationToken token = default) { var levelComparer = new LevelComparer(); var classe = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Class).SelectedKey ?? ""; @@ -389,7 +388,7 @@ namespace AideDeJeu.ViewModels public class HDSpellFilterViewModel : SpellFilterViewModel { - public override async Task> FilterItems(IEnumerable items, CancellationToken token = default) + public override async Task> GetFilteredItemsAsync(CancellationToken token = default) { var levelComparer = new LevelComparer(); var classe = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Class).SelectedKey ?? ""; @@ -557,7 +556,7 @@ namespace AideDeJeu.ViewModels public class VFMonsterFilterViewModel : MonsterFilterViewModel { - public override async Task> FilterItems(IEnumerable items, CancellationToken token = default) + public override async Task> GetFilteredItemsAsync(CancellationToken token = default) { throw new System.Exception(); } @@ -648,7 +647,7 @@ namespace AideDeJeu.ViewModels public class VOMonsterFilterViewModel : MonsterFilterViewModel { - public override async Task> FilterItems(IEnumerable items, CancellationToken token = default) + public override async Task> GetFilteredItemsAsync(CancellationToken token = default) { var powerComparer = new PowerComparer(); @@ -764,32 +763,32 @@ namespace AideDeJeu.ViewModels public class HDMonsterFilterViewModel : MonsterFilterViewModel { - public override async Task> FilterItems(IEnumerable items, CancellationToken token = default) + public override async Task> GetFilteredItemsAsync(CancellationToken token = default) { - var powerComparer = new PowerComparer(); + var powerComparer = new PowerComparer(); - var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? ""; - var minPower = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MinPower).SelectedKey ?? "0 (0 PX)"; - var maxPower = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MaxPower).SelectedKey ?? "30 (155000 PX)"; - var size = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Size).SelectedKey ?? ""; - var source = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Source).SelectedKey ?? ""; - token.ThrowIfCancellationRequested(); + var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? ""; + var minPower = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MinPower).SelectedKey ?? "0 (0 PX)"; + var maxPower = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MaxPower).SelectedKey ?? "30 (155000 PX)"; + var size = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Size).SelectedKey ?? ""; + var source = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Source).SelectedKey ?? ""; + token.ThrowIfCancellationRequested(); - using (var context = await StoreViewModel.GetDatabaseContextAsync()) - { - return context.MonstersHD.Where(monster => - monster != null && - monster.Type.Contains(type) && - (string.IsNullOrEmpty(size) || monster.Size.Equals(size)) && - (string.IsNullOrEmpty(source) || (monster.Source != null && monster.Source.Contains(source))) && - powerComparer.Compare(monster.Challenge, minPower) >= 0 && - powerComparer.Compare(monster.Challenge, maxPower) <= 0 && - ( - (Helpers.RemoveDiacritics(monster.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) || - (Helpers.RemoveDiacritics(monster.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) - ) - ).OrderBy(monster => monster.Name).ToList(); - } + using (var context = await StoreViewModel.GetDatabaseContextAsync()) + { + return context.MonstersHD.Where(monster => + monster != null && + monster.Type.Contains(type) && + (string.IsNullOrEmpty(size) || monster.Size.Equals(size)) && + (string.IsNullOrEmpty(source) || (monster.Source != null && monster.Source.Contains(source))) && + powerComparer.Compare(monster.Challenge, minPower) >= 0 && + powerComparer.Compare(monster.Challenge, maxPower) <= 0 && + ( + (Helpers.RemoveDiacritics(monster.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) || + (Helpers.RemoveDiacritics(monster.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) + ) + ).OrderBy(monster => monster.Name).ToList(); + } } public override List> Categories { get; } = new List>() @@ -901,26 +900,26 @@ namespace AideDeJeu.ViewModels } } - public override async Task> FilterItems(IEnumerable items, CancellationToken token = default) + public override async Task> GetFilteredItemsAsync(CancellationToken token = default) { - var priceComparer = new PriceComparer(); - var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? ""; - var minPrice = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MinPrice).SelectedKey ?? "0 pc"; - var maxPrice = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MaxPrice).SelectedKey ?? "1 000 000 po"; + var priceComparer = new PriceComparer(); + var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? ""; + var minPrice = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MinPrice).SelectedKey ?? "0 pc"; + var maxPrice = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MaxPrice).SelectedKey ?? "1 000 000 po"; - using (var context = await GetDatabaseContextAsync()) - { - return context.Equipments.Where(equipment => - equipment.Type.ToLower().Contains(type.ToLower()) && - priceComparer.Compare(equipment.Price, minPrice) >= 0 && - priceComparer.Compare(equipment.Price, maxPrice) <= 0 && - ( - (Helpers.RemoveDiacritics(equipment.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) || - (Helpers.RemoveDiacritics(equipment.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) - ) - ).OrderBy(eq => eq.Name) - .ToList(); - } + using (var context = await GetDatabaseContextAsync()) + { + return context.Equipments.Where(equipment => + equipment.Type.ToLower().Contains(type.ToLower()) && + priceComparer.Compare(equipment.Price, minPrice) >= 0 && + priceComparer.Compare(equipment.Price, maxPrice) <= 0 && + ( + (Helpers.RemoveDiacritics(equipment.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) || + (Helpers.RemoveDiacritics(equipment.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) + ) + ).OrderBy(eq => eq.Name) + .ToList(); + } } public abstract List> Types { get; } @@ -1001,22 +1000,22 @@ namespace AideDeJeu.ViewModels } } - public override async Task> FilterItems(IEnumerable items, CancellationToken token = default) + public override async Task> GetFilteredItemsAsync(CancellationToken token = default) { - var priceComparer = new PriceComparer(); - var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? ""; - var rarity = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Rarity).SelectedKey ?? ""; - var attunement = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Attunement).SelectedKey ?? ""; + var priceComparer = new PriceComparer(); + var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? ""; + var rarity = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Rarity).SelectedKey ?? ""; + var attunement = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Attunement).SelectedKey ?? ""; - using (var context = await GetDatabaseContextAsync()) - { - return context.MagicItems.Where(magicitem => - MatchContains(magicitem.Type, type) && - MatchContains(magicitem.Rarity, rarity) && - MatchContains(magicitem.Attunement, attunement) && - MatchSearch(magicitem) - ).OrderBy(eq => eq.Name).ToList(); - } + using (var context = await GetDatabaseContextAsync()) + { + return context.MagicItems.Where(magicitem => + MatchContains(magicitem.Type, type) && + MatchContains(magicitem.Rarity, rarity) && + MatchContains(magicitem.Attunement, attunement) && + MatchSearch(magicitem) + ).OrderBy(eq => eq.Name).ToList(); + } } public abstract List> Types { get; } diff --git a/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs index 13ca734b..433e70e2 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs @@ -119,7 +119,7 @@ namespace AideDeJeu.ViewModels { if (Filter != null) { - var items = await Task.Run(async() => await Filter.FilterItems(await AllItems.GetChildrenAsync(), cancellationToken: cancellationToken)); + var items = await Task.Run(async() => await Filter.GetFilteredItemsAsync(cancellationToken: cancellationToken)); Items = new Item(items.ToList()); Children = items; }