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:
parent
f1a726e6b1
commit
f9b6df738b
5 changed files with 99 additions and 99 deletions
|
|
@ -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)))
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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; }
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue