1
0
Fork 0
mirror of https://github.com/Nioux/AideDeJeu.git synced 2025-10-30 15:06:06 +00:00

Meilleure gestion filtres async

This commit is contained in:
Yan Maniez 2018-10-20 22:10:13 +02:00
parent f1a726e6b1
commit f9b6df738b
5 changed files with 99 additions and 99 deletions

View file

@ -43,7 +43,7 @@ namespace AideDeJeu.Droid
{ {
using (var outStream = new FileStream(path, FileMode.Create)) 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))) //using (var binaryReader = new BinaryReader(Android.App.Application.Context.Assets.Open(databaseName)))

View file

@ -1,6 +1,7 @@
using AideDeJeu.Tools; using AideDeJeu.Tools;
using System; using System;
using System.IO; using System.IO;
using System.Threading.Tasks;
[assembly: Xamarin.Forms.Dependency(typeof(AideDeJeu.GTK.Version_GTK))] [assembly: Xamarin.Forms.Dependency(typeof(AideDeJeu.GTK.Version_GTK))]
namespace AideDeJeu.GTK namespace AideDeJeu.GTK
@ -28,7 +29,7 @@ namespace AideDeJeu.GTK
//return info.VersionCode; //return info.VersionCode;
} }
public string GetDatabasePath(string databaseName) public async Task<string> GetDatabasePathAsync(string databaseName)
{ {
return null; return null;
//var documentsDirectoryPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); //var documentsDirectoryPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);

View file

@ -35,7 +35,7 @@ namespace AideDeJeu.UWP
{ {
using (var outStream = new FileStream(path, FileMode.Create)) using (var outStream = new FileStream(path, FileMode.Create))
{ {
inStream.CopyTo(outStream); await inStream.CopyToAsync(outStream);
} }
} }
} }

View file

