|
|
@@ -42,7 +42,7 @@ static fuzzysearch::Database<plugin::Model*> modelDb; |
|
|
|
static bool modelDbInitialized = false; |
|
|
|
|
|
|
|
|
|
|
|
static void modelDbInit() { |
|
|
|
static void fuzzySearchInit() { |
|
|
|
if (modelDbInitialized) |
|
|
|
return; |
|
|
|
modelDb.setWeights({1.f, 1.f, 0.1f, 1.f, 0.5f, 0.5f}); |
|
|
@@ -447,7 +447,9 @@ struct ModuleBrowser : widget::OpaqueWidget { |
|
|
|
std::string brand; |
|
|
|
std::set<int> tagIds = {}; |
|
|
|
|
|
|
|
// Caches and temporary state |
|
|
|
std::map<plugin::Model*, float> prefilteredModelScores; |
|
|
|
std::map<plugin::Model*, int> modelOrders; |
|
|
|
|
|
|
|
ModuleBrowser() { |
|
|
|
const float margin = 10; |
|
|
@@ -523,12 +525,14 @@ struct ModuleBrowser : widget::OpaqueWidget { |
|
|
|
|
|
|
|
void resetModelBoxes() { |
|
|
|
modelContainer->clearChildren(); |
|
|
|
modelOrders.clear(); |
|
|
|
// Iterate plugins |
|
|
|
// for (int i = 0; i < 100; i++) |
|
|
|
for (plugin::Plugin* plugin : plugin::plugins) { |
|
|
|
// Get module slugs from module whitelist |
|
|
|
const auto& pluginIt = settings::moduleWhitelist.find(plugin->slug); |
|
|
|
// Iterate models in plugin |
|
|
|
int modelIndex = 0; |
|
|
|
for (plugin::Model* model : plugin->models) { |
|
|
|
// Don't show module if plugin whitelist exists but the module is not in it. |
|
|
|
if (pluginIt != settings::moduleWhitelist.end()) { |
|
|
@@ -541,6 +545,9 @@ struct ModuleBrowser : widget::OpaqueWidget { |
|
|
|
ModelBox* modelBox = new ModelBox; |
|
|
|
modelBox->setModel(model); |
|
|
|
modelContainer->addChild(modelBox); |
|
|
|
|
|
|
|
modelOrders[model] = modelIndex; |
|
|
|
modelIndex++; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@@ -633,36 +640,42 @@ struct ModuleBrowser : widget::OpaqueWidget { |
|
|
|
|
|
|
|
// Sort ModelBoxes |
|
|
|
if (settings::moduleBrowserSort == settings::MODULE_BROWSER_SORT_UPDATED) { |
|
|
|
sortModels([](ModelBox* m) { |
|
|
|
sortModels([this](ModelBox* m) { |
|
|
|
plugin::Plugin* p = m->model->plugin; |
|
|
|
return std::make_tuple(-p->modifiedTimestamp, p->brand, m->model->name); |
|
|
|
int modelOrder = get(modelOrders, m->model, 0); |
|
|
|
return std::make_tuple(-p->modifiedTimestamp, p->brand, p->name, modelOrder); |
|
|
|
}); |
|
|
|
} |
|
|
|
else if (settings::moduleBrowserSort == settings::MODULE_BROWSER_SORT_LAST_USED) { |
|
|
|
sortModels([](ModelBox* m) { |
|
|
|
sortModels([this](ModelBox* m) { |
|
|
|
plugin::Plugin* p = m->model->plugin; |
|
|
|
const settings::ModuleUsage* mu = settings::getModuleUsage(p->slug, m->model->slug); |
|
|
|
double lastTime = mu ? mu->lastTime : -INFINITY; |
|
|
|
return std::make_tuple(-lastTime, -p->modifiedTimestamp, p->brand); |
|
|
|
int modelOrder = get(modelOrders, m->model, 0); |
|
|
|
return std::make_tuple(-lastTime, -p->modifiedTimestamp, p->brand, p->name, modelOrder); |
|
|
|
}); |
|
|
|
} |
|
|
|
else if (settings::moduleBrowserSort == settings::MODULE_BROWSER_SORT_MOST_USED) { |
|
|
|
sortModels([](ModelBox* m) { |
|
|
|
sortModels([this](ModelBox* m) { |
|
|
|
plugin::Plugin* p = m->model->plugin; |
|
|
|
const settings::ModuleUsage* mu = settings::getModuleUsage(p->slug, m->model->slug); |
|
|
|
int count = mu ? mu->count : 0; |
|
|
|
double lastTime = mu ? mu->lastTime : -INFINITY; |
|
|
|
return std::make_tuple(-count, -lastTime, -p->modifiedTimestamp, p->brand); |
|
|
|
int modelOrder = get(modelOrders, m->model, 0); |
|
|
|
return std::make_tuple(-count, -lastTime, -p->modifiedTimestamp, p->brand, p->name, modelOrder); |
|
|
|
}); |
|
|
|
} |
|
|
|
else if (settings::moduleBrowserSort == settings::MODULE_BROWSER_SORT_BRAND) { |
|
|
|
sortModels([](ModelBox* m) { |
|
|
|
return std::make_tuple(m->model->plugin->brand, m->model->name); |
|
|
|
sortModels([this](ModelBox* m) { |
|
|
|
plugin::Plugin* p = m->model->plugin; |
|
|
|
int modelOrder = get(modelOrders, m->model, 0); |
|
|
|
return std::make_tuple(p->brand, p->name, modelOrder); |
|
|
|
}); |
|
|
|
} |
|
|
|
else if (settings::moduleBrowserSort == settings::MODULE_BROWSER_SORT_NAME) { |
|
|
|
sortModels([](ModelBox* m) { |
|
|
|
return std::make_tuple(m->model->name, m->model->plugin->brand); |
|
|
|
plugin::Plugin* p = m->model->plugin; |
|
|
|
return std::make_tuple(m->model->name, p->brand); |
|
|
|
}); |
|
|
|
} |
|
|
|
else if (settings::moduleBrowserSort == settings::MODULE_BROWSER_SORT_RANDOM) { |
|
|
@@ -678,7 +691,7 @@ struct ModuleBrowser : widget::OpaqueWidget { |
|
|
|
} |
|
|
|
else { |
|
|
|
// Lazily initialize search database |
|
|
|
modelDbInit(); |
|
|
|
fuzzySearchInit(); |
|
|
|
// Score results against search query |
|
|
|
auto results = modelDb.search(search); |
|
|
|
// DEBUG("============="); |
|
|
|