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
{
class WoxJsonStorage<T> : JsonStrorage<T> where T : new()
public class WoxJsonStorage<T> : JsonStrorage<T> where T : new()
{
public WoxJsonStorage()
{
@ -18,4 +18,4 @@ namespace Wox.Infrastructure.Storage
FilePath = Path.Combine(directoryPath, $"{filename}{FileSuffix}");
}
}
}
}

View File

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

View File

@ -1,47 +1,52 @@
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using Newtonsoft.Json;
using Wox.Infrastructure.Storage;
using Wox.Plugin;
namespace Wox.Storage
{
// todo this class is not thread safe.... but used from multiple threads.
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)
{
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
&& o.Value.SubTitle == result.SubTitle
&& o.Value.PluginID == result.PluginID
&& o.Key == result.OriginQuery.RawQuery);
&& o.Value.SubTitle == result.SubTitle
&& o.Value.PluginID == result.PluginID
&& o.Key == result.OriginQuery.RawQuery);
}
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)
{
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,
Title = result.Title,
SubTitle = result.SubTitle
});
}
PluginID = result.PluginID,
Title = result.Title,
SubTitle = result.SubTitle
};
records[result.OriginQuery.RawQuery] = record;
}
public void Load(Dictionary<string, Record> dictionary)
{
records = dictionary;
}
}