From 66a8df1a51b68024afd5face57eaa6bd12a61768 Mon Sep 17 00:00:00 2001 From: iaom Date: Thu, 28 Oct 2021 20:46:39 +0800 Subject: [PATCH] Add ukcc plugin. --- debian/control | 3 +- debian/ukui-search.install | 4 + search-ukcc-plugin/image/360.svg | 18 + search-ukcc-plugin/image/add.svg | 1 + search-ukcc-plugin/image/baidu.svg | 17 + search-ukcc-plugin/image/sougou.svg | 22 ++ search-ukcc-plugin/search-ukcc-plugin.pro | 35 ++ search-ukcc-plugin/search.cpp | 440 ++++++++++++++++++++++ search-ukcc-plugin/search.h | 110 ++++++ search-ukcc-plugin/search.ui | 19 + search-ukcc-plugin/translations/zh_CN.ts | 129 +++++++ ukui-search.pro | 4 +- 12 files changed, 799 insertions(+), 3 deletions(-) create mode 100644 search-ukcc-plugin/image/360.svg create mode 100644 search-ukcc-plugin/image/add.svg create mode 100644 search-ukcc-plugin/image/baidu.svg create mode 100644 search-ukcc-plugin/image/sougou.svg create mode 100644 search-ukcc-plugin/search-ukcc-plugin.pro create mode 100644 search-ukcc-plugin/search.cpp create mode 100644 search-ukcc-plugin/search.h create mode 100644 search-ukcc-plugin/search.ui create mode 100644 search-ukcc-plugin/translations/zh_CN.ts 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 @@ + + + + 360 + Created with Sketch. + + + + + + + + + + + + + \ 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 @@ +add \ 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 @@ + + + + baidu + Created with Sketch. + + + + + + + + + + + + \ 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 @@ + + + + sougou + Created with Sketch. + + + + + + + + + + + + + + + + + \ 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/Create index + + + + Creating index can help you getting results quickly. + 开启之后可以快速获取搜索结果 + + + + Default web searching engine + 默认互联网搜索引擎 + /Search/Default web searching engine + + + + baidu + 百度 + + + + sougou + 搜狗 + + + + 360 + 360 + + + + Block Folders + 排除的文件夹 + /Search/Block Folders + + + + Following folders will not be searched. You can set it by adding and removing folders. + 搜索将不查看以下文件夹,通过添加和删除可以设置排除的文件夹位置 + + + + Choose folder + 添加 + + + + delete + 删除 + + + + Directories + 文件夹 + + + + select blocked folder + 选择排除的文件夹 + + + + Select + 选择 + + + + Position: + 位置 + + + + FileName: + 文件名 + + + + FileType: + 类型 + + + + Cancel + 取消 + + + + + + + Warning + 警告 + + + + Add blocked folder failed, choosen path is empty! + 添加失败,选择的路径为空! + + + + Add blocked folder failed, it is not in home path! + 添加失败,添加的路径不在家目录下! + + + + Add blocked folder failed, its parent dir is exist! + 添加失败,父目录已被添加! + + + + Add blocked folder failed, it has been already blocked! + 添加失败,这个文件夹已经被添加过了! + + + 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