forked from openkylin/ukui-search
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")};
|
||||
m_actionInfo << open;
|
||||
m_pool.setMaxThreadCount(1);
|
||||
m_pool.setExpiryTimeout(1000);
|
||||
xmlElement();
|
||||
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) {
|
||||
QStringList regmatch = *i;
|
||||
QString key = i.key();
|
||||
for (int t = 0; t < regmatch.size(); t++) {
|
||||
QString str = regmatch.at(t);
|
||||
QString path = "";
|
||||
//直接匹配
|
||||
if (str.contains(keyword)) {
|
||||
resultInfo.name = ql.language() == QLocale::Chinese ? str : m_englishSearchList[key].at(t);
|
||||
if (resultName.contains(resultInfo.name)) {
|
||||
continue;
|
||||
}
|
||||
resultName.append(resultInfo.name);
|
||||
str = key + "/" + str;
|
||||
resultInfo.icon = FileUtils::getSettingIcon(str, true);
|
||||
resultInfo.actionKey = str;
|
||||
path = key + "/" + str;
|
||||
resultInfo.icon = FileUtils::getSettingIcon(path, true);
|
||||
resultInfo.actionKey = path;
|
||||
searchResult->enqueue(resultInfo);
|
||||
continue;
|
||||
}
|
||||
//转拼音(支持模糊)
|
||||
pinyinlist = FileUtils::findMultiToneWords(str);
|
||||
for (int i = 0; i < pinyinlist.size() / 2; i++) {
|
||||
str = regmatch.at(t);
|
||||
//首字母匹配
|
||||
QString shouzimu = pinyinlist.at(2 * i + 1); // 中文转首字母
|
||||
if (shouzimu.contains(keyword, Qt::CaseInsensitive)) {
|
||||
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;
|
||||
}
|
||||
resultName.append(resultInfo.name);
|
||||
str = key + "/" + str;
|
||||
resultInfo.icon = FileUtils::getSettingIcon(str, true);
|
||||
resultInfo.actionKey = str;
|
||||
path = key + "/" + str;
|
||||
resultInfo.icon = FileUtils::getSettingIcon(path, true);
|
||||
resultInfo.actionKey = path;
|
||||
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 ? str : m_englishSearchList[key].at(t);
|
||||
|
@ -146,18 +230,20 @@ void Zeeker::SettingsSearchPlugin::KeywordSearch(QString keyword, DataQueue<Resu
|
|||
continue;
|
||||
}
|
||||
resultName.append(resultInfo.name);
|
||||
str = key + "/" + str;
|
||||
resultInfo.icon = FileUtils::getSettingIcon(str, true);
|
||||
resultInfo.actionKey = str;
|
||||
path = key + "/" + str;
|
||||
resultInfo.icon = FileUtils::getSettingIcon(path, true);
|
||||
resultInfo.actionKey = path;
|
||||
searchResult->enqueue(resultInfo);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//匹配英文列表(二级菜单)
|
||||
for (auto i = m_englishSearchList.constBegin(); i != m_englishSearchList.constEnd(); ++i) {
|
||||
QStringList regmatch = *i;
|
||||
QString key = i.key();
|
||||
QString path = "";
|
||||
for (int t = 0; t < regmatch.size(); t++) {
|
||||
QString str = regmatch.at(t);
|
||||
if (str.contains(keyword, Qt::CaseInsensitive)) {
|
||||
|
@ -166,82 +252,9 @@ void Zeeker::SettingsSearchPlugin::KeywordSearch(QString keyword, DataQueue<Resu
|
|||
continue;
|
||||
}
|
||||
resultName.append(resultInfo.name);
|
||||
str = key + "/" + str;
|
||||
resultInfo.icon = FileUtils::getSettingIcon(str, true);
|
||||
resultInfo.actionKey = str;
|
||||
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;
|
||||
path = key + "/" + str;
|
||||
resultInfo.icon = FileUtils::getSettingIcon(path, true);
|
||||
resultInfo.actionKey = path;
|
||||
searchResult->enqueue(resultInfo);
|
||||
}
|
||||
}
|
||||
|
@ -314,12 +327,12 @@ void SettingsSearchPlugin::xmlElement() {
|
|||
|
||||
QString chineseIndex;
|
||||
QString englishIndex;
|
||||
QStringList chineSearchResult;
|
||||
QStringList chineseSearchResult;
|
||||
QStringList englishSearchResult;
|
||||
while (!node.isNull()) {
|
||||
QDomElement element = node.toElement();
|
||||
QString key = element.attribute("name");
|
||||
chineSearchResult = m_chineseSearchList.value(key);
|
||||
chineseSearchResult = m_chineseSearchList.value(key);
|
||||
englishSearchResult = m_englishSearchList.value(key);
|
||||
QDomNodeList list = element.childNodes();
|
||||
for (int i = 0; i < list.count(); ++i) {
|
||||
|
@ -347,10 +360,10 @@ void SettingsSearchPlugin::xmlElement() {
|
|||
if (chineseIndex.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
if (chineSearchResult.contains(chineseIndex)) {
|
||||
if (chineseSearchResult.contains(chineseIndex)) {
|
||||
continue;
|
||||
} else {
|
||||
chineSearchResult.append(chineseIndex);
|
||||
chineseSearchResult.append(chineseIndex);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -359,11 +372,15 @@ void SettingsSearchPlugin::xmlElement() {
|
|||
if (englishIndex.isEmpty()) {
|
||||
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);
|
||||
node = node.nextSibling();
|
||||
}
|
||||
|
|
|
@ -58,7 +58,6 @@ private:
|
|||
|
||||
bool m_enable = true;
|
||||
QList<SettingsSearchPlugin::Actioninfo> m_actionInfo;
|
||||
QThreadPool m_pool;
|
||||
};
|
||||
}
|
||||
#endif // SETTINGSSEARCHPLUGIN_H
|
||||
|
|
Loading…
Reference in New Issue