From e160a41347ed9e8a77e66ddd200d0193c578ad5e Mon Sep 17 00:00:00 2001 From: bbedward Date: Sat, 26 Jul 2025 16:50:57 -0400 Subject: [PATCH] fix app searching sorting with usage rankings --- Modules/AppDrawer/AppLauncher.qml | 22 +++++++++++----------- Services/AppSearchService.qml | 28 +++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/Modules/AppDrawer/AppLauncher.qml b/Modules/AppDrawer/AppLauncher.qml index db8f2a4d..7473b23a 100644 --- a/Modules/AppDrawer/AppLauncher.qml +++ b/Modules/AppDrawer/AppLauncher.qml @@ -76,17 +76,17 @@ Item { } } } - // Sort apps by usage ranking, then alphabetically - apps = apps.sort(function(a, b) { - var aId = a.id || (a.execString || a.exec || ""); - var bId = b.id || (b.execString || b.exec || ""); - var aUsage = appUsageRanking[aId] ? appUsageRanking[aId].usageCount : 0; - var bUsage = appUsageRanking[bId] ? appUsageRanking[bId].usageCount : 0; - if (aUsage !== bUsage) - return bUsage - aUsage; - // Higher usage first - return (a.name || "").localeCompare(b.name || ""); // Alphabetical fallback - }); + if (searchQuery.length === 0) { + apps = apps.sort(function(a, b) { + var aId = a.id || (a.execString || a.exec || ""); + var bId = b.id || (b.execString || b.exec || ""); + var aUsage = appUsageRanking[aId] ? appUsageRanking[aId].usageCount : 0; + var bUsage = appUsageRanking[bId] ? appUsageRanking[bId].usageCount : 0; + if (aUsage !== bUsage) + return bUsage - aUsage; + return (a.name || "").localeCompare(b.name || ""); + }); + } // Convert to model format and populate apps.forEach((app) => { if (app) diff --git a/Services/AppSearchService.qml b/Services/AppSearchService.qml index e53f2710..417fb7f1 100644 --- a/Services/AppSearchService.qml +++ b/Services/AppSearchService.qml @@ -55,7 +55,33 @@ Singleton { scoreFn: r => { var nameScore = r[0] ? r[0].score : 0 var commentScore = r[1] ? r[1].score : 0 - return nameScore > 0 ? nameScore * 0.9 + commentScore * 0.1 : commentScore * 0.5 + var appName = r.obj.entry.name || "" + var finalScore = 0 + + if (nameScore > 0) { + var queryLower = query.toLowerCase() + var nameLower = appName.toLowerCase() + + if (nameLower === queryLower) { + finalScore = nameScore * 100 + } + else if (nameLower.startsWith(queryLower)) { + finalScore = nameScore * 50 + } + else if (nameLower.includes(" " + queryLower) || nameLower.includes(queryLower + " ") || nameLower.endsWith(" " + queryLower)) { + finalScore = nameScore * 25 + } + else if (nameLower.includes(queryLower)) { + finalScore = nameScore * 10 + } + else { + finalScore = nameScore * 2 + commentScore * 0.1 + } + } else { + finalScore = commentScore * 0.1 + } + + return finalScore }, limit: 50 })