Fix the problem that the name of the setting item was displayed incorrectly and problem that the duplicates are not removed from the English list.
This commit is contained in:
parent
a7a540f141
commit
9b745b0b60
|
@ -10,8 +10,6 @@ SettingsSearchPlugin::SettingsSearchPlugin(QObject *parent) : QObject(parent)
|
||||||
{
|
{
|
||||||
SearchPluginIface::Actioninfo open { 0, tr("Open")};
|
SearchPluginIface::Actioninfo open { 0, tr("Open")};
|
||||||
m_actionInfo << open;
|
m_actionInfo << open;
|
||||||
m_pool.setMaxThreadCount(1);
|
|
||||||
m_pool.setExpiryTimeout(1000);
|
|
||||||
xmlElement();
|
xmlElement();
|
||||||
initDetailPage();
|
initDetailPage();
|
||||||
}
|
}
|
||||||
|
@ -104,26 +102,111 @@ void Zeeker::SettingsSearchPlugin::KeywordSearch(QString keyword, DataQueue<Resu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
//匹配中英混合列表(一级菜单)
|
||||||
|
for (auto i = m_mixSearchList.constBegin(); i != m_mixSearchList.constEnd(); ++i) {
|
||||||
|
QMap<QString, QString> regmatch = *i;
|
||||||
|
QString key = i.key();
|
||||||
|
for (auto t = regmatch.begin(); t != regmatch.end(); ++t) {
|
||||||
|
QString englishStr = t.value();
|
||||||
|
QString chineseStr = t.key();
|
||||||
|
QString englishPath = "";
|
||||||
|
QString chinesePath = "";
|
||||||
|
//转拼音(支持模糊)
|
||||||
|
QStringList pinyinlist = FileUtils::findMultiToneWords(chineseStr);
|
||||||
|
for (int i = 0; i < pinyinlist.size() / 2; i++) {
|
||||||
|
//首字母
|
||||||
|
QString shouzimu = pinyinlist.at(2 * i + 1); // 中文转首字母
|
||||||
|
if (shouzimu.contains(keyword, Qt::CaseInsensitive)) {
|
||||||
|
resultInfo.name = ql.language() == QLocale::Chinese ? chineseStr : englishStr;
|
||||||
|
if (resultName.contains(resultInfo.name)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
resultName.append(resultInfo.name);
|
||||||
|
if(ql.language() == QLocale::English) {
|
||||||
|
englishPath = key + "/" + englishStr;
|
||||||
|
resultInfo.icon = FileUtils::getSettingIcon(englishPath, true);
|
||||||
|
resultInfo.actionKey = englishPath;
|
||||||
|
} else if (ql.language() == QLocale::Chinese) {
|
||||||
|
chinesePath = key + "/" + chineseStr;
|
||||||
|
resultInfo.icon = FileUtils::getSettingIcon(chinesePath, true);
|
||||||
|
resultInfo.actionKey = chinesePath;
|
||||||
|
}
|
||||||
|
searchResult->enqueue(resultInfo);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (keyword.size() < 2)
|
||||||
|
break;
|
||||||
|
//拼音
|
||||||
|
QString pinyin = pinyinlist.at(2 * i); // 中文转拼音
|
||||||
|
if (pinyin.contains(keyword, Qt::CaseInsensitive)) {
|
||||||
|
resultInfo.name = ql.language() == QLocale::Chinese ? chineseStr : englishStr;
|
||||||
|
if (resultName.contains(resultInfo.name)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
resultName.append(resultInfo.name);
|
||||||
|
if(ql.language() == QLocale::English) {
|
||||||
|
englishPath = key + "/" + englishStr;
|
||||||
|
resultInfo.icon = FileUtils::getSettingIcon(englishPath, true);
|
||||||
|
resultInfo.actionKey = englishPath;
|
||||||
|
} else if (ql.language() == QLocale::Chinese) {
|
||||||
|
chinesePath = key + "/" + chineseStr;
|
||||||
|
resultInfo.icon = FileUtils::getSettingIcon(chinesePath, true);
|
||||||
|
resultInfo.actionKey = chinesePath;
|
||||||
|
}
|
||||||
|
searchResult->enqueue(resultInfo);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//中文名
|
||||||
|
if (chineseStr.contains(keyword, Qt::CaseInsensitive)) {
|
||||||
|
resultInfo.name = ql.language() == QLocale::Chinese ? chineseStr : englishStr;
|
||||||
|
if (resultName.contains(resultInfo.name)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
resultName.append(resultInfo.name);
|
||||||
|
chinesePath = key + "/" + chineseStr;
|
||||||
|
resultInfo.icon = FileUtils::getSettingIcon(chinesePath, true);
|
||||||
|
resultInfo.actionKey = chinesePath;
|
||||||
|
searchResult->enqueue(resultInfo);
|
||||||
|
}
|
||||||
|
//英文名
|
||||||
|
if (englishStr.contains(keyword, Qt::CaseInsensitive)) {
|
||||||
|
resultInfo.name = ql.language() == QLocale::Chinese ? chineseStr : englishStr;
|
||||||
|
if (resultName.contains(resultInfo.name)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
resultName.append(resultInfo.name);
|
||||||
|
englishPath = key + "/" + englishStr;
|
||||||
|
resultInfo.icon = FileUtils::getSettingIcon(englishPath, true);
|
||||||
|
resultInfo.actionKey = englishPath;
|
||||||
|
searchResult->enqueue(resultInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//匹配中文列表(二级菜单)
|
||||||
for (auto i = m_chineseSearchList.constBegin(); i != m_chineseSearchList.constEnd(); ++i) {
|
for (auto i = m_chineseSearchList.constBegin(); i != m_chineseSearchList.constEnd(); ++i) {
|
||||||
QStringList regmatch = *i;
|
QStringList regmatch = *i;
|
||||||
QString key = i.key();
|
QString key = i.key();
|
||||||
for (int t = 0; t < regmatch.size(); t++) {
|
for (int t = 0; t < regmatch.size(); t++) {
|
||||||
QString str = regmatch.at(t);
|
QString str = regmatch.at(t);
|
||||||
|
QString path = "";
|
||||||
|
//直接匹配
|
||||||
if (str.contains(keyword)) {
|
if (str.contains(keyword)) {
|
||||||
resultInfo.name = ql.language() == QLocale::Chinese ? str : m_englishSearchList[key].at(t);
|
resultInfo.name = ql.language() == QLocale::Chinese ? str : m_englishSearchList[key].at(t);
|
||||||
if (resultName.contains(resultInfo.name)) {
|
if (resultName.contains(resultInfo.name)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
resultName.append(resultInfo.name);
|
resultName.append(resultInfo.name);
|
||||||
str = key + "/" + str;
|
path = key + "/" + str;
|
||||||
resultInfo.icon = FileUtils::getSettingIcon(str, true);
|
resultInfo.icon = FileUtils::getSettingIcon(path, true);
|
||||||
resultInfo.actionKey = str;
|
resultInfo.actionKey = path;
|
||||||
searchResult->enqueue(resultInfo);
|
searchResult->enqueue(resultInfo);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
//转拼音(支持模糊)
|
||||||
pinyinlist = FileUtils::findMultiToneWords(str);
|
pinyinlist = FileUtils::findMultiToneWords(str);
|
||||||
for (int i = 0; i < pinyinlist.size() / 2; i++) {
|
for (int i = 0; i < pinyinlist.size() / 2; i++) {
|
||||||
str = regmatch.at(t);
|
//首字母匹配
|
||||||
QString shouzimu = pinyinlist.at(2 * i + 1); // 中文转首字母
|
QString shouzimu = pinyinlist.at(2 * i + 1); // 中文转首字母
|
||||||
if (shouzimu.contains(keyword, Qt::CaseInsensitive)) {
|
if (shouzimu.contains(keyword, Qt::CaseInsensitive)) {
|
||||||
resultInfo.name = ql.language() == QLocale::Chinese ? str : m_englishSearchList[key].at(t);
|
resultInfo.name = ql.language() == QLocale::Chinese ? str : m_englishSearchList[key].at(t);
|
||||||
|
@ -131,14 +214,15 @@ void Zeeker::SettingsSearchPlugin::KeywordSearch(QString keyword, DataQueue<Resu
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
resultName.append(resultInfo.name);
|
resultName.append(resultInfo.name);
|
||||||
str = key + "/" + str;
|
path = key + "/" + str;
|
||||||
resultInfo.icon = FileUtils::getSettingIcon(str, true);
|
resultInfo.icon = FileUtils::getSettingIcon(path, true);
|
||||||
resultInfo.actionKey = str;
|
resultInfo.actionKey = path;
|
||||||
searchResult->enqueue(resultInfo);
|
searchResult->enqueue(resultInfo);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (keyword.size() < 2)
|
if (keyword.size() < 2)
|
||||||
break;
|
break;
|
||||||
|
//拼音匹配
|
||||||
QString pinyin = pinyinlist.at(2 * i); // 中文转拼音
|
QString pinyin = pinyinlist.at(2 * i); // 中文转拼音
|
||||||
if (pinyin.contains(keyword, Qt::CaseInsensitive)) {
|
if (pinyin.contains(keyword, Qt::CaseInsensitive)) {
|
||||||
resultInfo.name = ql.language() == QLocale::Chinese ? str : m_englishSearchList[key].at(t);
|
resultInfo.name = ql.language() == QLocale::Chinese ? str : m_englishSearchList[key].at(t);
|
||||||
|
@ -146,18 +230,20 @@ void Zeeker::SettingsSearchPlugin::KeywordSearch(QString keyword, DataQueue<Resu
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
resultName.append(resultInfo.name);
|
resultName.append(resultInfo.name);
|
||||||
str = key + "/" + str;
|
path = key + "/" + str;
|
||||||
resultInfo.icon = FileUtils::getSettingIcon(str, true);
|
resultInfo.icon = FileUtils::getSettingIcon(path, true);
|
||||||
resultInfo.actionKey = str;
|
resultInfo.actionKey = path;
|
||||||
searchResult->enqueue(resultInfo);
|
searchResult->enqueue(resultInfo);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//匹配英文列表(二级菜单)
|
||||||
for (auto i = m_englishSearchList.constBegin(); i != m_englishSearchList.constEnd(); ++i) {
|
for (auto i = m_englishSearchList.constBegin(); i != m_englishSearchList.constEnd(); ++i) {
|
||||||
QStringList regmatch = *i;
|
QStringList regmatch = *i;
|
||||||
QString key = i.key();
|
QString key = i.key();
|
||||||
|
QString path = "";
|
||||||
for (int t = 0; t < regmatch.size(); t++) {
|
for (int t = 0; t < regmatch.size(); t++) {
|
||||||
QString str = regmatch.at(t);
|
QString str = regmatch.at(t);
|
||||||
if (str.contains(keyword, Qt::CaseInsensitive)) {
|
if (str.contains(keyword, Qt::CaseInsensitive)) {
|
||||||
|
@ -166,82 +252,9 @@ void Zeeker::SettingsSearchPlugin::KeywordSearch(QString keyword, DataQueue<Resu
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
resultName.append(resultInfo.name);
|
resultName.append(resultInfo.name);
|
||||||
str = key + "/" + str;
|
path = key + "/" + str;
|
||||||
resultInfo.icon = FileUtils::getSettingIcon(str, true);
|
resultInfo.icon = FileUtils::getSettingIcon(path, true);
|
||||||
resultInfo.actionKey = str;
|
resultInfo.actionKey = path;
|
||||||
searchResult->enqueue(resultInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (auto i = m_mixSearchList.constBegin(); i != m_mixSearchList.constEnd(); ++i) {
|
|
||||||
QMap<QString, QString> regmatch = *i;
|
|
||||||
QString key = i.key();
|
|
||||||
for (auto t = regmatch.begin(); t != regmatch.end(); ++t) {
|
|
||||||
QString englishStr = t.value();
|
|
||||||
QString chineseStr = t.key();
|
|
||||||
QStringList pinyinlist = FileUtils::findMultiToneWords(chineseStr);
|
|
||||||
for (int i = 0; i < pinyinlist.size() / 2; i++) {
|
|
||||||
QString shouzimu = pinyinlist.at(2 * i + 1); // 中文转首字母
|
|
||||||
if (shouzimu.contains(keyword, Qt::CaseInsensitive)) {
|
|
||||||
resultInfo.name = ql.language() == QLocale::Chinese ? chineseStr : englishStr;
|
|
||||||
if (resultName.contains(resultInfo.name)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
resultName.append(resultInfo.name);
|
|
||||||
if(ql.language() == QLocale::English) {
|
|
||||||
englishStr = key + "/" + englishStr;
|
|
||||||
resultInfo.icon = FileUtils::getSettingIcon(englishStr, true);
|
|
||||||
resultInfo.actionKey = englishStr;
|
|
||||||
} else if (ql.language() == QLocale::Chinese) {
|
|
||||||
chineseStr = key + "/" + chineseStr;
|
|
||||||
resultInfo.icon = FileUtils::getSettingIcon(chineseStr, true);
|
|
||||||
resultInfo.actionKey = chineseStr;
|
|
||||||
}
|
|
||||||
searchResult->enqueue(resultInfo);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (keyword.size() < 2)
|
|
||||||
break;
|
|
||||||
QString pinyin = pinyinlist.at(2 * i); // 中文转拼音
|
|
||||||
if (pinyin.contains(keyword, Qt::CaseInsensitive)) {
|
|
||||||
resultInfo.name = ql.language() == QLocale::Chinese ? chineseStr : englishStr;
|
|
||||||
if (resultName.contains(resultInfo.name)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
resultName.append(resultInfo.name);
|
|
||||||
if(ql.language() == QLocale::English) {
|
|
||||||
englishStr = key + "/" + englishStr;
|
|
||||||
resultInfo.icon = FileUtils::getSettingIcon(englishStr, true);
|
|
||||||
resultInfo.actionKey = englishStr;
|
|
||||||
} else if (ql.language() == QLocale::Chinese) {
|
|
||||||
chineseStr = key + "/" + chineseStr;
|
|
||||||
resultInfo.icon = FileUtils::getSettingIcon(chineseStr, true);
|
|
||||||
resultInfo.actionKey = chineseStr;
|
|
||||||
}
|
|
||||||
searchResult->enqueue(resultInfo);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (chineseStr.contains(keyword, Qt::CaseInsensitive)) {
|
|
||||||
resultInfo.name = ql.language() == QLocale::Chinese ? chineseStr : englishStr;
|
|
||||||
if (resultName.contains(resultInfo.name)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
resultName.append(resultInfo.name);
|
|
||||||
chineseStr = key + "/" + chineseStr;
|
|
||||||
resultInfo.icon = FileUtils::getSettingIcon(chineseStr, true);
|
|
||||||
resultInfo.actionKey = chineseStr;
|
|
||||||
searchResult->enqueue(resultInfo);
|
|
||||||
}
|
|
||||||
if (englishStr.contains(keyword, Qt::CaseInsensitive)) {
|
|
||||||
resultInfo.name = ql.language() == QLocale::Chinese ? chineseStr : englishStr;
|
|
||||||
if (resultName.contains(resultInfo.name)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
resultName.append(resultInfo.name);
|
|
||||||
englishStr = key + "/" + englishStr;
|
|
||||||
resultInfo.icon = FileUtils::getSettingIcon(englishStr, true);
|
|
||||||
resultInfo.actionKey = englishStr;
|
|
||||||
searchResult->enqueue(resultInfo);
|
searchResult->enqueue(resultInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -314,12 +327,12 @@ void SettingsSearchPlugin::xmlElement() {
|
||||||
|
|
||||||
QString chineseIndex;
|
QString chineseIndex;
|
||||||
QString englishIndex;
|
QString englishIndex;
|
||||||
QStringList chineSearchResult;
|
QStringList chineseSearchResult;
|
||||||
QStringList englishSearchResult;
|
QStringList englishSearchResult;
|
||||||
while (!node.isNull()) {
|
while (!node.isNull()) {
|
||||||
QDomElement element = node.toElement();
|
QDomElement element = node.toElement();
|
||||||
QString key = element.attribute("name");
|
QString key = element.attribute("name");
|
||||||
chineSearchResult = m_chineseSearchList.value(key);
|
chineseSearchResult = m_chineseSearchList.value(key);
|
||||||
englishSearchResult = m_englishSearchList.value(key);
|
englishSearchResult = m_englishSearchList.value(key);
|
||||||
QDomNodeList list = element.childNodes();
|
QDomNodeList list = element.childNodes();
|
||||||
for (int i = 0; i < list.count(); ++i) {
|
for (int i = 0; i < list.count(); ++i) {
|
||||||
|
@ -347,10 +360,10 @@ void SettingsSearchPlugin::xmlElement() {
|
||||||
if (chineseIndex.isEmpty()) {
|
if (chineseIndex.isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (chineSearchResult.contains(chineseIndex)) {
|
if (chineseSearchResult.contains(chineseIndex)) {
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
chineSearchResult.append(chineseIndex);
|
chineseSearchResult.append(chineseIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -359,11 +372,15 @@ void SettingsSearchPlugin::xmlElement() {
|
||||||
if (englishIndex.isEmpty()) {
|
if (englishIndex.isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
englishSearchResult.append(englishIndex);
|
if (englishSearchResult.contains(englishIndex)) {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
englishSearchResult.append(englishIndex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_chineseSearchList.insert(key, chineSearchResult);
|
m_chineseSearchList.insert(key, chineseSearchResult);
|
||||||
m_englishSearchList.insert(key, englishSearchResult);
|
m_englishSearchList.insert(key, englishSearchResult);
|
||||||
node = node.nextSibling();
|
node = node.nextSibling();
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,7 +58,6 @@ private:
|
||||||
|
|
||||||
bool m_enable = true;
|
bool m_enable = true;
|
||||||
QList<SettingsSearchPlugin::Actioninfo> m_actionInfo;
|
QList<SettingsSearchPlugin::Actioninfo> m_actionInfo;
|
||||||
QThreadPool m_pool;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif // SETTINGSSEARCHPLUGIN_H
|
#endif // SETTINGSSEARCHPLUGIN_H
|
||||||
|
|
Loading…
Reference in New Issue