broulik created this revision.
broulik added a reviewer: Plasma.
Herald added a project: Plasma.
Herald added a subscriber: plasma-devel.
broulik requested review of this revision.
REVISION SUMMARY
  This adds a new `Milou.ResultsModel` for runner results which tries very hard 
to avoid model resets and instead signals addition, removal, and changes in 
results.
  The various result processing, filtering, and grouping features are split 
into tiny dedicated proxy models to make the code easier to follow and 
maintain. The QML API isn't changed so that look and feel themes don't need to 
be adjusted.
  
  The raw results model is a tree of runner results grouped by `matchCategory` 
(e.g. "Documents", "Applications").
  Results are then sorted by result type (`ExactMatch`, `HelperMatch`, etc) and 
by their `relevance`. The highest scored match in a group determines its 
overall score. The previous heuristic of prefering categories who have results 
with the query in their visible text has been removed but could easily be added 
back if deemed beneficial for the quality of results.
  
  The groups are then limited in size with higher scored categories being 
allowed to show more matches. This model could in the future also be extended 
to allow expanding groups to show all of the results inside.
  After that the model is flattened back into a tree with the group items 
removed for consumption in the existing `ListView`. Items with an identical 
`text` will have their `subtext` displayed automatically for disambiguation.

TEST PLAN
  - KRunner feels snappier overall, especially when dealing with a result set 
that hardly changes, e.g. using the calculator runner
  - Ran model test and fixed most of its complaints. However, when updating a 
category, we append the new items, replace the entire list, and afterwards 
signal a data change, which model test doesn't like. It checks for whether the 
data before the inserted area didn't change, which it did at this point but 
that's why we signal a data change afterwards :)
  
  - Running results still works
  - Replacing the query string when requested still works, e.g. clicking on a 
calculator runner result changes the query string to that number
  - Dragging results from KRunner to elsewhere still works. I noticed dragging 
applications from krunner to kickoff doesn't work but didn't check if that is a 
regression or because KRunner closes when kickoff opens
  - Invoking runner actions (e.g. "run in terminal") still work

REPOSITORY
  R112 Milou

REVISION DETAIL
  https://phabricator.kde.org/D22735

AFFECTED FILES
  CMakeLists.txt
  lib/CMakeLists.txt
  lib/qml/ResultDelegate.qml
  lib/qml/ResultsView.qml
  lib/qml/qmlplugins.cpp
  lib/resultsmodel.cpp
  lib/resultsmodel.h
  lib/runnerresultsmodel.cpp
  lib/runnerresultsmodel.h

To: broulik, #plasma
Cc: plasma-devel, LeGast00n, jraleigh, fbampaloukas, GB_2, ragreen, Pitel, 
ZrenBot, himcesjf, lesliezhai, ali-mohamed, jensreuterberg, abetts, sebas, 
apol, mart

Reply via email to