diff --git a/debian/control b/debian/control
index b584553..a9c0826 100644
--- a/debian/control
+++ b/debian/control
@@ -19,7 +19,8 @@ Build-Depends: debhelper (>=9.0.0),
libuchardet-dev,
libpoppler-qt5-dev,
libukui-log4qt-dev,
- libqt5xdg-dev
+ libqt5xdg-dev,
+ libukcc-dev
Standards-Version: 4.5.0
Homepage: https://www.ukui.org/
Vcs-Git: https://github.com/ukui/ukui-search.git
diff --git a/debian/ukui-search.install b/debian/ukui-search.install
index 877acce..2a9cce9 100644
--- a/debian/ukui-search.install
+++ b/debian/ukui-search.install
@@ -3,3 +3,7 @@ etc/xdg/autostart/*.desktop
usr/share/applications/*.desktop
frontend/.qm/*.qm usr/share/ukui-search/translations
usr/share/glib-2.0/schemas/*.xml
+usr/lib/*/ukui-control-center/*
+usr/share/ukui-search/search-ukcc-plugin/translations/*
+usr/share/ukui-search/search-ukcc-plugin/image/*
+
diff --git a/search-ukcc-plugin/image/360.svg b/search-ukcc-plugin/image/360.svg
new file mode 100644
index 0000000..dc9ebad
--- /dev/null
+++ b/search-ukcc-plugin/image/360.svg
@@ -0,0 +1,18 @@
+
+
\ No newline at end of file
diff --git a/search-ukcc-plugin/image/add.svg b/search-ukcc-plugin/image/add.svg
new file mode 100644
index 0000000..c4c9595
--- /dev/null
+++ b/search-ukcc-plugin/image/add.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/search-ukcc-plugin/image/baidu.svg b/search-ukcc-plugin/image/baidu.svg
new file mode 100644
index 0000000..b24adaa
--- /dev/null
+++ b/search-ukcc-plugin/image/baidu.svg
@@ -0,0 +1,17 @@
+
+
\ No newline at end of file
diff --git a/search-ukcc-plugin/image/sougou.svg b/search-ukcc-plugin/image/sougou.svg
new file mode 100644
index 0000000..85ee41c
--- /dev/null
+++ b/search-ukcc-plugin/image/sougou.svg
@@ -0,0 +1,22 @@
+
+
\ No newline at end of file
diff --git a/search-ukcc-plugin/search-ukcc-plugin.pro b/search-ukcc-plugin/search-ukcc-plugin.pro
new file mode 100644
index 0000000..8065c6f
--- /dev/null
+++ b/search-ukcc-plugin/search-ukcc-plugin.pro
@@ -0,0 +1,35 @@
+QT += widgets
+
+TEMPLATE = lib
+TARGET = $$qtLibraryTarget(search-ukcc-plugin)
+target.path = $$[QT_INSTALL_LIBS]/ukui-control-center/
+
+CONFIG += plugin link_pkgconfig c++11 lrelease
+
+PKGCONFIG += gio-2.0 gio-unix-2.0 gsettings-qt
+
+LIBS += -L$$[QT_INSTALL_LIBS] -lgsettings-qt
+LIBS += -lukcc
+
+DEFINES += QT_DEPRECATED_WARNINGS
+
+SOURCES += search.cpp
+
+HEADERS += search.h
+
+TRANSLATIONS += translations/zh_CN.ts
+
+images.files = image/*
+images.path = /usr/share/ukui-search/search-ukcc-plugin/image/
+
+qm_files.files = translations/* $$OUT_PWD/.qm/*.qm
+qm_files.path = /usr/share/ukui-search/search-ukcc-plugin/translations
+
+
+INSTALLS += target images qm_files
+
+DISTFILES += \
+ ./image/360.svg \
+ ./image/baidu.scg \
+ ./image/sougou.svg \
+ ./image/add.svg
diff --git a/search-ukcc-plugin/search.cpp b/search-ukcc-plugin/search.cpp
new file mode 100644
index 0000000..8b6dc21
--- /dev/null
+++ b/search-ukcc-plugin/search.cpp
@@ -0,0 +1,440 @@
+#include "search.h"
+#include
+#include
+
+Search::Search()
+{
+ QTranslator* translator = new QTranslator(this);
+ if(!translator->load("/usr/share/ukui-search/search-ukcc-plugin/translations/" + QLocale::system().name())) {
+ qWarning() << "/usr/share/ukui-search/search-ukcc-plugin/translations/" + QLocale::system().name() << "load failed";
+ }
+ QApplication::installTranslator(translator);
+
+ m_plugin_name = tr("Search");
+ m_plugin_type = SEARCH_F;
+ initUi();
+ setupConnection();
+ m_dirSettings = new QSettings(QDir::homePath() + CONFIG_FILE, QSettings::NativeFormat, this);
+ m_dirSettings->setIniCodec(QTextCodec::codecForName("UTF-8"));
+ initBlockDirsList();
+}
+
+Search::~Search()
+{
+ delete m_pluginWidget;
+ if (m_gsettings) {
+ delete m_gsettings;
+ m_gsettings = nullptr;
+ }
+}
+
+QString Search::plugini18nName()
+{
+ return m_plugin_name;
+}
+
+int Search::pluginTypes()
+{
+ return m_plugin_type;
+}
+
+QWidget *Search::pluginUi()
+{
+ m_pluginWidget->setAttribute(Qt::WA_DeleteOnClose);
+
+ const QByteArray id(UKUI_SEARCH_SCHEMAS);
+ if (QGSettings::isSchemaInstalled(id)) {
+ m_gsettings = new QGSettings(id, QByteArray(), this);
+ //按钮状态初始化
+ if (m_gsettings->keys().contains(SEARCH_METHOD_KEY)) {
+ //当前是否使用索引搜索/暴力搜索
+ bool is_index_search_on = m_gsettings->get(SEARCH_METHOD_KEY).toBool();
+ m_searchMethodBtn->setChecked(is_index_search_on);
+ } else {
+ m_searchMethodBtn->setEnabled(false);
+ }
+ if (m_gsettings->keys().contains(WEB_ENGINE_KEY)) {
+ //当前网页搜索的搜索引擎
+ QString engine = m_gsettings->get(WEB_ENGINE_KEY).toString();
+ m_webEngineFrame->mCombox->setCurrentIndex(m_webEngineFrame->mCombox->findData(engine));
+ } else {
+ m_webEngineFrame->mCombox->setEnabled(false);
+ }
+ //监听gsettings值改变,更新控制面板UI
+ connect(m_gsettings, &QGSettings::changed, this, [ = ](const QString &key) {
+ if (key == SEARCH_METHOD_KEY) {
+ bool is_index_search_on = m_gsettings->get(SEARCH_METHOD_KEY).toBool();
+ m_searchMethodBtn->blockSignals(true);
+ m_searchMethodBtn->setChecked(is_index_search_on);
+ m_searchMethodBtn->blockSignals(false);
+ } else if (key == WEB_ENGINE_KEY) {
+ QString engine = m_gsettings->get(WEB_ENGINE_KEY).toString();
+ m_webEngineFrame->mCombox->blockSignals(true);
+ m_webEngineFrame->mCombox->setCurrentIndex(m_webEngineFrame->mCombox->findData(engine));
+ m_webEngineFrame->mCombox->blockSignals(false);
+ }
+ });
+ connect(m_searchMethodBtn, &SwitchButton::checkedChanged, this, [ = ](bool checked) {
+ if (m_gsettings && m_gsettings->keys().contains(SEARCH_METHOD_KEY)) {
+ m_gsettings->set(SEARCH_METHOD_KEY, checked);
+ }
+ });
+ connect(m_webEngineFrame->mCombox, QOverload::of(&QComboBox::currentIndexChanged), this, [=](int index) {
+ if (m_gsettings && m_gsettings->keys().contains(WEB_ENGINE_KEY)) {
+ m_gsettings->set(WEB_ENGINE_KEY, m_webEngineFrame->mCombox->currentData().toString());
+ }
+ });
+ } else {
+ qCritical() << UKUI_SEARCH_SCHEMAS << " not installed!\n";
+ m_searchMethodBtn->setEnabled(false);
+ m_webEngineFrame->mCombox->setEnabled(false);
+ }
+ return m_pluginWidget;
+}
+
+const QString Search::name() const
+{
+ return QStringLiteral("Search");
+}
+
+QString Search::translationPath() const
+{
+ return QStringLiteral("/usr/share/ukui-search/search-ukcc-plugin/translations/%1.ts");
+}
+
+bool Search::isShowOnHomePage() const
+{
+ return true;
+}
+
+QIcon Search::icon() const
+{
+ return QIcon();
+}
+
+bool Search::isEnable() const
+{
+ return true;
+}
+
+/**
+ * @brief Search::initUi 初始化此插件UI
+ */
+void Search::initUi()
+{
+ m_pluginWidget = new QWidget;
+ m_mainLyt = new QVBoxLayout(m_pluginWidget);
+ m_pluginWidget->setLayout(m_mainLyt);
+
+ m_titleLabel = new TitleLabel(m_setFrame);
+ m_titleLabel->setText(tr("Search"));
+ m_mainLyt->addWidget(m_titleLabel);
+
+ //设置搜索模式部分的ui
+ m_setFrame = new QFrame(m_pluginWidget);
+ m_setFrame->setFrameShape(QFrame::Shape::Box);
+ m_setFrameLyt = new QVBoxLayout(m_setFrame);
+ m_setFrameLyt->setContentsMargins(0, 0, 0, 0);
+ m_setFrameLyt->setSpacing(0);
+
+ m_searchMethodFrame = new QFrame(m_setFrame);
+ m_searchMethodFrame->setMinimumWidth(550);
+ m_searchMethodLyt = new QHBoxLayout(m_searchMethodFrame);
+ m_searchMethodLyt->setContentsMargins(16, 18, 16, 21);
+ m_searchMethodFrame->setLayout(m_searchMethodLyt);
+
+ m_descFrame = new QFrame(m_searchMethodFrame);
+ m_descFrameLyt = new QVBoxLayout(m_descFrame);
+ m_descFrameLyt->setContentsMargins(0, 0, 0, 0);
+ m_descFrame->setLayout(m_descFrameLyt);
+ m_descLabel1 = new QLabel(m_descFrame);
+ m_descLabel2 = new QLabel(m_descFrame);
+
+ //~ contents_path /Search/Create index
+ m_descLabel1->setText(tr("Create index"));
+ m_descLabel2->setText(tr("Creating index can help you getting results quickly."));
+ m_descLabel2->setEnabled(false);
+ m_descFrameLyt->addWidget(m_descLabel1);
+ m_descFrameLyt->addWidget(m_descLabel2);
+ m_searchMethodBtn = new SwitchButton(m_searchMethodFrame);
+ m_searchMethodLyt->addWidget(m_descFrame);
+ m_searchMethodLyt->addStretch();
+ m_searchMethodLyt->addWidget(m_searchMethodBtn);
+ m_setFrameLyt->addWidget(m_searchMethodFrame);
+
+ QFrame *line = new QFrame(m_setFrame);
+ line->setFixedHeight(1);
+ line->setLineWidth(0);
+ line->setFrameShape(QFrame::HLine);
+ line->setFrameShadow(QFrame::Sunken);
+ m_setFrameLyt->addWidget(line);
+
+ //设置网页搜索引擎部分的ui
+ //~ contents_path /Search/Default web searching engine
+ m_webEngineFrame = new ComboxFrame(tr("Default web searching engine"), m_searchMethodFrame);
+ m_webEngineFrame->setContentsMargins(8, 0, 16, 0);
+ m_webEngineFrame->setFixedHeight(56);
+ m_webEngineFrame->setMinimumWidth(550);
+ m_webEngineFrame->mCombox->insertItem(0, QIcon("/usr/share/ukui-search/search-ukcc-plugin/image/baidu.svg"), tr("baidu"), "baidu");
+ m_webEngineFrame->mCombox->insertItem(1, QIcon("/usr/share/ukui-search/search-ukcc-plugin/image/sougou.svg"), tr("sougou"), "sougou");
+ m_webEngineFrame->mCombox->insertItem(2, QIcon("/usr/share/ukui-search/search-ukcc-plugin/image/360.svg"), tr("360"), "360");
+ m_setFrameLyt->addWidget(m_webEngineFrame);
+ m_mainLyt->addWidget(m_setFrame);
+
+ //设置黑名单文件夹部分的ui
+ m_blockDirTitleLabel = new TitleLabel(m_pluginWidget);
+
+ //~ contents_path /Search/Block Folders
+ m_blockDirTitleLabel->setText(tr("Block Folders"));
+ m_blockDirDescLabel = new QLabel(m_pluginWidget);
+ m_blockDirDescLabel->setWordWrap(true);
+ m_blockDirDescLabel->setText(tr("Following folders will not be searched. You can set it by adding and removing folders."));
+
+ m_blockDirsFrame = new QFrame(m_pluginWidget);
+ m_blockDirsFrame->setFrameShape(QFrame::Shape::Box);
+ m_blockDirsLyt = new QVBoxLayout(m_blockDirsFrame);
+ m_blockDirsLyt->setDirection(QBoxLayout::BottomToTop);
+ m_blockDirsFrame->setLayout(m_blockDirsLyt);
+ m_blockDirsLyt->setContentsMargins(0, 0, 0, 0);
+ m_blockDirsLyt->setSpacing(2);
+
+
+ QFrame * m_addBlockDirFrame = new QFrame(m_blockDirsFrame);
+ m_addBlockDirFrame->setFrameShape(QFrame::Shape::NoFrame);
+ m_addBlockDirFrame->setFixedHeight(60);
+
+
+
+ m_addBlockDirWidget = new HoverWidget("", m_addBlockDirFrame);
+ m_addBlockDirWidget->setFixedHeight(60);
+
+
+// m_addBlockDirWidget->setObjectName("addBlockDirWidget");
+// QPalette pal;
+// QBrush brush = pal.highlight(); //获取window的色值
+// QColor highLightColor = brush.color();
+// QString stringColor = QString("rgba(%1,%2,%3)") //叠加20%白色
+// .arg(highLightColor.red()*0.8 + 255*0.2)
+// .arg(highLightColor.green()*0.8 + 255*0.2)
+// .arg(highLightColor.blue()*0.8 + 255*0.2);
+
+// m_addBlockDirWidget->setStyleSheet(QString("HoverWidget#addBlockDirWidget{background: palette(button);\
+// border-radius: 4px;}\
+// HoverWidget:hover:!pressed#addBlockDirWidget{background: %1; \
+// border-radius: 4px;}").arg(stringColor));
+
+
+ m_addBlockDirIcon = new QLabel(m_addBlockDirWidget);
+ m_addBlockDirIcon->setPixmap(QIcon("/usr/share/ukui-search/search-ukcc-plugin/image/add.svg").pixmap(12, 12));
+ m_addBlockDirIcon->setProperty("useIconHighlightEffect", true);
+ m_addBlockDirIcon->setProperty("iconHighlightEffectMode", 1);
+
+ m_addBlockDirLabel = new QLabel(m_addBlockDirWidget);
+ m_addBlockDirLabel->setText(tr("Choose folder"));
+
+ m_addBlockDirLyt = new QHBoxLayout(m_addBlockDirWidget);
+ m_addBlockDirWidget->setLayout(m_addBlockDirLyt);
+
+ m_blockDirsLyt->addWidget(m_addBlockDirWidget);
+
+ m_addBlockDirLyt->addStretch();
+ m_addBlockDirLyt->addWidget(m_addBlockDirIcon);
+ m_addBlockDirLyt->addWidget(m_addBlockDirLabel);
+ m_addBlockDirLyt->addStretch();
+ m_mainLyt->addSpacing(32);
+ m_mainLyt->addWidget(m_blockDirTitleLabel);
+ m_mainLyt->addWidget(m_blockDirDescLabel);
+ m_mainLyt->addWidget(m_blockDirsFrame);
+ m_mainLyt->addStretch();
+ m_mainLyt->setContentsMargins(0, 0, 40, 0);
+}
+
+/**
+ * @brief Search::getBlockDirs 从配置文件获取黑名单并将黑名单列表传入
+ */
+void Search::getBlockDirs()
+{
+ m_blockDirs.clear();
+ if (m_dirSettings)
+ m_blockDirs = m_dirSettings->allKeys();
+}
+
+/**
+ * @brief Search::setBlockDir 尝试写入新的黑名单文件夹
+ * @param dirPath 待添加到黑名单的文件夹路径
+ * @param is_add 是否是在添加黑名单
+ * @return 0成功 !0添加失败的错误代码
+ */
+int Search::setBlockDir(const QString &dirPath, const bool &is_add)
+{
+ if (!is_add) {
+ if (dirPath.isEmpty()) {
+ return ReturnCode::PathEmpty;
+ }
+ //删除黑名单目录
+ m_dirSettings->remove(dirPath);
+ removeBlockDirFromList(dirPath);
+ return ReturnCode::Succeed;
+ }
+ if (!dirPath.startsWith(QDir::homePath())) {
+ return ReturnCode::NotInHomeDir;
+ }
+
+ QString pathKey = dirPath.right(dirPath.length() - 1);
+
+ for (QString dir : m_blockDirs) {
+ if (pathKey == dir) {
+ return ReturnCode::HasBeenBlocked;
+ }
+
+ if (pathKey.startsWith(dir)) {
+ return ReturnCode::ParentExist;
+ }
+
+ //有它的子文件夹已被添加,删除这些子文件夹
+ if (dir.startsWith(pathKey)) {
+ m_dirSettings->remove(dir);
+ removeBlockDirFromList("/" + dir);
+ }
+ }
+ m_dirSettings->setValue(pathKey, "0");
+ appendBlockDirToList(dirPath);
+ return ReturnCode::Succeed;
+}
+
+/**
+ * @brief Search::initBlockDirsList 初始化黑名单列表
+ */
+void Search::initBlockDirsList()
+{
+ getBlockDirs();
+ for (QString path: m_blockDirs) {
+ QString wholePath = QString("/%1").arg(path);
+ if (QFileInfo(wholePath).isDir() && path.startsWith("home")) {
+ appendBlockDirToList(wholePath);
+ }
+ }
+}
+
+void Search::appendBlockDirToList(const QString &path)
+{
+ HoverWidget * dirWidget = new HoverWidget(path, m_blockDirsFrame);
+ dirWidget->setObjectName(path);
+ dirWidget->setMinimumWidth(550);
+ dirWidget->setAttribute(Qt::WA_DeleteOnClose);
+ QHBoxLayout * dirWidgetLyt = new QHBoxLayout(dirWidget);
+ dirWidgetLyt->setSpacing(8);
+ dirWidgetLyt->setContentsMargins(0, 0, 0, 0);
+ dirWidget->setLayout(dirWidgetLyt);
+ QFrame * dirFrame = new QFrame(dirWidget);
+ dirFrame->setFrameShape(QFrame::Shape::Box);
+ dirFrame->setFixedHeight(50);
+ QHBoxLayout * dirFrameLayout = new QHBoxLayout(dirFrame);
+ dirFrameLayout->setSpacing(16);
+ dirFrameLayout->setContentsMargins(16, 0, 16, 0);
+ QLabel * iconLabel = new QLabel(dirFrame);
+ QLabel * pathLabel = new QLabel(dirFrame);
+
+ dirFrameLayout->addWidget(iconLabel);
+ iconLabel->setPixmap(QIcon::fromTheme("inode-directory").pixmap(QSize(24, 24)));
+ pathLabel->setText(path);
+ dirFrameLayout->addWidget(pathLabel);
+ dirFrameLayout->addStretch();
+ QPushButton * delBtn = new QPushButton(dirFrame);
+ delBtn->setIcon(QIcon::fromTheme("window-close-symbolic"));
+ delBtn->setFixedSize(30, 30);
+ delBtn->setToolTip(tr("delete"));
+ delBtn->setProperty("isWindowButton", 0x2);
+ delBtn->setProperty("useIconHighlightEffect", 0x8);
+ delBtn->setFlat(true);
+
+
+ delBtn->hide();
+ dirFrameLayout->addWidget(delBtn);
+ dirWidgetLyt->addWidget(dirFrame);
+// dirWidgetLyt->addWidget(delBtn);
+
+ QFrame *line = new QFrame(m_blockDirsFrame);
+ line->setFixedHeight(1);
+ line->setLineWidth(0);
+ line->setFrameShape(QFrame::HLine);
+ line->setFrameShadow(QFrame::Sunken);
+// m_setFrameLyt->addWidget(line);
+
+ m_blockDirsLyt->addWidget(line);
+ m_blockDirsLyt->addWidget(dirWidget);
+ connect(delBtn, &QPushButton::clicked, this, [ = ]() {
+ setBlockDir(path, false);
+ getBlockDirs();
+ m_blockDirsLyt->removeWidget(line);
+ line->deleteLater();
+ });
+ connect(dirWidget, &HoverWidget::enterWidget, this, [ = ]() {
+ delBtn->show();
+ });
+ connect(dirWidget, &HoverWidget::leaveWidget, this, [ = ]() {
+ delBtn->hide();
+ });
+}
+
+void Search::removeBlockDirFromList(const QString &path)
+{
+ HoverWidget * delDirWidget = m_blockDirsFrame->findChild(path);
+ if (delDirWidget) {
+ qDebug() << "Delete folder succeed! path = " << path;
+ delDirWidget->close();
+ }
+}
+
+void Search::setupConnection()
+{
+ connect(m_addBlockDirWidget, &HoverWidget::widgetClicked, this, &Search::onBtnAddFolderClicked);
+}
+
+void Search::onBtnAddFolderClicked()
+{
+ QFileDialog * fileDialog = new QFileDialog(m_pluginWidget);
+// fileDialog->setFileMode(QFileDialog::Directory); //允许查看文件和文件夹,但只允许选择文件夹
+ fileDialog->setFileMode(QFileDialog::DirectoryOnly); //只允许查看文件夹
+// fileDialog->setViewMode(QFileDialog::Detail);
+ fileDialog->setDirectory(QDir::homePath());
+ fileDialog->setNameFilter(tr("Directories"));
+ fileDialog->setWindowTitle(tr("select blocked folder"));
+ fileDialog->setLabelText(QFileDialog::Accept, tr("Select"));
+ fileDialog->setLabelText(QFileDialog::LookIn, tr("Position: "));
+ fileDialog->setLabelText(QFileDialog::FileName, tr("FileName: "));
+ fileDialog->setLabelText(QFileDialog::FileType, tr("FileType: "));
+ fileDialog->setLabelText(QFileDialog::Reject, tr("Cancel"));
+ if(fileDialog->exec() != QDialog::Accepted) {
+ fileDialog->deleteLater();
+ return;
+ }
+ QString selectedDir = 0;
+ selectedDir = fileDialog->selectedFiles().first();
+ qDebug() << "Selected a folder in onBtnAddClicked(): " << selectedDir;
+ int returnCode = setBlockDir(selectedDir, true);
+ switch (returnCode) {
+ case ReturnCode::Succeed :
+ qDebug() << "Add blocked folder succeed! path = " << selectedDir;
+ getBlockDirs();
+ break;
+ case ReturnCode::PathEmpty :
+ qWarning() << "Add blocked folder failed, choosen path is empty! path = " << selectedDir;
+ QMessageBox::warning(m_pluginWidget, tr("Warning"), tr("Add blocked folder failed, choosen path is empty!"));
+ break;
+ case ReturnCode::NotInHomeDir :
+ qWarning() << "Add blocked folder failed, it is not in home path! path = " << selectedDir;
+ QMessageBox::warning(m_pluginWidget, tr("Warning"), tr("Add blocked folder failed, it is not in home path!"));
+ break;
+ case ReturnCode::ParentExist :
+ qWarning() << "Add blocked folder failed, its parent dir is exist! path = " << selectedDir;
+ QMessageBox::warning(m_pluginWidget, tr("Warning"), tr("Add blocked folder failed, its parent dir is exist!"));
+ break;
+ case ReturnCode::HasBeenBlocked :
+ qWarning() << "Add blocked folder failed, it has been already blocked! path = " << selectedDir;
+ QMessageBox::warning(m_pluginWidget, tr("Warning"), tr("Add blocked folder failed, it has been already blocked!"));
+ break;
+ default:
+ break;
+ }
+}
diff --git a/search-ukcc-plugin/search.h b/search-ukcc-plugin/search.h
new file mode 100644
index 0000000..6792a09
--- /dev/null
+++ b/search-ukcc-plugin/search.h
@@ -0,0 +1,110 @@
+#ifndef SEARCH_H
+#define SEARCH_H
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define UKUI_SEARCH_SCHEMAS "org.ukui.search.settings"
+#define SEARCH_METHOD_KEY "indexSearch"
+#define WEB_ENGINE_KEY "webEngine"
+//TODO
+#define CONFIG_FILE "/.config/org.ukui/ukui-search/ukui-search-block-dirs.conf"
+
+enum ReturnCode {
+ Succeed,
+ PathEmpty,
+ NotInHomeDir,
+ ParentExist,
+ HasBeenBlocked
+};
+
+class Search : public QObject, CommonInterface
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.ukcc.CommonInterface")
+ Q_INTERFACES(CommonInterface)
+
+public:
+ explicit Search();
+ ~Search();
+
+ QString plugini18nName() Q_DECL_OVERRIDE;
+ int pluginTypes() Q_DECL_OVERRIDE;
+ QWidget * pluginUi() Q_DECL_OVERRIDE;
+ const QString name() const Q_DECL_OVERRIDE;
+ QString translationPath() const;
+ bool isShowOnHomePage() const Q_DECL_OVERRIDE;
+ QIcon icon() const Q_DECL_OVERRIDE;
+ bool isEnable() const Q_DECL_OVERRIDE;
+
+private:
+ QWidget * m_pluginWidget = nullptr;
+ QString m_plugin_name = "";
+ int m_plugin_type = 0;
+
+ QGSettings * m_gsettings = nullptr;
+
+ void initUi();
+ QVBoxLayout * m_mainLyt = nullptr;
+ TitleLabel * m_titleLabel = nullptr;
+
+ QFrame *m_setFrame = nullptr;
+ QVBoxLayout *m_setFrameLyt = nullptr;
+ //设置搜索模式
+ QFrame *m_descFrame = nullptr;
+ QVBoxLayout *m_descFrameLyt = nullptr;
+ QLabel *m_descLabel1 = nullptr;
+ QLabel *m_descLabel2 = nullptr;
+ QFrame *m_searchMethodFrame = nullptr;
+ QHBoxLayout *m_searchMethodLyt = nullptr;
+// QLabel *m_searchMethodLabel = nullptr;
+ SwitchButton * m_searchMethodBtn = nullptr;
+ //设置搜索引擎
+ TitleLabel * m_webEngineLabel = nullptr;
+ ComboxFrame * m_webEngineFrame = nullptr;
+ QVBoxLayout * m_webEngineLyt = nullptr;
+
+ //设置黑名单
+ TitleLabel * m_blockDirTitleLabel = nullptr;
+ QLabel * m_blockDirDescLabel = nullptr;
+ QFrame * m_blockDirsFrame = nullptr;
+ QVBoxLayout * m_blockDirsLyt = nullptr;
+ HoverWidget * m_addBlockDirWidget = nullptr;
+ QLabel * m_addBlockDirIcon = nullptr;
+ QLabel * m_addBlockDirLabel = nullptr;
+ QHBoxLayout * m_addBlockDirLyt = nullptr;
+
+ QStringList m_blockDirs;
+ QSettings * m_dirSettings = nullptr;
+ void getBlockDirs();
+ int setBlockDir(const QString &dirPath, const bool &is_add = true);
+ void appendBlockDirToList(const QString &path);
+ void removeBlockDirFromList(const QString &path);
+ void initBlockDirsList();
+// void refreshBlockDirsList();
+
+
+ void setupConnection();
+
+private slots:
+ void onBtnAddFolderClicked();
+};
+
+#endif // SEARCH_H
diff --git a/search-ukcc-plugin/search.ui b/search-ukcc-plugin/search.ui
new file mode 100644
index 0000000..0a9f70e
--- /dev/null
+++ b/search-ukcc-plugin/search.ui
@@ -0,0 +1,19 @@
+
+
+ Search
+
+
+
+ 0
+ 0
+ 784
+ 630
+
+
+
+ Form
+
+
+
+
+
diff --git a/search-ukcc-plugin/translations/zh_CN.ts b/search-ukcc-plugin/translations/zh_CN.ts
new file mode 100644
index 0000000..9d799b9
--- /dev/null
+++ b/search-ukcc-plugin/translations/zh_CN.ts
@@ -0,0 +1,129 @@
+
+
+
+
+ Search
+
+
+
+
+ 搜索
+
+
+
+
+ 创建索引
+ /Search/Create index
+
+
+
+
+ 开启之后可以快速获取搜索结果
+
+
+
+
+ 默认互联网搜索引擎
+ /Search/Default web searching engine
+
+
+
+
+ 百度
+
+
+
+
+ 搜狗
+
+
+
+
+ 360
+
+
+
+
+ 排除的文件夹
+ /Search/Block Folders
+
+
+
+
+ 搜索将不查看以下文件夹,通过添加和删除可以设置排除的文件夹位置
+
+
+
+
+ 添加
+
+
+
+
+ 删除
+
+
+
+
+ 文件夹
+
+
+
+
+ 选择排除的文件夹
+
+
+
+
+ 选择
+
+
+
+
+ 位置
+
+
+
+
+ 文件名
+
+
+
+
+ 类型
+
+
+
+
+ 取消
+
+
+
+
+
+
+
+ 警告
+
+
+
+
+ 添加失败,选择的路径为空!
+
+
+
+
+ 添加失败,添加的路径不在家目录下!
+
+
+
+
+ 添加失败,父目录已被添加!
+
+
+
+
+ 添加失败,这个文件夹已经被添加过了!
+
+
+
diff --git a/ukui-search.pro b/ukui-search.pro
index ea7a3e1..c7090b4 100644
--- a/ukui-search.pro
+++ b/ukui-search.pro
@@ -1,9 +1,9 @@
TEMPLATE = subdirs
SUBDIRS += $$PWD/libchinese-segmentation \
$$PWD/libsearch \
-# $$PWD/src \
$$PWD/frontend \
- $$PWD/ukuisearch-systemdbus
+ $$PWD/ukuisearch-systemdbus \
+ $$PWD/search-ukcc-plugin
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the