updated top most record

This commit is contained in:
AT 2019-12-03 23:02:24 +02:00
parent 406cc71f96
commit c90dd0e818
3 changed files with 30 additions and 25 deletions

View File

@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace Wox.Infrastructure.Storage namespace Wox.Infrastructure.Storage
{ {
class WoxJsonStorage<T> : JsonStrorage<T> where T : new() public class WoxJsonStorage<T> : JsonStrorage<T> where T : new()
{ {
public WoxJsonStorage() public WoxJsonStorage()
{ {

View File

@ -108,7 +108,7 @@ namespace Wox.Plugin
public object ContextData { get; set; } public object ContextData { get; set; }
/// <summary> /// <summary>
/// Plugin ID that generate this result /// Plugin ID that generated this result
/// </summary> /// </summary>
public string PluginID { get; internal set; } public string PluginID { get; internal set; }
} }

View File

@ -1,16 +1,26 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Runtime.InteropServices;
using Newtonsoft.Json;
using Wox.Infrastructure.Storage; using Wox.Infrastructure.Storage;
using Wox.Plugin; using Wox.Plugin;
namespace Wox.Storage namespace Wox.Storage
{ {
// todo this class is not thread safe.... but used from multiple threads.
public class TopMostRecord public class TopMostRecord
{ {
public Dictionary<string, Record> records = new Dictionary<string, Record>(); [JsonProperty]
private Dictionary<string, Record> records = new Dictionary<string, Record>();
internal bool IsTopMost(Result result) internal bool IsTopMost(Result result)
{ {
if (records.Count == 0)
{
return false;
}
// since this dictionary should be very small (or empty) going over it should be pretty fast.
return records.Any(o => o.Value.Title == result.Title return records.Any(o => o.Value.Title == result.Title
&& o.Value.SubTitle == result.SubTitle && o.Value.SubTitle == result.SubTitle
&& o.Value.PluginID == result.PluginID && o.Value.PluginID == result.PluginID
@ -18,30 +28,25 @@ namespace Wox.Storage
} }
internal void Remove(Result result) internal void Remove(Result result)
{
if (records.ContainsKey(result.OriginQuery.RawQuery))
{ {
records.Remove(result.OriginQuery.RawQuery); records.Remove(result.OriginQuery.RawQuery);
} }
}
internal void AddOrUpdate(Result result) internal void AddOrUpdate(Result result)
{ {
if (records.ContainsKey(result.OriginQuery.RawQuery)) var record = new Record
{
records[result.OriginQuery.RawQuery].Title = result.Title;
records[result.OriginQuery.RawQuery].SubTitle = result.SubTitle;
records[result.OriginQuery.RawQuery].PluginID = result.PluginID;
}
else
{
records.Add(result.OriginQuery.RawQuery, new Record
{ {
PluginID = result.PluginID, PluginID = result.PluginID,
Title = result.Title, Title = result.Title,
SubTitle = result.SubTitle SubTitle = result.SubTitle
}); };
records[result.OriginQuery.RawQuery] = record;
} }
public void Load(Dictionary<string, Record> dictionary)
{
records = dictionary;
} }
} }