Fix clearance of old results

part of #350
This commit is contained in:
bao-qian
2015-11-07 20:48:18 +00:00
parent 705354a3d6
commit 9627272b57
3 changed files with 65 additions and 70 deletions

View File

@@ -163,7 +163,7 @@ namespace Wox
o.PluginID = plugin.ID; o.PluginID = plugin.ID;
o.OriginQuery = query; o.OriginQuery = query;
}); });
UpdateResultView(results); UpdateResultView(results, plugin, query);
} }
public void ShowContextMenu(PluginMetadata plugin, List<Result> results) public void ShowContextMenu(PluginMetadata plugin, List<Result> results)
@@ -177,7 +177,7 @@ namespace Wox
o.ContextMenu = null; o.ContextMenu = null;
}); });
pnlContextMenu.Clear(); pnlContextMenu.Clear();
pnlContextMenu.AddResults(results); pnlContextMenu.AddResults(results, plugin.ID);
pnlContextMenu.Visibility = Visibility.Visible; pnlContextMenu.Visibility = Visibility.Visible;
pnlResult.Visibility = Visibility.Collapsed; pnlResult.Visibility = Visibility.Collapsed;
} }
@@ -419,11 +419,12 @@ namespace Wox
private void QueryContextMenu() private void QueryContextMenu()
{ {
var contextMenuId = "Context Menu Id";
pnlContextMenu.Clear(); pnlContextMenu.Clear();
var query = tbQuery.Text.ToLower(); var query = tbQuery.Text.ToLower();
if (string.IsNullOrEmpty(query)) if (string.IsNullOrEmpty(query))
{ {
pnlContextMenu.AddResults(CurrentContextMenus); pnlContextMenu.AddResults(CurrentContextMenus, contextMenuId);
} }
else else
{ {
@@ -436,7 +437,7 @@ namespace Wox
filterResults.Add(contextMenu); filterResults.Add(contextMenu);
} }
} }
pnlContextMenu.AddResults(filterResults); pnlContextMenu.AddResults(filterResults, contextMenuId);
} }
} }
@@ -445,15 +446,14 @@ namespace Wox
if (_ignoreTextChange) { _ignoreTextChange = false; return; } if (_ignoreTextChange) { _ignoreTextChange = false; return; }
string query = tbQuery.Text.Trim(); string query = tbQuery.Text.Trim();
toolTip.IsOpen = false;
if (IsInContextMenuMode)
{
QueryContextMenu();
return;
}
if (!string.IsNullOrEmpty(query)) if (!string.IsNullOrEmpty(query))
{ {
toolTip.IsOpen = false;
if (IsInContextMenuMode)
{
QueryContextMenu();
return;
}
Query(query); Query(query);
Dispatcher.DelayInvoke("ShowProgressbar", () => Dispatcher.DelayInvoke("ShowProgressbar", () =>
{ {
@@ -738,6 +738,11 @@ namespace Wox
{ {
if (history != null) if (history != null)
{ {
var historyMetadata = new PluginMetadata
{
ID = "Query history",
Name = "Query history"
};
ChangeQueryText(history.Query, true); ChangeQueryText(history.Query, true);
var executeQueryHistoryTitle = GetTranslation("executeQuery"); var executeQueryHistoryTitle = GetTranslation("executeQuery");
var lastExecuteTime = GetTranslation("lastExecuteTime"); var lastExecuteTime = GetTranslation("lastExecuteTime");
@@ -753,7 +758,7 @@ namespace Wox
return false; return false;
} }
} }
}); }, historyMetadata);
} }
} }
@@ -834,33 +839,28 @@ namespace Wox
} }
} }
private void UpdateResultView(List<Result> list) private void UpdateResultView(List<Result> list, PluginMetadata metadata, Query originQuery)
{ {
_queryHasReturn = true; _queryHasReturn = true;
progressBar.Dispatcher.Invoke(new Action(StopProgress)); progressBar.Dispatcher.Invoke(new Action(StopProgress));
if (list == null || list.Count == 0) return;
if (list.Count > 0) list.ForEach(o =>
{ {
list.ForEach(o => o.Score += UserSelectedRecordStorage.Instance.GetSelectedCount(o) * 5;
{ });
o.Score += UserSelectedRecordStorage.Instance.GetSelectedCount(o) * 5; if (originQuery.RawQuery == _lastQuery.RawQuery)
}); {
List<Result> l = list.Where(o => o.OriginQuery != null && o.OriginQuery.RawQuery == _lastQuery.RawQuery).ToList(); UpdateResultViewInternal(list, metadata);
UpdateResultViewInternal(l);
} }
} }
private void UpdateResultViewInternal(List<Result> list) private void UpdateResultViewInternal(List<Result> list, PluginMetadata metadata)
{ {
if (list != null && list.Count > 0) Dispatcher.Invoke(new Action(() =>
{ {
Dispatcher.Invoke(new Action(() => Stopwatch.Normal($"UI update cost for {metadata.Name}",
{ () => { pnlResult.AddResults(list, metadata.ID); });
Stopwatch.Normal($"UI update cost for {list[0].PluginDirectory.Split('\\').Last()}", }));
() =>{pnlResult.AddResults(list);});
}));
}
} }
private Result GetTopMostContextMenu(Result result) private Result GetTopMostContextMenu(Result result)
@@ -908,7 +908,7 @@ namespace Wox
textBeforeEnterContextMenuMode = tbQuery.Text; textBeforeEnterContextMenuMode = tbQuery.Text;
ChangeQueryText(""); ChangeQueryText("");
pnlContextMenu.Clear(); pnlContextMenu.Clear();
pnlContextMenu.AddResults(results); pnlContextMenu.AddResults(results, result.PluginID);
CurrentContextMenus = results; CurrentContextMenus = results;
pnlContextMenu.Visibility = Visibility.Visible; pnlContextMenu.Visibility = Visibility.Visible;
pnlResult.Visibility = Visibility.Collapsed; pnlResult.Visibility = Visibility.Collapsed;

