diff --git a/appmatch/app-match.cpp b/appmatch/app-match.cpp new file mode 100644 index 0000000..9a5aea8 --- /dev/null +++ b/appmatch/app-match.cpp @@ -0,0 +1,200 @@ +#include "app-match.h" +#include +#include "chinesecharacterstopinyin.h" +AppMatch::AppMatch(QObject *parent) : QObject(parent) +{ + this->getDesktopFilePath(); +} + +QStringList AppMatch::startMatchApp(QString input){ + m_soureText=input; + m_returnResult.clear(); + this->getAppName(); + m_returnResult=m_midResult; + m_midResult.clear(); + return m_returnResult; +} + +void AppMatch::getAllDesktopFilePath(QString path){ + + GKeyFileFlags flags=G_KEY_FILE_NONE; + GKeyFile* keyfile=g_key_file_new (); + + QDir dir(path); + if (!dir.exists()) { + return; + } + dir.setFilter(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot); + dir.setSorting(QDir::DirsFirst); + QFileInfoList list = dir.entryInfoList(); + list.removeAll(QFileInfo("/usr/share/applications/screensavers")); + if(list.size()< 1 ) { + return; + } + int i=0; + + //递归算法的核心部分 + do{ + QFileInfo fileInfo = list.at(i); + //如果是文件夹,递归 + bool isDir = fileInfo.isDir(); + if(isDir) { + getAllDesktopFilePath(fileInfo.filePath()); + } + else{ + //过滤后缀不是.desktop的文件 + QString filePathStr=fileInfo.filePath(); + if(!filePathStr.endsWith(".desktop")) + { + i++; + continue; + } + QByteArray fpbyte=filePathStr.toLocal8Bit(); + char* filepath=fpbyte.data(); + g_key_file_load_from_file(keyfile,filepath,flags,nullptr); + char* ret_1=g_key_file_get_locale_string(keyfile,"Desktop Entry","NoDisplay", nullptr, nullptr); + if(ret_1!=nullptr) + { + QString str=QString::fromLocal8Bit(ret_1); + if(str.contains("true")) + { + i++; + continue; + } + } + char* ret_2=g_key_file_get_locale_string(keyfile,"Desktop Entry","NotShowIn", nullptr, nullptr); + if(ret_2!=nullptr) + { + QString str=QString::fromLocal8Bit(ret_2); + if(str.contains("UKUI")) + { + i++; + continue; + } + } + //过滤LXQt、KDE + char* ret=g_key_file_get_locale_string(keyfile,"Desktop Entry","OnlyShowIn", nullptr, nullptr); + if(ret!=nullptr) + { + QString str=QString::fromLocal8Bit(ret); + if(str.contains("LXQt") || str.contains("KDE")) + { + i++; + continue; + } + } + //过滤中英文名为空的情况 + QLocale cn; + QString language=cn.languageToString(cn.language()); + if(QString::compare(language,"Chinese")==0) + { + char* nameCh=g_key_file_get_string(keyfile,"Desktop Entry","Name[zh_CN]", nullptr); + char* nameEn=g_key_file_get_string(keyfile,"Desktop Entry","Name", nullptr); + if(QString::fromLocal8Bit(nameCh).isEmpty() && QString::fromLocal8Bit(nameEn).isEmpty()) + { + i++; + continue; + } + } + else { + char* name=g_key_file_get_string(keyfile,"Desktop Entry","Name", nullptr); + if(QString::fromLocal8Bit(name).isEmpty()) + { + i++; + continue; + } + } + + m_filePathList.append(filePathStr); + } + i++; + + } while(i < list.size()); + + g_key_file_free(keyfile); +} + +void AppMatch::getDesktopFilePath() +{ + m_filePathList.clear(); + getAllDesktopFilePath("/usr/share/applications/"); + m_filePathList.removeAll("/usr/share/applications/software-properties-livepatch.desktop"); + m_filePathList.removeAll("/usr/share/applications/mate-color-select.desktop"); + m_filePathList.removeAll("/usr/share/applications/blueman-adapters.desktop"); + m_filePathList.removeAll("/usr/share/applications/blueman-manager.desktop"); + m_filePathList.removeAll("/usr/share/applications/mate-user-guide.desktop"); + m_filePathList.removeAll("/usr/share/applications/nm-connection-editor.desktop"); + m_filePathList.removeAll("/usr/share/applications/debian-uxterm.desktop"); + m_filePathList.removeAll("/usr/share/applications/debian-xterm.desktop"); + m_filePathList.removeAll("/usr/share/applications/im-config.desktop"); + m_filePathList.removeAll("/usr/share/applications/fcitx.desktop"); + m_filePathList.removeAll("/usr/share/applications/fcitx-configtool.desktop"); + m_filePathList.removeAll("/usr/share/applications/onboard-settings.desktop"); + m_filePathList.removeAll("/usr/share/applications/info.desktop"); + m_filePathList.removeAll("/usr/share/applications/ukui-power-preferences.desktop"); + m_filePathList.removeAll("/usr/share/applications/ukui-power-statistics.desktop"); + m_filePathList.removeAll("/usr/share/applications/software-properties-drivers.desktop"); + m_filePathList.removeAll("/usr/share/applications/software-properties-gtk.desktop"); + m_filePathList.removeAll("/usr/share/applications/gnome-session-properties.desktop"); + m_filePathList.removeAll("/usr/share/applications/org.gnome.font-viewer.desktop"); + m_filePathList.removeAll("/usr/share/applications/xdiagnose.desktop"); + m_filePathList.removeAll("/usr/share/applications/gnome-language-selector.desktop"); + m_filePathList.removeAll("/usr/share/applications/mate-notification-properties.desktop"); + m_filePathList.removeAll("/usr/share/applications/transmission-gtk.desktop"); + m_filePathList.removeAll("/usr/share/applications/mpv.desktop"); + m_filePathList.removeAll("/usr/share/applications/system-config-printer.desktop"); + m_filePathList.removeAll("/usr/share/applications/org.gnome.DejaDup.desktop"); + m_filePathList.removeAll("/usr/share/applications/yelp.desktop"); + m_filePathList.removeAll("/usr/share/applications/peony-computer.desktop"); + m_filePathList.removeAll("/usr/share/applications/peony-home.desktop"); + m_filePathList.removeAll("/usr/share/applications/peony-trash.desktop"); + m_filePathList.removeAll("/usr/share/applications/peony.desktop"); + + //v10 + m_filePathList.removeAll("/usr/share/applications/mate-about.desktop"); + m_filePathList.removeAll("/usr/share/applications/time.desktop"); + m_filePathList.removeAll("/usr/share/applications/network.desktop"); + m_filePathList.removeAll("/usr/share/applications/shares.desktop"); + m_filePathList.removeAll("/usr/share/applications/mate-power-statistics.desktop"); + m_filePathList.removeAll("/usr/share/applications/display-im6.desktop"); + m_filePathList.removeAll("/usr/share/applications/display-im6.q16.desktop"); + m_filePathList.removeAll("/usr/share/applications/openjdk-8-policytool.desktop"); + m_filePathList.removeAll("/usr/share/applications/kylin-io-monitor.desktop"); + m_filePathList.removeAll("/usr/share/applications/wps-office-uninstall.desktop"); + m_filePathList.removeAll("/usr/share/applications/wps-office-misc.desktop"); +} + +void AppMatch::getAppName() +{ + GKeyFileFlags flags=G_KEY_FILE_NONE; + GKeyFile* keyfile=g_key_file_new (); + + QByteArray fpbyte; + QString str; + char* filepath; + char* name; + QString namestr; + for(int i=0;i +#include +#include +#include +class AppMatch : public QObject +{ + Q_OBJECT +public: + explicit AppMatch(QObject *parent = nullptr); + QStringList startMatchApp(QString input); + +private: + void getAllDesktopFilePath(QString path); + void getDesktopFilePath(); + void getAppName(); + void appNameMatch(QString appname,QString desktoppath); + +private: + QString m_soureText; + QStringList m_filePathList; + QStringList m_returnResult; + QStringList m_midResult; + +}; + +#endif // APPMATCH_H diff --git a/appmatch/app-match.pri b/appmatch/app-match.pri new file mode 100644 index 0000000..4a3d55d --- /dev/null +++ b/appmatch/app-match.pri @@ -0,0 +1,7 @@ +INCLUDEPATH += $$PWD + +HEADERS += \ + $$PWD/app-match.h \ + +SOURCES += \ + $$PWD/app-match.cpp \ diff --git a/ukui-search.pro b/ukui-search.pro index 109f0c7..ea03398 100644 --- a/ukui-search.pro +++ b/ukui-search.pro @@ -22,6 +22,7 @@ include(control/control.pri) include(appsearch/appsearch.pri) include(singleapplication/qt-single-application.pri) include(settingsmatch/setting-match.pri) +include(appmatch/app-match.pri) LIBS = -lxapian -lgsettings-qt # Default rules for deployment.