!7 module ServerModuleSearch > DynQuickSearch { Set recommendedModules; start { dm_snippetsDB(); doEvery(5.0, 3600.0, r { setField(recommendedModules := asSet(map psI(collect('moduleID, stefansOS_parseRecommendedModulesList(mL("Recommended Module")))))); }); } afterVisualize { listPopupMenuThreaded(list, "Edit", voidfunc(S s) enter { dm_openSnippetInEditor(beforeSpace(s)); }, "Make New", voidfunc(S s) enter { dm_addDynamicModuleDialog2(beforeSpace(s), false); dm_hideQuickSearchModules(); }, "---", "Send to machine...", voidfunc(S s) enter { dm_sendModuleToOtherMachineDialog(beforeSpace(s)) }); onDoubleClickOrEnterThreaded(list, voidfunc(fS s) enter { dm_addDynamicModuleDialog2(beforeSpace(s), true); dm_hideQuickSearchModules(); }); } L calc_impl() { L snippets = dm_dynModulesOnServer(); // L snippets = sortSnippets(snippets); // TODO: don't do this every time ret scoredSearch_eachTerm(query, map(snippets, func(fO snippet) -> S { fsI(getLong(snippet, 'snippetID)) + " - " + _get(snippet, 'title) })); } L sortSnippets(L snippets) { ret sortByCalculatedFieldDesc(snippets, func(O snippet) -> Int { long id = getLong(snippet, 'snippetID); if (contains(recommendedModules, id)) ret 1; S title = getString(snippet, 'title); ret contains(title, "dev.") ? -1 : 0; }); } }