mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-24 13:32:50 -05:00
launcher v2: some optims on meta performance
- limit plugin results to 10 - longer debounce - search plugins when chars > 1
This commit is contained in:
@@ -176,9 +176,11 @@ Item {
|
|||||||
pluginViewPreferences = prefs;
|
pluginViewPreferences = prefs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
property int _searchVersion: 0
|
||||||
|
|
||||||
Timer {
|
Timer {
|
||||||
id: searchDebounce
|
id: searchDebounce
|
||||||
interval: 80
|
interval: searchMode === "all" && searchQuery.length > 0 ? 120 : 60
|
||||||
onTriggered: root.performSearch()
|
onTriggered: root.performSearch()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,6 +195,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function setSearchQuery(query) {
|
function setSearchQuery(query) {
|
||||||
|
_searchVersion++;
|
||||||
searchQuery = query;
|
searchQuery = query;
|
||||||
searchDebounce.restart();
|
searchDebounce.restart();
|
||||||
|
|
||||||
@@ -261,6 +264,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function performSearch() {
|
function performSearch() {
|
||||||
|
var currentVersion = _searchVersion;
|
||||||
isSearching = true;
|
isSearching = true;
|
||||||
|
|
||||||
var cachedSections = AppSearchService.getCachedDefaultSections();
|
var cachedSections = AppSearchService.getCachedDefaultSections();
|
||||||
@@ -430,20 +434,25 @@ Item {
|
|||||||
allItems = allItems.concat(apps);
|
allItems = allItems.concat(apps);
|
||||||
|
|
||||||
if (searchMode === "all") {
|
if (searchMode === "all") {
|
||||||
if (searchQuery) {
|
var includePlugins = !searchQuery || searchQuery.length >= 2;
|
||||||
|
if (searchQuery && includePlugins) {
|
||||||
var allPluginsOrdered = getAllVisiblePluginsOrdered();
|
var allPluginsOrdered = getAllVisiblePluginsOrdered();
|
||||||
|
var maxPerPlugin = 10;
|
||||||
for (var i = 0; i < allPluginsOrdered.length; i++) {
|
for (var i = 0; i < allPluginsOrdered.length; i++) {
|
||||||
var plugin = allPluginsOrdered[i];
|
var plugin = allPluginsOrdered[i];
|
||||||
if (plugin.isBuiltIn) {
|
if (plugin.isBuiltIn) {
|
||||||
var blItems = AppSearchService.getBuiltInLauncherItems(plugin.id, searchQuery);
|
var blItems = AppSearchService.getBuiltInLauncherItems(plugin.id, searchQuery);
|
||||||
for (var j = 0; j < blItems.length; j++)
|
var blLimit = Math.min(blItems.length, maxPerPlugin);
|
||||||
|
for (var j = 0; j < blLimit; j++)
|
||||||
allItems.push(transformBuiltInLauncherItem(blItems[j], plugin.id));
|
allItems.push(transformBuiltInLauncherItem(blItems[j], plugin.id));
|
||||||
} else {
|
} else {
|
||||||
var pItems = getPluginItems(plugin.id, searchQuery);
|
var pItems = getPluginItems(plugin.id, searchQuery);
|
||||||
|
if (pItems.length > maxPerPlugin)
|
||||||
|
pItems = pItems.slice(0, maxPerPlugin);
|
||||||
allItems = allItems.concat(pItems);
|
allItems = allItems.concat(pItems);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else if (!searchQuery) {
|
||||||
var emptyTriggerOrdered = getEmptyTriggerPluginsOrdered();
|
var emptyTriggerOrdered = getEmptyTriggerPluginsOrdered();
|
||||||
for (var i = 0; i < emptyTriggerOrdered.length; i++) {
|
for (var i = 0; i < emptyTriggerOrdered.length; i++) {
|
||||||
var plugin = emptyTriggerOrdered[i];
|
var plugin = emptyTriggerOrdered[i];
|
||||||
@@ -463,17 +472,29 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var dynamicDefs = buildDynamicSectionDefs(allItems);
|
var dynamicDefs = buildDynamicSectionDefs(allItems);
|
||||||
|
|
||||||
|
if (currentVersion !== _searchVersion) {
|
||||||
|
isSearching = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var scoredItems = Scorer.scoreItems(allItems, searchQuery, getFrecencyForItem);
|
var scoredItems = Scorer.scoreItems(allItems, searchQuery, getFrecencyForItem);
|
||||||
var sortAlpha = !searchQuery && SettingsData.sortAppsAlphabetically;
|
var sortAlpha = !searchQuery && SettingsData.sortAppsAlphabetically;
|
||||||
sections = Scorer.groupBySection(scoredItems, dynamicDefs, sortAlpha, searchQuery ? 50 : 500);
|
var newSections = Scorer.groupBySection(scoredItems, dynamicDefs, sortAlpha, searchQuery ? 50 : 500);
|
||||||
|
|
||||||
for (var i = 0; i < sections.length; i++) {
|
if (currentVersion !== _searchVersion) {
|
||||||
var sid = sections[i].id;
|
isSearching = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < newSections.length; i++) {
|
||||||
|
var sid = newSections[i].id;
|
||||||
if (collapsedSections[sid] !== undefined) {
|
if (collapsedSections[sid] !== undefined) {
|
||||||
sections[i].collapsed = collapsedSections[sid];
|
newSections[i].collapsed = collapsedSections[sid];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sections = newSections;
|
||||||
flatModel = Scorer.flattenSections(sections);
|
flatModel = Scorer.flattenSections(sections);
|
||||||
|
|
||||||
if (!AppSearchService.isCacheValid() && !searchQuery && searchMode === "all" && !pluginFilter) {
|
if (!AppSearchService.isCacheValid() && !searchQuery && searchMode === "all" && !pluginFilter) {
|
||||||
|
|||||||
Reference in New Issue
Block a user