1
0
Fork 0
mirror of https://github.com/Nioux/AideDeJeu.git synced 2025-10-31 23:45:39 +00:00

Deep search

This commit is contained in:
Yan Maniez 2018-10-14 23:25:56 +02:00
parent 16f3c8c22f
commit 0792aed7cc

View file

@ -1,7 +1,9 @@
using AideDeJeu.Views; using AideDeJeu.Views;
using AideDeJeuLib; using AideDeJeuLib;
using Microsoft.EntityFrameworkCore;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Input; using System.Windows.Input;
@ -23,7 +25,7 @@ namespace AideDeJeu.ViewModels
public async Task ExecuteSearchCommandAsync(string searchText) public async Task ExecuteSearchCommandAsync(string searchText)
{ {
Main.IsLoading = true; 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)); Items = await Task.Run(async () => await DeepSearchAllItemsAsync(searchText));
Main.IsLoading = false; Main.IsLoading = false;
} }
@ -47,35 +49,61 @@ namespace AideDeJeu.ViewModels
public Item Item { get; set; } public Item Item { get; set; }
} }
public string GetPreview(string markdown, string searchText)
{
int position = markdown.IndexOf(searchText);
int startPosition = Math.Max(0, position - 30);
int endPosition = Math.Min(markdown.Length, position + searchText.Length + 30);
return markdown.Substring(startPosition, endPosition - startPosition - 1);
}
public async Task<IEnumerable<SearchedItem>> DeepSearchAllItemsAsync(string searchText) public async Task<IEnumerable<SearchedItem>> DeepSearchAllItemsAsync(string searchText)
{ {
List<SearchedItem> primaryItems = new List<SearchedItem>(); using (var context = new StoreViewModel.AideDeJeuContext())
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 primary = await context.Items.
var cleanName = Tools.Helpers.RemoveDiacritics(name).ToLower(); Where(item => item.Name.Contains(searchText)).
if (cleanName.Contains(cleanSearchText)) Select(item => new SearchedItem() { Item = item, Preview = item.Name }).
{ ToListAsync();
primaryItems.Add(new SearchedItem() { Item = item.Value, Preview = name }); var secondary = await context.Items.
} Where(item => item.Markdown.Contains(searchText)).
else Select(item => new SearchedItem()
{
var markdown = item.Value.Markdown;
var cleanMarkdown = Tools.Helpers.RemoveDiacritics(markdown).ToLower();
if (cleanMarkdown.Contains(cleanSearchText))
{ {
int position = cleanMarkdown.IndexOf(cleanSearchText); Item = item, Preview = GetPreview(item.Markdown, searchText)
int startPosition = Math.Max(0, position - 30); }).ToListAsync();
int endPosition = Math.Min(markdown.Length, position + searchText.Length + 30); primary.AddRange(secondary);
var preview = markdown.Substring(startPosition, endPosition - startPosition - 1); return primary.ToList();
secondaryItems.Add(new SearchedItem() { Item = item.Value, Preview = preview });
}
}
} }
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;
} }