Warning: session_start(): open(/var/lib/php/sessions/sess_g4ci7kmnmhvj2ee8jsr424u8fh, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
srecord Result(S text, S moduleID, S moduleDesc, O[] params, double value) {}
module QuickSearchManager > DynQuickSearch {
transient S resultsQuery;
transient Map> resultsByModule = synchroMap();
transient L shownResults;
afterVisualize {
onDoubleClickOrEnter(list, r {
Result r = _get(shownResults, getSelectedIndex(list));
if (r == null) ret;
dm_hideQuickSearchModules();
O defaultAction = optPar(r.params, 'defaultAction);
callFInNewThread(defaultAction, r.text);
});
listPopupMenu(list, voidfunc(JPopupMenu menu, S item) {
final Result r = _get(shownResults, getSelectedIndex(list));
if (r == null) ret;
O[] params = optPar(r.params, 'popupItems);
for (int i = 0; i+1 < l(params); i += 2) {
if (isMenuSeparatorIndicator(params[i])) continue with --i;
fO action = params[i+1];
addMenuItem(menu, str(params[i]), r {
callFInNewThread(action, optPar(r.params, 'additionalInfo, r.text))
});
}
});
}
LS calc_impl() {
L results = concatLists(cloneValues(getResultsByModule()));
sortByFieldDesc_inPlace(results, 'value);
ret map(func(Result r) -> S { resultToText(r) }, shownResults = takeFirst(50, results));
}
S resultToText(Result r) {
ret "[" + r.moduleDesc + "] " + r.text;
}
// clear if query changed
Map> getResultsByModule() {
S input = dm_topInput();
synchronized(resultsByModule) {
if (neq(resultsQuery, input)) {
resultsQuery = input;
resultsByModule.clear();
}
ret resultsByModule;
}
}
// API
void setResultsForModule(S moduleID, S query, LS results) {
setResultsForModule(moduleID, null, query, results);
}
void setResultsForModule(fS moduleID, S _moduleDesc, S query, LS results, fO... _) {
fS moduleDesc = _moduleDesc != null ? _moduleDesc : dm_moduleName(moduleID);
if (neq(query, dm_topInput())) ret with print("Results for wrong query: " + query);
synchronized(resultsByModule) {
getResultsByModule().put(moduleID, map(results, func(S s) -> Result { Result(s, moduleID, moduleDesc, _, 0) }));
}
// show/update list
if (nempty(results))
doSearch(resultsQuery);
}
}