View File

@@ -55,56 +55,51 @@ namespace Wox
} }
} }
public void AddResults(List<Result> newResults) public void AddResults(List<Result> newResults, string resultId)
{ {
if (newResults != null && newResults.Count > 0) var oldResults = _results.Where(r => r.PluginID == resultId).ToList();
// intersection of A (old results) and B (new newResults)
var intersection = oldResults.Intersect(newResults).ToList();
lock (_resultsUpdateLock)
{ {
lock (_resultsUpdateLock) // remove result of relative complement of B in A
foreach (var result in oldResults.Except(intersection))
{ {
var pluginId = newResults[0].PluginID; _results.Remove(result);
var oldResults = _results.Where(r => r.PluginID == pluginId).ToList(); }
// intersection of A (old results) and B (new newResults)
var intersection = oldResults.Intersect(newResults).ToList();
// remove result of relative complement of B in A // update scores
foreach (var result in oldResults.Except(intersection)) foreach (var result in newResults)
{
if (IsTopMostResult(result))
{ {
_results.Remove(result); result.Score = int.MaxValue;
} }
}
// update scores // update index for result in intersection of A and B
foreach (var result in newResults) foreach (var result in intersection)
{ {
if (IsTopMostResult(result)) int oldIndex = _results.IndexOf(result);
{ int oldScore = _results[oldIndex].Score;
result.Score = int.MaxValue; if (result.Score != oldScore)
}
}
// update index for result in intersection of A and B
foreach (var result in intersection)
{
int oldIndex = _results.IndexOf(result);
int oldScore = _results[oldIndex].Score;
if (result.Score != oldScore)
{
int newIndex = InsertIndexOf(result.Score);
if (newIndex != oldIndex)
{
_results.Move(oldIndex, newIndex);
}
}
}
// insert result in relative complement of A in B
foreach (var result in newResults.Except(intersection))
{ {
int newIndex = InsertIndexOf(result.Score); int newIndex = InsertIndexOf(result.Score);
_results.Insert(newIndex, result); if (newIndex != oldIndex)
{
_results.Move(oldIndex, newIndex);
}
} }
lbResults.Margin = lbResults.Items.Count > 0 ? new Thickness { Top = 8 } : new Thickness { Top = 0 };
SelectFirst();
} }
// insert result in relative complement of A in B
foreach (var result in newResults.Except(intersection))
{
int newIndex = InsertIndexOf(result.Score);
_results.Insert(newIndex, result);
}
lbResults.Margin = lbResults.Items.Count > 0 ? new Thickness { Top = 8 } : new Thickness { Top = 0 };
SelectFirst();
} }
} }

View File

@@ -429,7 +429,7 @@ namespace Wox
IcoPath = "Images/app.png", IcoPath = "Images/app.png",
PluginDirectory = Path.GetDirectoryName(Application.ExecutablePath) PluginDirectory = Path.GetDirectoryName(Application.ExecutablePath)
} }
}); }, "test id");
foreach (string theme in ThemeManager.Theme.LoadAvailableThemes()) foreach (string theme in ThemeManager.Theme.LoadAvailableThemes())
{ {