@ -1,6 +1,5 @@
using AideDeJeu.Tools; using AideDeJeu.Tools;
using AideDeJeuLib; using AideDeJeuLib;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
@ -13,7 +12,7 @@ namespace AideDeJeu.ViewModels
public abstract class FilterViewModel : BaseViewModel public abstract class FilterViewModel : BaseViewModel
{ {
public ICommand LoadItemsCommand { get; set; } public ICommand LoadItemsCommand { get; set; }
public abstract Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken cancellationToken = default); public abstract Task<IEnumerable<Item>> GetFilteredItemsAsync(CancellationToken cancellationToken = default);
public abstract IEnumerable<Filter> Filters { get; } public abstract IEnumerable<Filter> Filters { get; }
private string _SearchText = ""; private string _SearchText = "";
public string SearchText public string SearchText
@ -139,43 +138,43 @@ namespace AideDeJeu.ViewModels
} }
} }
public class SearchFilterViewModel : FilterViewModel //public class SearchFilterViewModel : FilterViewModel
{ //{
private IEnumerable<Filter> _Filters = null; // private IEnumerable<Filter> _Filters = null;
public override IEnumerable<Filter> Filters // public override IEnumerable<Filter> Filters
{ // {
get // get
{ // {
if (_Filters == null) // if (_Filters == null)
{ // {
_Filters = new List<Filter>() // _Filters = new List<Filter>()
{ // {
}; // };
RegisterFilters(); // RegisterFilters();
} // }
return _Filters; // return _Filters;
} // }
} // }
public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default) // public override async Task<IEnumerable<Item>> GetFilteredItemsAsync(CancellationToken token = default)
{ // {
return await Task.Run(() => // return await Task.Run(() =>
{ // {
return items.Where(item => // return items.Where(item =>
{ // {
var spell = item; // var spell = item;
return // return
( // (
(Helpers.RemoveDiacritics(spell.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) || // (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())) // (Helpers.RemoveDiacritics(spell.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower()))
); // );
}).AsEnumerable(); // }).AsEnumerable();
}, token); // }, token);
} // }
} //}
#region Spells #region Spells
@ -249,7 +248,7 @@ namespace AideDeJeu.ViewModels
public class VFSpellFilterViewModel : SpellFilterViewModel public class VFSpellFilterViewModel : SpellFilterViewModel
{ {
public override Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken cancellationToken = default) public override Task<IEnumerable<Item>> GetFilteredItemsAsync(CancellationToken cancellationToken = default)
{ {
throw new System.NotImplementedException(); throw new System.NotImplementedException();
} }
@ -309,7 +308,7 @@ namespace AideDeJeu.ViewModels
public class VOSpellFilterViewModel : SpellFilterViewModel public class VOSpellFilterViewModel : SpellFilterViewModel
{ {
public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default) public override async Task<IEnumerable<Item>> GetFilteredItemsAsync(CancellationToken token = default)
{ {
var levelComparer = new LevelComparer(); var levelComparer = new LevelComparer();
var classe = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Class).SelectedKey ?? ""; var classe = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Class).SelectedKey ?? "";
@ -389,7 +388,7 @@ namespace AideDeJeu.ViewModels
public class HDSpellFilterViewModel : SpellFilterViewModel public class HDSpellFilterViewModel : SpellFilterViewModel
{ {
public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default) public override async Task<IEnumerable<Item>> GetFilteredItemsAsync(CancellationToken token = default)
{ {
var levelComparer = new LevelComparer(); var levelComparer = new LevelComparer();
var classe = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Class).SelectedKey ?? ""; var classe = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Class).SelectedKey ?? "";
@ -557,7 +556,7 @@ namespace AideDeJeu.ViewModels
public class VFMonsterFilterViewModel : MonsterFilterViewModel public class VFMonsterFilterViewModel : MonsterFilterViewModel
{ {
public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default) public override async Task<IEnumerable<Item>> GetFilteredItemsAsync(CancellationToken token = default)
{ {
throw new System.Exception(); throw new System.Exception();
} }
@ -648,7 +647,7 @@ namespace AideDeJeu.ViewModels
public class VOMonsterFilterViewModel : MonsterFilterViewModel public class VOMonsterFilterViewModel : MonsterFilterViewModel
{ {
public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default) public override async Task<IEnumerable<Item>> GetFilteredItemsAsync(CancellationToken token = default)
{ {
var powerComparer = new PowerComparer(); var powerComparer = new PowerComparer();
@ -764,32 +763,32 @@ namespace AideDeJeu.ViewModels
public class HDMonsterFilterViewModel : MonsterFilterViewModel public class HDMonsterFilterViewModel : MonsterFilterViewModel
{ {
public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default) public override async Task<IEnumerable<Item>> GetFilteredItemsAsync(CancellationToken token = default)
{ {
var powerComparer = new PowerComparer(); var powerComparer = new PowerComparer();
var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? ""; var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? "";
var minPower = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MinPower).SelectedKey ?? "0 (0 PX)"; 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 maxPower = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MaxPower).SelectedKey ?? "30 (155000 PX)";
var size = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Size).SelectedKey ?? ""; var size = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Size).SelectedKey ?? "";
var source = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Source).SelectedKey ?? ""; var source = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Source).SelectedKey ?? "";
token.ThrowIfCancellationRequested(); token.ThrowIfCancellationRequested();
using (var context = await StoreViewModel.GetDatabaseContextAsync()) using (var context = await StoreViewModel.GetDatabaseContextAsync())
{ {
return context.MonstersHD.Where(monster => return context.MonstersHD.Where(monster =>
monster != null && monster != null &&
monster.Type.Contains(type) && monster.Type.Contains(type) &&
(string.IsNullOrEmpty(size) || monster.Size.Equals(size)) && (string.IsNullOrEmpty(size) || monster.Size.Equals(size)) &&
(string.IsNullOrEmpty(source) || (monster.Source != null && monster.Source.Contains(source))) && (string.IsNullOrEmpty(source) || (monster.Source != null && monster.Source.Contains(source))) &&
powerComparer.Compare(monster.Challenge, minPower) >= 0 && powerComparer.Compare(monster.Challenge, minPower) >= 0 &&
powerComparer.Compare(monster.Challenge, maxPower) <= 0 && powerComparer.Compare(monster.Challenge, maxPower) <= 0 &&
( (
(Helpers.RemoveDiacritics(monster.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) || (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())) (Helpers.RemoveDiacritics(monster.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower()))
) )
).OrderBy(monster => monster.Name).ToList(); ).OrderBy(monster => monster.Name).ToList();
} }
} }
public override List<KeyValuePair<string, string>> Categories { get; } = new List<KeyValuePair<string, string>>() public override List<KeyValuePair<string, string>> Categories { get; } = new List<KeyValuePair<string, string>>()
@ -901,26 +900,26 @@ namespace AideDeJeu.ViewModels
} }
} }
public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default) public override async Task<IEnumerable<Item>> GetFilteredItemsAsync(CancellationToken token = default)
{ {
var priceComparer = new PriceComparer(); var priceComparer = new PriceComparer();
var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? ""; var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? "";
var minPrice = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MinPrice).SelectedKey ?? "0 pc"; 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 maxPrice = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MaxPrice).SelectedKey ?? "1 000 000 po";
using (var context = await GetDatabaseContextAsync()) using (var context = await GetDatabaseContextAsync())
{ {
return context.Equipments.Where(equipment => return context.Equipments.Where(equipment =>
equipment.Type.ToLower().Contains(type.ToLower()) && equipment.Type.ToLower().Contains(type.ToLower()) &&
priceComparer.Compare(equipment.Price, minPrice) >= 0 && priceComparer.Compare(equipment.Price, minPrice) >= 0 &&
priceComparer.Compare(equipment.Price, maxPrice) <= 0 && priceComparer.Compare(equipment.Price, maxPrice) <= 0 &&
( (
(Helpers.RemoveDiacritics(equipment.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) || (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())) (Helpers.RemoveDiacritics(equipment.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower()))
) )
).OrderBy(eq => eq.Name) ).OrderBy(eq => eq.Name)
.ToList(); .ToList();
} }
} }
public abstract List<KeyValuePair<string, string>> Types { get; } public abstract List<KeyValuePair<string, string>> Types { get; }
@ -1001,22 +1000,22 @@ namespace AideDeJeu.ViewModels
} }
} }
public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default) public override async Task<IEnumerable<Item>> GetFilteredItemsAsync(CancellationToken token = default)
{ {
var priceComparer = new PriceComparer(); var priceComparer = new PriceComparer();
var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? ""; var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? "";
var rarity = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Rarity).SelectedKey ?? ""; var rarity = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Rarity).SelectedKey ?? "";
var attunement = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Attunement).SelectedKey ?? ""; var attunement = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Attunement).SelectedKey ?? "";
using (var context = await GetDatabaseContextAsync()) using (var context = await GetDatabaseContextAsync())
{ {
return context.MagicItems.Where(magicitem => return context.MagicItems.Where(magicitem =>
MatchContains(magicitem.Type, type) && MatchContains(magicitem.Type, type) &&
MatchContains(magicitem.Rarity, rarity) && MatchContains(magicitem.Rarity, rarity) &&
MatchContains(magicitem.Attunement, attunement) && MatchContains(magicitem.Attunement, attunement) &&
MatchSearch(magicitem) MatchSearch(magicitem)
).OrderBy(eq => eq.Name).ToList(); ).OrderBy(eq => eq.Name).ToList();
} }
} }
public abstract List<KeyValuePair<string, string>> Types { get; } public abstract List<KeyValuePair<string, string>> Types { get; }

View file

@ -119,7 +119,7 @@ namespace AideDeJeu.ViewModels
{ {
if (Filter != null) 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()); Items = new Item(items.ToList());
Children = items; Children = items;
} }