mirror of
				https://github.com/Nioux/AideDeJeu.git
				synced 2025-10-31 07:26:09 +00:00 
			
		
		
		
	Deep search
This commit is contained in:
		
							parent
							
								
									16f3c8c22f
								
							
						
					
					
						commit
						0792aed7cc
					
				
					 1 changed files with 53 additions and 25 deletions
				
			
		|  | @ -1,7 +1,9 @@ | |||
| using AideDeJeu.Views; | ||||
| using AideDeJeuLib; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
| using System.Threading.Tasks; | ||||
| using System.Windows.Input; | ||||
|  | @ -23,7 +25,7 @@ namespace AideDeJeu.ViewModels | |||
|         public async Task ExecuteSearchCommandAsync(string searchText) | ||||
|         { | ||||
|             Main.IsLoading = true; | ||||
|             await Task.Run(async () => await Store.PreloadAllItemsAsync()); | ||||
|             //await Task.Run(async () => await Store.PreloadAllItemsAsync()); | ||||
|             Items = await Task.Run(async () => await DeepSearchAllItemsAsync(searchText)); | ||||
|             Main.IsLoading = false; | ||||
|         } | ||||
|  | @ -47,35 +49,61 @@ namespace AideDeJeu.ViewModels | |||
|             public Item Item { get; set; } | ||||
|         } | ||||
| 
 | ||||
|         public async Task<IEnumerable<SearchedItem>> DeepSearchAllItemsAsync(string searchText) | ||||
|         public string GetPreview(string markdown, string searchText) | ||||
|         { | ||||
|             List<SearchedItem> primaryItems = new List<SearchedItem>(); | ||||
|             List<SearchedItem> secondaryItems = new List<SearchedItem>(); | ||||
|             var cleanSearchText = Tools.Helpers.RemoveDiacritics(searchText ?? string.Empty).ToLower(); | ||||
|             foreach (var item in Store._AllItems) | ||||
|             { | ||||
|                 var name = item.Value.Name; | ||||
|                 var cleanName = Tools.Helpers.RemoveDiacritics(name).ToLower(); | ||||
|                 if (cleanName.Contains(cleanSearchText)) | ||||
|                 { | ||||
|                     primaryItems.Add(new SearchedItem() { Item = item.Value, Preview = name }); | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     var markdown = item.Value.Markdown; | ||||
|                     var cleanMarkdown = Tools.Helpers.RemoveDiacritics(markdown).ToLower(); | ||||
|                     if (cleanMarkdown.Contains(cleanSearchText)) | ||||
|                     { | ||||
|                         int position = cleanMarkdown.IndexOf(cleanSearchText); | ||||
|             int position = markdown.IndexOf(searchText); | ||||
|             int startPosition = Math.Max(0, position - 30); | ||||
|             int endPosition = Math.Min(markdown.Length, position + searchText.Length + 30); | ||||
|                         var preview = markdown.Substring(startPosition, endPosition - startPosition - 1); | ||||
|                         secondaryItems.Add(new SearchedItem() { Item = item.Value, Preview = preview }); | ||||
|             return markdown.Substring(startPosition, endPosition - startPosition - 1); | ||||
|         } | ||||
| 
 | ||||
|         public async Task<IEnumerable<SearchedItem>> DeepSearchAllItemsAsync(string searchText) | ||||
|         { | ||||
|             using (var context = new StoreViewModel.AideDeJeuContext()) | ||||
|             { | ||||
|                 var primary = await context.Items. | ||||
|                     Where(item => item.Name.Contains(searchText)). | ||||
|                     Select(item => new SearchedItem() { Item = item, Preview = item.Name }). | ||||
|                     ToListAsync(); | ||||
|                 var secondary = await context.Items. | ||||
|                     Where(item => item.Markdown.Contains(searchText)). | ||||
|                     Select(item => new SearchedItem() | ||||
|                     { | ||||
|                         Item = item, Preview = GetPreview(item.Markdown, searchText) | ||||
|                     }).ToListAsync(); | ||||
|                 primary.AddRange(secondary); | ||||
|                 return primary.ToList(); | ||||
|             } | ||||
|             } | ||||
|             primaryItems.AddRange(secondaryItems); | ||||
|             return primaryItems; | ||||
| 
 | ||||
|              | ||||
| 
 | ||||
|             //List<SearchedItem> primaryItems = new List<SearchedItem>(); | ||||
|             //List<SearchedItem> secondaryItems = new List<SearchedItem>(); | ||||
|             //var cleanSearchText = Tools.Helpers.RemoveDiacritics(searchText ?? string.Empty).ToLower(); | ||||
|             //foreach (var item in Store._AllItems) | ||||
|             //{ | ||||
|             //    var name = item.Value.Name; | ||||
|             //    var cleanName = Tools.Helpers.RemoveDiacritics(name).ToLower(); | ||||
|             //    if (cleanName.Contains(cleanSearchText)) | ||||
|             //    { | ||||
|             //        primaryItems.Add(new SearchedItem() { Item = item.Value, Preview = name }); | ||||
|             //    } | ||||
|             //    else | ||||
|             //    { | ||||
|             //        var markdown = item.Value.Markdown; | ||||
|             //        var cleanMarkdown = Tools.Helpers.RemoveDiacritics(markdown).ToLower(); | ||||
|             //        if (cleanMarkdown.Contains(cleanSearchText)) | ||||
|             //        { | ||||
|             //            int position = cleanMarkdown.IndexOf(cleanSearchText); | ||||
|             //            int startPosition = Math.Max(0, position - 30); | ||||
|             //            int endPosition = Math.Min(markdown.Length, position + searchText.Length + 30); | ||||
|             //            var preview = markdown.Substring(startPosition, endPosition - startPosition - 1); | ||||
|             //            secondaryItems.Add(new SearchedItem() { Item = item.Value, Preview = preview }); | ||||
|             //        } | ||||
|             //    } | ||||
|             //} | ||||
|             //primaryItems.AddRange(secondaryItems); | ||||
|             //return primaryItems; | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Yan Maniez
						Yan Maniez