perf(settingsearch):修改设置搜索的匹配策略.
This commit is contained in:
parent
ea2bbbdfb5
commit
524a43787b
|
@ -382,6 +382,7 @@ void SettingsMatch::startSearch(QString &keyword, size_t uniqueSymbol, DataQueue
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//根据searchMap的对应关系匹配dataMap中的数据信息
|
//根据searchMap的对应关系匹配dataMap中的数据信息
|
||||||
|
QStringList thirdLvKeys;
|
||||||
for (auto i = m_searchMap.constBegin(); i != m_searchMap.constEnd(); ++i) {
|
for (auto i = m_searchMap.constBegin(); i != m_searchMap.constEnd(); ++i) {
|
||||||
QMap<QString, QStringList> regMatch = *i;
|
QMap<QString, QStringList> regMatch = *i;
|
||||||
QString moduleName = i.key();
|
QString moduleName = i.key();
|
||||||
|
@ -389,14 +390,33 @@ void SettingsMatch::startSearch(QString &keyword, size_t uniqueSymbol, DataQueue
|
||||||
//匹配二级菜单信息
|
//匹配二级菜单信息
|
||||||
QString pluginName = t.key();
|
QString pluginName = t.key();
|
||||||
QString keyOfSecondLv =QString("%1/%2").arg(moduleName, pluginName);
|
QString keyOfSecondLv =QString("%1/%2").arg(moduleName, pluginName);
|
||||||
matchDataMap(keyOfSecondLv, keyword, uniqueSymbol, searchResult);
|
bool isSecondLv = matchDataMap(keyOfSecondLv, keyword);
|
||||||
|
|
||||||
//匹配对应三级菜单信息
|
//匹配对应三级菜单信息
|
||||||
for (QString funcName: t.value()) {
|
for (const QString& funcName: t.value()) {
|
||||||
QString keyOfThirdLv = keyOfSecondLv + QString("/%1").arg(funcName);
|
QString keyOfThirdLv = keyOfSecondLv + QString("/%1").arg(funcName);
|
||||||
matchDataMap(keyOfThirdLv, keyword, uniqueSymbol, searchResult);
|
if (isSecondLv) {
|
||||||
|
SearchPluginIface::ResultInfo resultInfo;
|
||||||
|
resultInfo.type = 0;
|
||||||
|
createResultInfo(resultInfo, m_dataMap.value(keyOfThirdLv), keyOfThirdLv);
|
||||||
|
if (!enqueueResultInfo(resultInfo, uniqueSymbol, searchResult)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else if (matchDataMap(keyOfThirdLv, keyword)) {
|
||||||
|
thirdLvKeys.append(keyOfThirdLv);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//单独处理三级
|
||||||
|
for (const QString& key : thirdLvKeys) {
|
||||||
|
SearchPluginIface::ResultInfo resultInfo;
|
||||||
|
resultInfo.type = 0;
|
||||||
|
createResultInfo(resultInfo, m_dataMap.value(key), key);
|
||||||
|
if (!enqueueResultInfo(resultInfo, uniqueSymbol, searchResult)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsMatch::addItem(QVariantMap replyMap)
|
void SettingsMatch::addItem(QVariantMap replyMap)
|
||||||
|
@ -409,8 +429,9 @@ void SettingsMatch::removeItem(QVariantMap replyMap)
|
||||||
this->parsingArgsOfDbus(replyMap, HandleType::Delete);
|
this->parsingArgsOfDbus(replyMap, HandleType::Delete);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsMatch::matchDataMap(QString &key, QString &keyword, size_t uniqueSymbol, DataQueue<SearchPluginIface::ResultInfo> *searchResult)
|
bool SettingsMatch::matchDataMap(QString &key, QString &keyword)
|
||||||
{
|
{
|
||||||
|
bool res(false);
|
||||||
SearchPluginIface::ResultInfo resultInfo;
|
SearchPluginIface::ResultInfo resultInfo;
|
||||||
resultInfo.type = 0;
|
resultInfo.type = 0;
|
||||||
for (int counter = 0; counter < m_dataMap.value(key).size(); ++counter) {
|
for (int counter = 0; counter < m_dataMap.value(key).size(); ++counter) {
|
||||||
|
@ -420,19 +441,11 @@ void SettingsMatch::matchDataMap(QString &key, QString &keyword, size_t uniqueSy
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (data.contains(keyword, Qt::CaseInsensitive)) {
|
if (data.contains(keyword, Qt::CaseInsensitive)) {
|
||||||
createResultInfo(resultInfo, m_dataMap.value(key), key);
|
res = true;
|
||||||
//判断是否为同一次搜索
|
break;
|
||||||
SettingsSearchPlugin::m_mutex.lock();
|
|
||||||
if (uniqueSymbol == SettingsSearchPlugin::m_uniqueSymbolForSettings) {
|
|
||||||
searchResult->enqueue(resultInfo);
|
|
||||||
SettingsSearchPlugin::m_mutex.unlock();
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
SettingsSearchPlugin::m_mutex.unlock();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsMatch::createResultInfo(SearchPluginIface::ResultInfo &resultInfo, const QStringList &itemInfo, const QString &path)
|
void SettingsMatch::createResultInfo(SearchPluginIface::ResultInfo &resultInfo, const QStringList &itemInfo, const QString &path)
|
||||||
|
@ -448,3 +461,16 @@ void SettingsMatch::createResultInfo(SearchPluginIface::ResultInfo &resultInfo,
|
||||||
resultInfo.icon = FileUtils::getSettingIcon();
|
resultInfo.icon = FileUtils::getSettingIcon();
|
||||||
resultInfo.actionKey = path.section("/", 1, 1);
|
resultInfo.actionKey = path.section("/", 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SettingsMatch::enqueueResultInfo(SearchPluginIface::ResultInfo &resultInfo, size_t uniqueSymbol, DataQueue<SearchPluginIface::ResultInfo> *searchResult) {
|
||||||
|
bool res(false);
|
||||||
|
SettingsSearchPlugin::m_mutex.lock();
|
||||||
|
if (uniqueSymbol == SettingsSearchPlugin::m_uniqueSymbolForSettings) {
|
||||||
|
res = true;
|
||||||
|
searchResult->enqueue(resultInfo);
|
||||||
|
SettingsSearchPlugin::m_mutex.unlock();
|
||||||
|
} else {
|
||||||
|
SettingsSearchPlugin::m_mutex.unlock();
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
|
@ -109,8 +109,9 @@ private:
|
||||||
void matchNodes(QDomNode node);
|
void matchNodes(QDomNode node);
|
||||||
|
|
||||||
//search
|
//search
|
||||||
void matchDataMap(QString &key, QString &keyword, size_t uniqueSymbol, DataQueue<SearchPluginIface::ResultInfo> *searchResult);
|
bool matchDataMap(QString &key, QString &keyword);
|
||||||
void createResultInfo(SearchPluginIface::ResultInfo &resultInfo, const QStringList &itemInfo, const QString &path);
|
void createResultInfo(SearchPluginIface::ResultInfo &resultInfo, const QStringList &itemInfo, const QString &path);
|
||||||
|
bool enqueueResultInfo(SearchPluginIface::ResultInfo &resultInfo, size_t uniqueSymbol, DataQueue<SearchPluginIface::ResultInfo> *searchResult);
|
||||||
QMap<QString, QMap<QString, QStringList>> m_searchMap;
|
QMap<QString, QMap<QString, QStringList>> m_searchMap;
|
||||||
QMap<QString, QStringList> m_dataMap;
|
QMap<QString, QStringList> m_dataMap;
|
||||||
QDBusInterface *m_interface = nullptr;
|
QDBusInterface *m_interface = nullptr;
|
||||||
|
|
Loading…
Reference in New Issue