1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-06-08 04:09:15 -04:00

fix(Spotlight): Update the new clipboard/settings merge w/cache & debouced refresh

This commit is contained in:
purian23
2026-05-19 01:39:16 -04:00
parent 81a1bb1cd7
commit 4845299cc2
4 changed files with 93 additions and 24 deletions
+2 -4
View File
@@ -296,9 +296,8 @@ Singleton {
function getBuiltInLauncherItems(pluginId, query) {
if (pluginId === "dms_clipboard_search") {
ClipboardService.ensureLauncherHistory();
const trimmed = (query || "").toString().trim();
const entries = trimmed.length === 0 ? ClipboardService.getRecentLauncherEntries(20) : ClipboardService.getLauncherEntries(trimmed, 20, 1);
const entries = ClipboardService.getCachedLauncherSearchEntries(trimmed, 20);
return entries.map(entry => ({
type: "clipboard",
data: entry
@@ -308,8 +307,7 @@ Singleton {
if (pluginId !== "dms_settings_search")
return [];
SettingsSearchService.search(query);
const results = SettingsSearchService.results;
const results = SettingsSearchService.searchForLauncher(query);
const items = [];
for (let i = 0; i < results.length; i++) {
const r = results[i];
+62
View File
@@ -27,9 +27,14 @@ Singleton {
property bool keyboardNavigationActive: false
property int refCount: 0
property real _launcherLastRefresh: 0
property bool _launcherCacheValid: false
property string _launcherCachedQuery: ""
property var _launcherCachedEntries: []
property int _launcherSearchSeq: 0
signal historyCopied
signal historyCleared
signal launcherSearchReady(string query)
Process {
id: wtypeProcess
@@ -103,6 +108,63 @@ Singleton {
}
}
function requestLauncherSearch(query, limit) {
if (!clipboardAvailable) {
return;
}
const trimmed = (query || "").toString().trim();
const maxItems = limit > 0 ? limit : 20;
if (_launcherCacheValid && _launcherCachedQuery === trimmed) {
return;
}
_launcherSearchSeq++;
const seq = _launcherSearchSeq;
DMSService.sendRequest("clipboard.search", {
"query": trimmed,
"limit": maxItems
}, function (response) {
if (seq !== _launcherSearchSeq) {
return;
}
if (response.error) {
log.warn("Launcher clipboard search failed:", response.error);
_launcherCacheValid = true;
_launcherCachedQuery = trimmed;
_launcherCachedEntries = [];
launcherSearchReady(trimmed);
return;
}
const result = response.result || {};
_launcherCacheValid = true;
_launcherCachedQuery = trimmed;
_launcherCachedEntries = result.entries || [];
launcherSearchReady(trimmed);
});
}
function getCachedLauncherSearchEntries(query, limit) {
if (!clipboardAvailable) {
return [];
}
const trimmed = (query || "").toString().trim();
const maxItems = limit > 0 ? limit : 20;
if (!_launcherCacheValid || _launcherCachedQuery !== trimmed) {
requestLauncherSearch(trimmed, maxItems);
return [];
}
return _launcherCachedEntries.slice(0, maxItems);
}
function invalidateLauncherSearchCache() {
_launcherCacheValid = false;
_launcherCachedQuery = "";
_launcherCachedEntries = [];
_launcherSearchSeq++;
}
function getLauncherEntries(query, limit, minLength) {
if (!clipboardAvailable) {
return [];
+18 -7
View File
@@ -159,17 +159,15 @@ Singleton {
_translatedCache = cache;
}
function search(text) {
query = text;
if (!text) {
results = [];
return;
}
function _searchEntries(text, maxResults) {
if (!text)
return [];
var queryLower = text.toLowerCase().trim();
var queryWords = queryLower.split(/\s+/).filter(w => w.length > 0);
var scored = [];
var cache = _translatedCache;
var limit = maxResults > 0 ? maxResults : 15;
for (var i = 0; i < cache.length; i++) {
var entry = cache[i];
@@ -234,7 +232,20 @@ Singleton {
}
scored.sort((a, b) => b.score - a.score);
results = scored.slice(0, 15).map(s => s.item);
return scored.slice(0, limit).map(s => s.item);
}
function searchForLauncher(text) {
return _searchEntries(text, 15);
}
function search(text) {
query = text;
if (!text) {
results = [];
return;
}
results = _searchEntries(text, 15);
}
function clear() {