1
0
Fork 0
mirror of https://github.com/Nioux/AideDeJeu.git synced 2025-10-31 07:26:09 +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 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;
}