mirror of
				https://github.com/Nioux/AideDeJeu.git
				synced 2025-10-30 23:16:09 +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
	
	 Yan Maniez
						Yan Maniez