feat(frontend): Connect with the latest API for app search.

Description: 对接应用搜索新接口

Log: 对接应用搜索新接口
This commit is contained in:
zhangjiaping 2021-02-27 17:32:41 +08:00
parent 403057e2bb
commit 06420dccad
21 changed files with 602 additions and 304 deletions

View File

@ -248,7 +248,7 @@ void ContentWidget::setupConnect(SearchListView * listview) {
} else if (type == SearchItem::SearchType::Best && !m_bestContent.isEmpty() && listview->currentIndex().row() == listview->getLength() - 1) {
m_detailView->setContent(m_bestContent, m_keyword);
m_detailView->isContent = true;
m_detailView->setupWidget(type == SearchItem::SearchType::Contents, path);
m_detailView->setupWidget(SearchItem::SearchType::Contents, path);
listview->is_current_list = true;
Q_EMIT this->currentItemChanged();
listview->is_current_list = false;
@ -258,6 +258,15 @@ void ContentWidget::setupConnect(SearchListView * listview) {
}
if (type == SearchItem::SearchType::Web) {
m_detailView->setWebWidget(this->m_keyword);
} else if (type == SearchItem::SearchType::Apps) {
int index = listview->currentIndex().row();
m_detailView->setAppWidget(m_appList.at(index), m_appPathList.at(index), m_appIconList.at(index));
} else if (type == SearchItem::SearchType::Best) {
if (m_bestList.at(listview->currentIndex().row()).first == SearchItem::SearchType::Apps) {
m_detailView->setAppWidget(m_appList.at(0), m_appPathList.at(0), m_appIconList.at(0));
} else {
m_detailView->setupWidget(m_bestList.at(listview->currentIndex().row()).first, m_bestList.at(listview->currentIndex().row()).second);
}
} else {
m_detailView->setupWidget(type, path);
}
@ -326,6 +335,13 @@ void ContentWidget::resetListHeight()
m_resultList->setFixedHeight(height);
}
void ContentWidget::appendBestItem(const int &type, const QString &path)
{
m_bestList.append(QPair<int, QString>(type, path));
m_bestListView->appendBestItem(QPair<int, QString>(type, path));
appendSearchItem(SearchItem::SearchType::Best, path);
}
/**
* @brief ContentWidget::initHomePage homepage填充内容
* @param lists
@ -416,10 +432,10 @@ int ContentWidget::currentPage() {
}
/**
* @brief ContentWidget::refreshSearchList /
* @param lists list.at(0) list.at(1)
* @brief ContentWidget::resetSearchList
*/
void ContentWidget::refreshSearchList(const QVector<QStringList>& lists) {
void ContentWidget::resetSearchList()
{
this->hideListView();
if (m_fileListView) {
m_fileListView->hide();
@ -480,6 +496,7 @@ void ContentWidget::refreshSearchList(const QVector<QStringList>& lists) {
m_fileShowMoreLabel->resetLabel();
m_contentShowMoreLabel->resetLabel();
m_bestList.clear();
if (! m_appList.isEmpty())
m_appList.clear();
if (! m_settingList.isEmpty())
@ -490,25 +507,23 @@ void ContentWidget::refreshSearchList(const QVector<QStringList>& lists) {
m_fileList.clear();
if (! m_contentList.isEmpty())
m_contentList.clear();
if (! m_appPathList.isEmpty())
m_appPathList.clear();
if (! m_appIconList.isEmpty())
m_appIconList.clear();
}
if (!lists.at(0).isEmpty()) {
m_appList = lists.at(0);
qDebug()<<"Append a best item into list: "<<lists.at(0).at(0);
appendSearchItem(SearchItem::SearchType::Best, lists.at(0).at(0));
m_appListView->show();
m_appTitleLabel->show();
m_appListView->isHidden = false;
if (m_appList.length() <= 5) {
m_appListView->setList(m_appList);
} else {
m_appShowMoreLabel->show();
m_appListView->setList(m_appList.mid(0, 5));
}
}
if (!lists.at(1).isEmpty()) {
m_settingList = lists.at(1);
qDebug()<<"Append a best item into list: "<<lists.at(1).at(0);
appendSearchItem(SearchItem::SearchType::Best, lists.at(1).at(0));
/**
* @brief ContentWidget::setSettingList
* @param settingList
*/
void ContentWidget::setSettingList(const QStringList & settingList)
{
if (settingList.isEmpty())
return;
m_settingList = settingList;
qDebug()<<"Append a best item into list: "<<settingList.at(0);
this->appendBestItem(SearchItem::SearchType::Settings, settingList.at(0));
m_settingListView->show();
m_settingTitleLabel->show();
m_settingListView->isHidden = false;
@ -518,6 +533,36 @@ void ContentWidget::refreshSearchList(const QVector<QStringList>& lists) {
m_settingShowMoreLabel->show();
m_settingListView->setList(m_settingList.mid(0, 5));
}
this->resetListHeight();
}
/**
* @brief ContentWidget::setAppList
* @param appList QVector<namelist,pathlist,iconlist>
*/
void ContentWidget::setAppList(const QVector<QStringList>& appList) {
if (appList.at(0).isEmpty())
return;
m_appList = appList.at(0);
m_appPathList = appList.at(1);
m_appIconList = appList.at(2);
m_appListView->setAppList(m_appPathList, m_appIconList);
qDebug()<<"Append a best item into list: "<<appList.at(0).at(0);
SearchItemModel * model = qobject_cast<SearchItemModel *>(m_bestListView->model());
if (appList.at(1).at(0).isEmpty() || appList.at(1).at(0) == "") {
model->setBestAppIcon(appList.at(2).at(0), false);
} else {
model->setBestAppIcon(appList.at(2).at(0), true);
}
this->appendBestItem(SearchItem::SearchType::Apps, appList.at(0).at(0));
m_appListView->show();
m_appTitleLabel->show();
m_appListView->isHidden = false;
if (m_appList.length() <= 5) {
m_appListView->setList(m_appList);
} else {
m_appShowMoreLabel->show();
m_appListView->setList(m_appList.mid(0, 5));
}
this->resetListHeight();
}
@ -542,40 +587,12 @@ void ContentWidget::appendSearchItem(const int& type, const QString& path, QStri
}
break;
}
// case SearchItem::SearchType::Apps: {
// if (m_appListView->isHidden) {
// m_appListView->show();
// m_appTitleLabel->show();
// m_appListView->isHidden = false;
// if (!m_detailView->isEmpty() && m_detailView->getType() > type) {
// m_appListView->setCurrentIndex(m_appListView->model()->index(0, 0, QModelIndex()));
// }
// }
// m_appListView->appendItem(path);
// currentList = m_appListView;
// this->resetListHeight();
// break;
// }
// case SearchItem::SearchType::Settings: {
// if (m_settingListView->isHidden) {
// m_settingListView->show();
// m_settingTitleLabel->show();
// m_settingListView->isHidden = false;
// if (!m_detailView->isEmpty() && m_detailView->getType() > type) {
// m_settingListView->setCurrentIndex(m_settingListView->model()->index(0, 0, QModelIndex()));
// }
// }
// m_settingListView->appendItem(path);
// currentList = m_settingListView;
// break;
// }
case SearchItem::SearchType::Files: {
if (m_fileListView->isHidden) {
m_fileListView->show();
m_fileTitleLabel->show();
m_fileListView->isHidden = false;
appendSearchItem(SearchItem::SearchType::Best, path);
this->appendBestItem(SearchItem::SearchType::Files, path);
}
if (m_fileListView->getLength() < 5) { //当已搜索结果列表少于5项直接将搜索结果添加到列表中
m_fileListView->appendItem(path);
@ -592,7 +609,7 @@ void ContentWidget::appendSearchItem(const int& type, const QString& path, QStri
m_dirListView->show();
m_dirTitleLabel->show();
m_dirListView->isHidden = false;
appendSearchItem(SearchItem::SearchType::Best, path);
this->appendBestItem(SearchItem::SearchType::Dirs, path);
}
if (m_dirListView->getLength() < 5) {
m_dirListView->appendItem(path);
@ -615,7 +632,7 @@ void ContentWidget::appendSearchItem(const int& type, const QString& path, QStri
m_bestContent.append("\n");
}
}
appendSearchItem(SearchItem::SearchType::Best, path);
this->appendBestItem(SearchItem::SearchType::Contents, path);
}
if (m_contentListView->getLength() < 5) {
m_contentListView->appendItem(path);

View File

@ -39,7 +39,9 @@ public:
void setPage(const int&);
int currentPage();
void refreshSearchList(const QVector<QStringList>&);
void resetSearchList();
void setSettingList(const QStringList&);
void setAppList(const QVector<QStringList>&);
void appendSearchItem(const int& type, const QString& path, QStringList contents = QStringList());
void initHomePage();
void setContentList(const QStringList&);
@ -53,6 +55,7 @@ private:
void setupConnect(SearchListView *);
void clearHomepage();
void resetListHeight();
void appendBestItem(const int&, const QString&);
QString m_keyword;
QStringList m_contentDetailList;
QWidget * m_homePage = nullptr;
@ -93,6 +96,9 @@ private:
QStringList m_fileList;
QStringList m_contentList;
QStringList m_quicklyOpenList;
QStringList m_appPathList;
QStringList m_appIconList;
QList<QPair<int, QString>> m_bestList;
QString m_bestContent; //最佳匹配有文件内容搜索结果的时候,以此变量传递

View File

@ -121,17 +121,10 @@ void HomePageItem::setupUi(const int& type, const QString& path) {
m_hlayout->addStretch();
return;
} else if (type == ItemType::Quick) {
if (SearchListView::getResType(path) == SearchListView::ResType::Setting) {
QIcon icon = FileUtils::getSettingIcon(path, true);
m_iconlabel->setPixmap(icon.pixmap(icon.actualSize(QSize(48, 48))));
m_namelabel->setText(FileUtils::getSettingName(path));
this->setToolTip(FileUtils::getSettingName(path));
} else {
QIcon icon = FileUtils::getAppIcon(path);
m_iconlabel->setPixmap(icon.pixmap(icon.actualSize(QSize(48, 48))));
m_namelabel->setText(FileUtils::getAppName(path));
this->setToolTip(FileUtils::getAppName(path));
}
} else {
QIcon icon = FileUtils::getAppIcon(path);
m_iconlabel->setPixmap(icon.pixmap(icon.actualSize(QSize(48, 48))));

View File

@ -53,17 +53,22 @@ OptionView::~OptionView()
delete m_copyPathLabel;
m_copyPathLabel = NULL;
}
if (m_installLabel) {
delete m_installLabel;
m_installLabel = NULL;
}
}
/**
* @brief OptionView::initComponent
* @param type
* @param is_appInstalled
*/
void OptionView::setupOptions(const int& type) {
void OptionView::setupOptions(const int& type, bool is_appInstalled) {
this->hideOptions();
switch (type) {
case SearchListView::ResType::App : {
setupAppOptions();
setupAppOptions(is_appInstalled);
break;
}
case SearchListView::ResType::Content:
@ -127,6 +132,13 @@ void OptionView::initUI()
m_copyPathLabel->installEventFilter(this);
m_optionLyt->addWidget(m_copyPathLabel);
m_installLabel = new QLabel(m_optionFrame);
m_installLabel->setText(tr("Install")); //复制所在路径
m_installLabel->setStyleSheet("QLabel{font-size: 14px; color: #3790FA}");
m_installLabel->setCursor(QCursor(Qt::PointingHandCursor));
m_installLabel->installEventFilter(this);
m_optionLyt->addWidget(m_installLabel);
m_optionLyt->addStretch();
m_optionFrame->setLayout(m_optionLyt);
m_mainLyt->addWidget(m_optionFrame);
@ -159,6 +171,10 @@ void OptionView::setupOptionLabel(const int& opt) {
m_copyPathLabel->show();
break;
}
case Options::Install: {
m_installLabel->show();
break;
}
default:
break;
}
@ -171,15 +187,21 @@ void OptionView::hideOptions()
m_panelLabel->hide();
m_openPathLabel->hide();
m_copyPathLabel->hide();
m_installLabel->hide();
}
/**
* @brief OptionView::setupAppOptions
* @param is_installed
*/
void OptionView::setupAppOptions() {
void OptionView::setupAppOptions(bool is_installed) {
if (is_installed) {
setupOptionLabel(Options::Open);
setupOptionLabel(Options::Shortcut);
setupOptionLabel(Options::Panel);
} else {
setupOptionLabel(Options::Install);
}
}
/**
@ -289,6 +311,21 @@ bool OptionView::eventFilter(QObject *watched, QEvent *event){
m_copyPathLabel->setStyleSheet("QLabel{font-size: 14px; color: #3790FA}");
return true;
}
} else if (m_installLabel && watched == m_installLabel) {
if (event->type() == QEvent::MouseButtonPress) {
m_installLabel->setStyleSheet("QLabel{font-size: 14px; color: #296CD9;}");
return true;
} else if (event->type() == QEvent::MouseButtonRelease) {
m_installLabel->setStyleSheet("QLabel{font-size: 14px; color: #3790FA}");
Q_EMIT this->onOptionClicked(Options::Install);
return true;
} else if (event->type() == QEvent::Enter) {
m_installLabel->setStyleSheet("QLabel{font-size: 14px; color: #40A9FB;}");
return true;
} else if (event->type() == QEvent::Leave) {
m_installLabel->setStyleSheet("QLabel{font-size: 14px; color: #3790FA}");
return true;
}
}
return QObject::eventFilter(watched, event);
}

View File

@ -34,14 +34,15 @@ class OptionView : public QWidget
public:
explicit OptionView(QWidget *);
~OptionView();
void setupOptions(const int&);
void setupOptions(const int&, bool is_appInstalled = true);
enum Options {
Open,
Shortcut,
Panel,
OpenPath,
CopyPath
CopyPath,
Install
};
protected:
@ -49,7 +50,7 @@ protected:
private:
void initUI();
void setupAppOptions();
void setupAppOptions(bool);
void setupFileOptions();
void setupDirOptions();
void setupSettingOptions();
@ -66,6 +67,7 @@ private:
QLabel * m_panelLabel = nullptr;
QLabel * m_openPathLabel = nullptr;
QLabel * m_copyPathLabel = nullptr;
QLabel * m_installLabel = nullptr;
Q_SIGNALS:
void onOptionClicked(const int&);

View File

@ -173,6 +173,43 @@ void SearchDetailView::setWebWidget(const QString& keyword)
m_webView->show();
}
void SearchDetailView::setAppWidget(const QString &appname, const QString &path, const QString &iconpath)
{
m_type = SearchListView::ResType::App;
m_path = path;
m_name = appname;
m_isEmpty = false;
clearLayout();
m_iconLabel->show();
m_nameFrame->show();
m_nameLabel->show();
m_typeLabel->show();
m_hLine->show();
QIcon icon;
if (path.isEmpty() || path == "") {
icon = QIcon(iconpath);
m_optionView->setupOptions(m_type, false);
} else {
m_optionView->setupOptions(m_type, true);
if (QIcon::fromTheme(iconpath).isNull()) {
icon = QIcon(":/res/icons/desktop.png");
} else {
icon = QIcon::fromTheme(iconpath);
}
}
m_optionView->show();
m_iconLabel->setPixmap(icon.pixmap(icon.actualSize(QSize(96, 96))));
QFontMetrics fontMetrics = m_nameLabel->fontMetrics();
QString showname = fontMetrics.elidedText(appname, Qt::ElideRight, 215); //当字体长度超过215时显示为省略号
m_nameLabel->setText(showname);
if (QString::compare(showname, appname)) {
m_nameLabel->setToolTip(appname);
}
m_typeLabel->setText(tr("Application"));
}
void SearchDetailView::closeWebWidget()
{
if (m_webView) {
@ -234,7 +271,7 @@ void SearchDetailView::setupWidget(const int& type, const QString& path) {
m_hLine->show();
//文件和文件夹有一个额外的详情区域
if (type == SearchListView::ResType::Dir || type == SearchListView::ResType::File || type == SearchListView::ResType::Content || type == SearchListView::ResType::Best) {
if (type == SearchListView::ResType::Dir || type == SearchListView::ResType::File || type == SearchListView::ResType::Content) {
m_detailFrame->show();
if (isContent) { //文件内容区域
m_contentLabel->show();
@ -276,21 +313,7 @@ void SearchDetailView::setupWidget(const int& type, const QString& path) {
//根据不同类型的搜索结果切换加载图片和名称的方式
switch (type) {
case SearchListView::ResType::App : {
QIcon icon = FileUtils::getAppIcon(path);
m_iconLabel->setPixmap(icon.pixmap(icon.actualSize(QSize(96, 96))));
QFontMetrics fontMetrics = m_nameLabel->fontMetrics();
QString wholeName = FileUtils::getAppName(path);
QString name = fontMetrics.elidedText(wholeName, Qt::ElideRight, 215); //当字体长度超过215时显示为省略号
m_nameLabel->setText(name);
if (QString::compare(name, wholeName)) {
m_nameLabel->setToolTip(wholeName);
}
m_typeLabel->setText(tr("Application"));
break;
}
case SearchListView::ResType::Content:
case SearchListView::ResType::Best:
case SearchListView::ResType::Dir :
case SearchListView::ResType::File : {
QIcon icon = FileUtils::getFileIcon(QString("file://%1").arg(path));
@ -347,6 +370,9 @@ void SearchDetailView::execActions(const int& type, const int& option, const QSt
copyPathAction(path);
break;
}
case OptionView::Options::Install: {
installAppAction(m_name); //未安装应用点击此选项,不使用路径作为参数,而是使用软件名
}
default:
break;
}
@ -552,6 +578,18 @@ bool SearchDetailView::copyPathAction(const QString& path) {
return true;
}
/**
* @brief SearchDetailView::installAppAction
* @param name
* @return
*/
bool SearchDetailView::installAppAction(const QString & name)
{
//打开软件商店下载此软件
QProcess process;
process.startDetached(QString("kylin-software-center -find %1").arg(name));
}
void SearchDetailView::paintEvent(QPaintEvent *event) {
Q_UNUSED(event)

View File

@ -44,6 +44,7 @@ public:
int getType();
bool isContent = false;
void setWebWidget(const QString&);
void setAppWidget(const QString &name, const QString &path, const QString &icon);
void closeWebWidget();
protected:
@ -58,12 +59,14 @@ private:
bool addPanelShortcut(const QString&);
bool openPathAction(const QString&);
bool copyPathAction(const QString&);
bool installAppAction(const QString&);
QString getHtmlText(const QString&, const QString&);
QString escapeHtml(const QString&);
bool writeConfigFile(const QString&);
bool m_isEmpty = true;
int m_type = 0;
QString m_path = 0;
QString m_name = 0; //目前只有未安装应用在打开软件商店时需要此参数
void initUI();
QLabel * m_iconLabel = nullptr;

View File

@ -88,6 +88,16 @@ void SearchListView::setList(QStringList list)
this->setFixedHeight(m_item->getCurrentSize() * rowheight + 4);
}
void SearchListView::setAppList(const QStringList &pathlist, const QStringList &iconlist)
{
m_model->setAppList(pathlist, iconlist);
}
void SearchListView::appendBestItem(const QPair<int, QString> &pair)
{
m_model->appendBestItem(pair);
}
/**
* @brief SearchListView::removeItem
*/
@ -153,7 +163,8 @@ int SearchListView::getCurrentType() {
case SearchItem::SearchType::Web:
return ResType::Web;
default: //All或者Best的情况需要自己判断文件类型
return getResType(m_item->m_pathlist.at(this->currentIndex().row()));
// return getResType(m_item->m_pathlist.at(this->currentIndex().row()));
return ResType::Best;
break;
}
}
@ -165,17 +176,12 @@ int SearchListView::getCurrentType() {
*/
int SearchListView::getResType(const QString& path) {
if (path.endsWith(".desktop")) {
// qDebug()<<"qDebug: One row selected, its path is "<<path<<". Its type is application.";
return SearchListView::ResType::App;
} else if (QFileInfo(path).isFile()) {
// qDebug()<<"qDebug: One row selected, its path is "<<path<<". Its type is file.";
// return SearchListView::ResType::File;
return SearchListView::ResType::Best;
} else if (QFileInfo(path).isDir()) {
// qDebug()<<"qDebug: One row selected, its path is "<<path<<". Its type is dir.";
return SearchListView::ResType::Dir;
} else {
// qDebug()<<"qDebug: One row selected, its path is "<<path<<". Its type is setting.";
return SearchListView::ResType::Setting;
}
}

View File

@ -52,6 +52,8 @@ public:
void appendItem(QString);
void setList(QStringList);
void setAppList(const QStringList&, const QStringList&);
void appendBestItem(const QPair<int, QString>&);
void removeItem(QString);
void clear();
void setKeyword(QString);

View File

@ -96,19 +96,25 @@ MainWindow::MainWindow(QWidget *parent) :
m_search_result_dir = new QQueue<QString>;
m_search_result_content = new QQueue<QPair<QString,QStringList>>;
m_search_result_thread = new SearchResult(this);
m_seach_app_thread = new SearchAppThread(this);
// m_search_result_thread->start();
connect(m_search_result_thread, &SearchResult::searchResultFile, this, [ = ](QString path) {
qDebug()<<"Append a file into list: "<<path;
// qDebug()<<"Append a file into list: "<<path;
m_contentFrame->appendSearchItem(SearchItem::SearchType::Files, path);
});
connect(m_search_result_thread, &SearchResult::searchResultDir, this, [ = ](QString path) {
qDebug()<<"Append a dir into list: "<<path;
// qDebug()<<"Append a dir into list: "<<path;
m_contentFrame->appendSearchItem(SearchItem::SearchType::Dirs, path);
});
connect(m_search_result_thread, &SearchResult::searchResultContent, this, [ = ](QPair<QString, QStringList> pair) {
qDebug()<<"Append a file content into list: "<<pair.first;
// qDebug()<<"Append a file content into list: "<<pair.first;
m_contentFrame->appendSearchItem(SearchItem::SearchType::Contents, pair.first, pair.second);
});
qRegisterMetaType<QVector<QStringList>>("QVector<QStringList>");
connect(m_seach_app_thread, &SearchAppThread::searchResultApp, this, [ = ](const QVector<QStringList>& applist) {
qDebug()<<"Append applist: "<<applist;
m_contentFrame->setAppList(applist);
});
m_sys_tray_icon = new QSystemTrayIcon(this);
m_sys_tray_icon->setIcon(QIcon::fromTheme("system-search-symbolic"));
@ -219,6 +225,7 @@ void MainWindow::initUi()
m_search_result_thread->requestInterruption();
m_search_result_thread->quit();
}
m_seach_app_thread->stop();
m_contentFrame->setCurrentIndex(0);
} else {
m_contentFrame->setCurrentIndex(1);
@ -291,27 +298,22 @@ void MainWindow::primaryScreenChangedSlot(QScreen *screen)
* @brief searchContent
* @param searchcontent
*/
void MainWindow::searchContent(QString searchcontent){
m_app_setting_lists.clear();
m_contentFrame->setKeyword(searchcontent);
void MainWindow::searchContent(QString keyword){
m_contentFrame->setKeyword(keyword);
// m_search_result_file->clear();
// m_search_result_dir->clear();
// m_search_result_content->clear();
AppMatch * appMatchor = new AppMatch(this);
//设置搜索
SettingsMatch * settingMatchor = new SettingsMatch(this);
//应用与设置搜索
QStringList appList;
appList = appMatchor->startMatchApp(searchcontent);
QStringList settingList;
settingList = settingMatchor->startMatchApp(searchcontent);
m_app_setting_lists.append(appList);
m_app_setting_lists.append(settingList);
m_contentFrame->refreshSearchList(m_app_setting_lists);
settingList = settingMatchor->startMatchApp(keyword);
m_contentFrame->resetSearchList();
m_contentFrame->setSettingList(settingList);
//应用搜索
m_seach_app_thread->stop();
m_seach_app_thread->startSearch(keyword);
//文件、文件夹、内容搜索
this->m_searcher->onKeywordSearch(searchcontent, m_search_result_file, m_search_result_dir, m_search_result_content);
this->m_searcher->onKeywordSearch(keyword, m_search_result_file, m_search_result_dir, m_search_result_content);
}
/**
@ -385,6 +387,7 @@ bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, long *r
m_contentFrame->closeWebView();
m_search_result_thread->requestInterruption();
m_search_result_thread->quit();
m_seach_app_thread->stop();
break;
}
@ -398,6 +401,7 @@ void MainWindow::keyPressEvent(QKeyEvent *event)
m_contentFrame->closeWebView();
m_search_result_thread->requestInterruption();
m_search_result_thread->quit();
m_seach_app_thread->stop();
}
return QWidget::keyPressEvent(event);
}

View File

@ -48,6 +48,7 @@
#include "index/index-generator.h"
#include "settings-widget.h"
#include "libsearch.h"
#include "search-app-thread.h"
class SearchResult;
class MainWindow : public QMainWindow
@ -87,13 +88,13 @@ private:
QGSettings * m_transparency_gsettings = nullptr;
double getTransparentData();
QVector<QStringList> m_app_setting_lists;
QStringList m_dirList;
QQueue<QString> *m_search_result_file = nullptr;
QQueue<QString> *m_search_result_dir = nullptr;
QQueue<QPair<QString,QStringList>> *m_search_result_content = nullptr;
SearchResult * m_search_result_thread = nullptr;
SearchAppThread * m_seach_app_thread = nullptr;
FileSearcher* m_searcher = nullptr;
QSystemTrayIcon *m_sys_tray_icon;

View File

@ -145,7 +145,7 @@ void SearchItemModel::appendItem(QString path) {
this->beginResetModel();
m_item->m_pathlist << path;
this->endResetModel();
// this->insertRow(rowCount(QModelIndex()) - 1);
// this->insertRow(rowCount(QModelIndex()) - 1);
}
/**
@ -159,6 +159,23 @@ void SearchItemModel::setList(QStringList list)
this->endResetModel();
}
void SearchItemModel::setAppList(const QStringList &pathlist, const QStringList &iconlist)
{
this->beginResetModel();
m_item->m_app_pathlist = pathlist;
m_item->m_app_iconlist = iconlist;
this->endResetModel();
}
/**
* @brief SearchItemModel::insertBestItem
* @param pair <>
*/
void SearchItemModel::appendBestItem(const QPair<int, QString> & pair)
{
m_item->m_bestList.append(pair);
}
/**
* @brief SearchItemModel::removeItem
*/
@ -172,3 +189,17 @@ void SearchItemModel::clear()
m_item->clear();
this->endResetModel();
}
/**
* @brief SearchItemModel::setBestAppIcon
* @param str
* @param is_installed
*/
void SearchItemModel::setBestAppIcon(const QString &str, const bool & is_installed)
{
if (is_installed) {
m_item->m_bestAppIcon = QIcon::fromTheme(str);
} else {
m_item->m_bestAppIcon = QIcon(str);
}
}

View File

@ -54,8 +54,11 @@ public:
void appendItem(QString);
void setList(QStringList);
void setAppList(const QStringList&, const QStringList&);
void appendBestItem(const QPair<int, QString>&);
void removeItem(QString);
void clear();
void setBestAppIcon(const QString &, const bool &);
private :
SearchItem * m_item = nullptr;

View File

@ -45,17 +45,22 @@ QIcon SearchItem::getIcon(int index) {
case Dirs :
case Files : //文件,返回文件图标
return FileUtils::getFileIcon(QString("file://%1").arg(m_pathlist.at(index)));
case Apps : //应用,返回应用图标
return FileUtils::getAppIcon(m_pathlist.at(index));
case Best : {//最佳匹配,含全部类型,需要自己判断,返回不同类型的图标
// return QIcon(":/res/icons/edit-find-symbolic.svg");
if (m_pathlist.at(index).endsWith(".desktop")) {
return FileUtils::getAppIcon(m_pathlist.at(index));
} else if (QFileInfo(m_pathlist.at(index)).isFile() || QFileInfo(m_pathlist.at(index)).isDir()) {
return FileUtils::getFileIcon(QString("file://%1").arg(m_pathlist.at(index)));
case Apps : {//应用,返回应用图标
// return FileUtils::getAppIcon(m_pathlist.at(index));
if (m_app_pathlist.length() > index && m_app_pathlist.at(index) == "") { //未安装,存储的是图标路径
return QIcon(m_app_iconlist.at(index));
} else if (m_app_pathlist.length() > index) { //已安装,存储的是图标名
if (QIcon::fromTheme(m_app_iconlist.at(index)).isNull()) {
return QIcon(":/res/icons/desktop.png");
} else {
return FileUtils::getSettingIcon(m_pathlist.at(index), false);
return QIcon::fromTheme(m_app_iconlist.at(index));
}
} else {
return QIcon(":/res/icons/desktop.png");
}
}
case Best : {//最佳匹配,含全部类型,需要自己判断,返回不同类型的图标
return getBestIcon(index);
}
default:
return QIcon(":/res/icons/edit-find-symbolic.svg");
@ -77,22 +82,66 @@ QString SearchItem::getName(int index) {
case Dirs :
case Files : //文件,返回文件名
return FileUtils::getFileName(m_pathlist.at(index));
case Apps : //应用,返回应用名
return FileUtils::getAppName(m_pathlist.at(index));
case Best : //最佳匹配,含全部类型,需要自己判断,返回不同类型的名称
// return m_pathlist.at(index);
if (m_pathlist.at(index).endsWith(".desktop")) {
return FileUtils::getAppName(m_pathlist.at(index));
} else if (QFileInfo(m_pathlist.at(index)).isFile() || QFileInfo(m_pathlist.at(index)).isDir()) {
return FileUtils::getFileName(m_pathlist.at(index));
} else {
return FileUtils::getSettingName(m_pathlist.at(index));
case Apps : {//应用,返回应用名
return m_pathlist.at(index);
}
case Best : //最佳匹配,含全部类型,需要自己判断,返回不同类型的名称
return getBestName(index);
default:
return m_pathlist.at(index);
}
}
/**
* @brief SearchItem::getBestIcon
* @param index
* @return
*/
QIcon SearchItem::getBestIcon(const int &index)
{
// if (m_pathlist.at(index).endsWith(".desktop")) {
// return FileUtils::getAppIcon(m_pathlist.at(index));
// } else if (QFileInfo(m_pathlist.at(index)).isFile() || QFileInfo(m_pathlist.at(index)).isDir()) {
// return FileUtils::getFileIcon(QString("file://%1").arg(m_pathlist.at(index)));
// } else {
// return FileUtils::getSettingIcon(m_pathlist.at(index), false);
// }
if (m_bestList.isEmpty() || !m_bestList.length() > index) return QIcon::fromTheme("unknown");
switch(m_bestList.at(index).first) {
case Apps: {
return this->m_bestAppIcon;
// return FileUtils::getAppIcon(m_pathlist.at(index));
}
case Settings: {
return FileUtils::getSettingIcon(m_pathlist.at(index), false);
}
default: {
return FileUtils::getFileIcon(QString("file://%1").arg(m_pathlist.at(index)));
}
}
}
/**
* @brief SearchItem::getBestName
* @param index
* @return
*/
QString SearchItem::getBestName(const int &index)
{
if (m_bestList.isEmpty() || !m_bestList.length() > index) return "";
switch(m_bestList.at(index).first) {
case Apps: {
return m_bestList.at(index).second;
}
case Settings: {
return FileUtils::getSettingName(m_pathlist.at(index));
}
default: {
return FileUtils::getFileName(m_pathlist.at(index));
}
}
}
/**
* @brief SearchItem::setSearchList
* @param type
@ -117,4 +166,7 @@ int SearchItem::getCurrentSize() {
void SearchItem::clear()
{
m_pathlist.clear();
m_app_pathlist.clear();
m_app_iconlist.clear();
m_bestList.clear();
}

View File

@ -56,9 +56,16 @@ private:
int m_searchtype = 0;
QStringList m_pathlist;
QStringList m_app_pathlist;
QStringList m_app_iconlist;
QList<QPair<int, QString>> m_bestList;
QIcon m_bestAppIcon = QIcon::fromTheme("unknown"); //由于未安装应用与已安装应用获取图标方式不一致,故引入此变量直接存储最佳匹配应用图标
QIcon getIcon(int);
QString getName(int);
QIcon getBestIcon(const int &);
QString getBestName(const int &);
Q_SIGNALS:

54
src/search-app-thread.cpp Normal file
View File

@ -0,0 +1,54 @@
#include "search-app-thread.h"
SearchAppThread::SearchAppThread(QObject * parent) : QThread(parent)
{
m_appMatch = new AppMatch(this);
}
SearchAppThread::~SearchAppThread()
{
if (m_appMatch) {
delete m_appMatch;
m_appMatch = NULL;
}
}
/**
* @brief SearchAppThread::startSearch 线
* @param keyword
*/
void SearchAppThread::startSearch(const QString & keyword)
{
m_keyword = keyword;
m_stop = false;
this->start();
}
void SearchAppThread::stop()
{
m_stop = true;
this->quit();
this->wait();
}
void SearchAppThread::run()
{
//nameList:应用名pathList:已安装的是.desktop路径未安装为空iconList:已安装的是图标名,未安装的是图标路径
QStringList nameList, pathList, iconList;
QVector<QStringList> applist;
QMap<QString, QList<QString>> appList;
appList = m_appMatch->startMatchApp(m_keyword);
QMapIterator<QString,QList<QString>> iter(appList);
while(iter.hasNext())
{
iter.next();
nameList << iter.key();
pathList << iter.value().at(0);
iconList << iter.value().at(1);
}
applist.append(nameList);
applist.append(pathList);
applist.append(iconList);
if (!m_stop)
Q_EMIT this->searchResultApp(applist);
}

25
src/search-app-thread.h Normal file
View File

@ -0,0 +1,25 @@
#ifndef SEARCHAPPTHREAD_H
#define SEARCHAPPTHREAD_H
#include <QThread>
#include "libsearch.h"
class SearchAppThread : public QThread
{
Q_OBJECT
public:
SearchAppThread(QObject * parent = nullptr);
~SearchAppThread();
void startSearch(const QString&);
void stop();
protected:
void run() override;
private:
AppMatch * m_appMatch = nullptr;
QString m_keyword;
bool m_stop = false;
Q_SIGNALS:
void searchResultApp(const QVector<QStringList>&);
};
#endif // SEARCHAPPTHREAD_H

View File

@ -29,6 +29,7 @@ SOURCES += \
input-box.cpp \
main.cpp \
mainwindow.cpp \
search-app-thread.cpp \
search-result.cpp \
settings-widget.cpp \
xatom-helper.cpp
@ -38,6 +39,7 @@ HEADERS += \
content-widget.h \
input-box.h \
mainwindow.h \
search-app-thread.h \
search-result.h \
settings-widget.h \
xatom-helper.h

View File

@ -4,57 +4,57 @@
<context>
<name>ContentWidget</name>
<message>
<location filename="../../src/content-widget.cpp" line="354"/>
<location filename="../../src/content-widget.cpp" line="370"/>
<source>Recently Opened</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="390"/>
<location filename="../../src/content-widget.cpp" line="406"/>
<source>Open Quickly</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="391"/>
<location filename="../../src/content-widget.cpp" line="407"/>
<source>Commonly Used</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="653"/>
<location filename="../../src/content-widget.cpp" line="670"/>
<source>Apps</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="655"/>
<location filename="../../src/content-widget.cpp" line="672"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="657"/>
<location filename="../../src/content-widget.cpp" line="674"/>
<source>Files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="659"/>
<location filename="../../src/content-widget.cpp" line="676"/>
<source>Dirs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="661"/>
<location filename="../../src/content-widget.cpp" line="678"/>
<source>File Contents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="663"/>
<location filename="../../src/content-widget.cpp" line="680"/>
<source>Best Matches</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="665"/>
<location filename="../../src/content-widget.cpp" line="682"/>
<source>Web Pages</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="667"/>
<location filename="../../src/content-widget.cpp" line="684"/>
<source>Unknown</source>
<translation type="unfinished"></translation>
</message>
@ -75,12 +75,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/mainwindow.cpp" line="115"/>
<location filename="../../src/mainwindow.cpp" line="121"/>
<source>Global Search</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/mainwindow.cpp" line="169"/>
<location filename="../../src/mainwindow.cpp" line="175"/>
<source>Search</source>
<translation type="unfinished"></translation>
</message>
@ -88,35 +88,40 @@
<context>
<name>OptionView</name>
<message>
<location filename="../../src/control/option-view.cpp" line="96"/>
<location filename="../../src/control/option-view.cpp" line="101"/>
<source>Open</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/control/option-view.cpp" line="103"/>
<location filename="../../src/control/option-view.cpp" line="108"/>
<source>Add Shortcut to Desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/control/option-view.cpp" line="110"/>
<location filename="../../src/control/option-view.cpp" line="115"/>
<source>Add Shortcut to Panel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/control/option-view.cpp" line="117"/>
<location filename="../../src/control/option-view.cpp" line="122"/>
<source>Open path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/control/option-view.cpp" line="124"/>
<location filename="../../src/control/option-view.cpp" line="129"/>
<source>Copy path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/control/option-view.cpp" line="136"/>
<source>Install</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="../../src/main.cpp" line="149"/>
<location filename="../../src/main.cpp" line="150"/>
<source>ukui-search is already running!</source>
<translation type="unfinished"></translation>
</message>
@ -132,22 +137,22 @@
<context>
<name>SearchDetailView</name>
<message>
<location filename="../../src/control/search-detail-view.cpp" line="406"/>
<location filename="../../src/control/search-detail-view.cpp" line="485"/>
<source>Path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/control/search-detail-view.cpp" line="414"/>
<location filename="../../src/control/search-detail-view.cpp" line="493"/>
<source>Last time modified</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/control/search-detail-view.cpp" line="236"/>
<location filename="../../src/control/search-detail-view.cpp" line="210"/>
<source>Application</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/control/search-detail-view.cpp" line="253"/>
<location filename="../../src/control/search-detail-view.cpp" line="329"/>
<source>Document</source>
<translation type="unfinished"></translation>
</message>
@ -155,55 +160,55 @@
<context>
<name>SettingsWidget</name>
<message>
<location filename="../../src/settings-widget.cpp" line="69"/>
<location filename="../../src/settings-widget.cpp" line="267"/>
<location filename="../../src/settings-widget.cpp" line="470"/>
<location filename="../../src/settings-widget.cpp" line="70"/>
<location filename="../../src/settings-widget.cpp" line="281"/>
<location filename="../../src/settings-widget.cpp" line="514"/>
<source>Search</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="99"/>
<location filename="../../src/settings-widget.cpp" line="101"/>
<location filename="../../src/settings-widget.cpp" line="100"/>
<location filename="../../src/settings-widget.cpp" line="102"/>
<source>...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="111"/>
<location filename="../../src/settings-widget.cpp" line="112"/>
<source>Following folders will not be searched. You can set it by adding and removing folders.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="120"/>
<location filename="../../src/settings-widget.cpp" line="121"/>
<source>Add ignored folders</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="143"/>
<location filename="../../src/settings-widget.cpp" line="144"/>
<source>Please select search engine you preferred.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="156"/>
<location filename="../../src/settings-widget.cpp" line="157"/>
<source>baidu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="158"/>
<location filename="../../src/settings-widget.cpp" line="159"/>
<source>sougou</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="160"/>
<location filename="../../src/settings-widget.cpp" line="161"/>
<source>360</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="359"/>
<location filename="../../src/settings-widget.cpp" line="403"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="298"/>
<location filename="../../src/settings-widget.cpp" line="342"/>
<source>Creating ...</source>
<translation type="unfinished"></translation>
</message>
@ -213,97 +218,97 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="92"/>
<location filename="../../src/settings-widget.cpp" line="93"/>
<source>&lt;h2&gt;Settings&lt;/h2&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="97"/>
<location filename="../../src/settings-widget.cpp" line="98"/>
<source>&lt;h3&gt;Index State&lt;/h3&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="109"/>
<location filename="../../src/settings-widget.cpp" line="110"/>
<source>&lt;h3&gt;File Index Settings&lt;/h3&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="141"/>
<location filename="../../src/settings-widget.cpp" line="142"/>
<source>&lt;h3&gt;Search Engine Settings&lt;/h3&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="267"/>
<location filename="../../src/settings-widget.cpp" line="281"/>
<source>Whether to delete this directory?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="268"/>
<location filename="../../src/settings-widget.cpp" line="282"/>
<source>Yes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="269"/>
<location filename="../../src/settings-widget.cpp" line="283"/>
<source>No</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="301"/>
<location filename="../../src/settings-widget.cpp" line="345"/>
<source>Done</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="309"/>
<location filename="../../src/settings-widget.cpp" line="353"/>
<source>Index Entry: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="353"/>
<location filename="../../src/settings-widget.cpp" line="397"/>
<source>Directories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="354"/>
<location filename="../../src/settings-widget.cpp" line="398"/>
<source>select blocked folder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="355"/>
<location filename="../../src/settings-widget.cpp" line="399"/>
<source>Select</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="356"/>
<location filename="../../src/settings-widget.cpp" line="400"/>
<source>Position: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="357"/>
<location filename="../../src/settings-widget.cpp" line="401"/>
<source>FileName: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="358"/>
<location filename="../../src/settings-widget.cpp" line="402"/>
<source>FileType: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="454"/>
<location filename="../../src/settings-widget.cpp" line="498"/>
<source>Choosen path is Empty!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="458"/>
<location filename="../../src/settings-widget.cpp" line="502"/>
<source>Choosen path is not in &quot;home&quot;!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="462"/>
<location filename="../../src/settings-widget.cpp" line="506"/>
<source>Its&apos; parent folder has been blocked!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="466"/>
<location filename="../../src/settings-widget.cpp" line="510"/>
<source>Set blocked folder failed!</source>
<translation type="unfinished"></translation>
</message>

View File

@ -4,57 +4,57 @@
<context>
<name>ContentWidget</name>
<message>
<location filename="../../src/content-widget.cpp" line="354"/>
<location filename="../../src/content-widget.cpp" line="370"/>
<source>Recently Opened</source>
<translation>Yeni ılan</translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="390"/>
<location filename="../../src/content-widget.cpp" line="406"/>
<source>Open Quickly</source>
<translation>Hızlı </translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="391"/>
<location filename="../../src/content-widget.cpp" line="407"/>
<source>Commonly Used</source>
<translation>Genel olarak kullanılan</translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="653"/>
<location filename="../../src/content-widget.cpp" line="670"/>
<source>Apps</source>
<translation>Uygulamalar</translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="655"/>
<location filename="../../src/content-widget.cpp" line="672"/>
<source>Settings</source>
<translation>Ayarlar</translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="657"/>
<location filename="../../src/content-widget.cpp" line="674"/>
<source>Files</source>
<translation>Dosyalar</translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="659"/>
<location filename="../../src/content-widget.cpp" line="676"/>
<source>Dirs</source>
<translation>Dizinler</translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="661"/>
<location filename="../../src/content-widget.cpp" line="678"/>
<source>File Contents</source>
<translation>Dosya İçeriği</translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="663"/>
<location filename="../../src/content-widget.cpp" line="680"/>
<source>Best Matches</source>
<translation>En İyi Eşleşen</translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="665"/>
<location filename="../../src/content-widget.cpp" line="682"/>
<source>Web Pages</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="667"/>
<location filename="../../src/content-widget.cpp" line="684"/>
<source>Unknown</source>
<translation>Bilinmeyen</translation>
</message>
@ -75,12 +75,12 @@
<translation>ukui-ara</translation>
</message>
<message>
<location filename="../../src/mainwindow.cpp" line="115"/>
<location filename="../../src/mainwindow.cpp" line="121"/>
<source>Global Search</source>
<translation>Genel Arama</translation>
</message>
<message>
<location filename="../../src/mainwindow.cpp" line="169"/>
<location filename="../../src/mainwindow.cpp" line="175"/>
<source>Search</source>
<translation>Ara</translation>
</message>
@ -88,35 +88,40 @@
<context>
<name>OptionView</name>
<message>
<location filename="../../src/control/option-view.cpp" line="96"/>
<location filename="../../src/control/option-view.cpp" line="101"/>
<source>Open</source>
<translation></translation>
</message>
<message>
<location filename="../../src/control/option-view.cpp" line="103"/>
<location filename="../../src/control/option-view.cpp" line="108"/>
<source>Add Shortcut to Desktop</source>
<translation>Masaüstüne Kısayol Ekle</translation>
</message>
<message>
<location filename="../../src/control/option-view.cpp" line="110"/>
<location filename="../../src/control/option-view.cpp" line="115"/>
<source>Add Shortcut to Panel</source>
<translation>Panele Kısayol Ekle</translation>
</message>
<message>
<location filename="../../src/control/option-view.cpp" line="117"/>
<location filename="../../src/control/option-view.cpp" line="122"/>
<source>Open path</source>
<translation>Yolu </translation>
</message>
<message>
<location filename="../../src/control/option-view.cpp" line="124"/>
<location filename="../../src/control/option-view.cpp" line="129"/>
<source>Copy path</source>
<translation>Yolu kopyala</translation>
</message>
<message>
<location filename="../../src/control/option-view.cpp" line="136"/>
<source>Install</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="../../src/main.cpp" line="149"/>
<location filename="../../src/main.cpp" line="150"/>
<source>ukui-search is already running!</source>
<translation>ukui-bul zaten çalışıyor!</translation>
</message>
@ -132,22 +137,22 @@
<context>
<name>SearchDetailView</name>
<message>
<location filename="../../src/control/search-detail-view.cpp" line="406"/>
<location filename="../../src/control/search-detail-view.cpp" line="485"/>
<source>Path</source>
<translation>Yol</translation>
</message>
<message>
<location filename="../../src/control/search-detail-view.cpp" line="414"/>
<location filename="../../src/control/search-detail-view.cpp" line="493"/>
<source>Last time modified</source>
<translation>Son değiştirilme zamanı</translation>
</message>
<message>
<location filename="../../src/control/search-detail-view.cpp" line="236"/>
<location filename="../../src/control/search-detail-view.cpp" line="210"/>
<source>Application</source>
<translation>Uygulama</translation>
</message>
<message>
<location filename="../../src/control/search-detail-view.cpp" line="253"/>
<location filename="../../src/control/search-detail-view.cpp" line="329"/>
<source>Document</source>
<translation>Belge</translation>
</message>
@ -155,55 +160,55 @@
<context>
<name>SettingsWidget</name>
<message>
<location filename="../../src/settings-widget.cpp" line="69"/>
<location filename="../../src/settings-widget.cpp" line="267"/>
<location filename="../../src/settings-widget.cpp" line="470"/>
<location filename="../../src/settings-widget.cpp" line="70"/>
<location filename="../../src/settings-widget.cpp" line="281"/>
<location filename="../../src/settings-widget.cpp" line="514"/>
<source>Search</source>
<translation>Ara</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="99"/>
<location filename="../../src/settings-widget.cpp" line="101"/>
<location filename="../../src/settings-widget.cpp" line="100"/>
<location filename="../../src/settings-widget.cpp" line="102"/>
<source>...</source>
<translation>...</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="111"/>
<location filename="../../src/settings-widget.cpp" line="112"/>
<source>Following folders will not be searched. You can set it by adding and removing folders.</source>
<translation>Aşağıdaki klasörler aranmayacaktır. Klasör ekleyip kaldırarak ayarlayabilirsiniz.</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="120"/>
<location filename="../../src/settings-widget.cpp" line="121"/>
<source>Add ignored folders</source>
<translation>Göz ardı edilen klasörleri ekleyin</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="143"/>
<location filename="../../src/settings-widget.cpp" line="144"/>
<source>Please select search engine you preferred.</source>
<translation>Lütfen tercih ettiğiniz arama motorunu seçin.</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="156"/>
<location filename="../../src/settings-widget.cpp" line="157"/>
<source>baidu</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="158"/>
<location filename="../../src/settings-widget.cpp" line="159"/>
<source>sougou</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="160"/>
<location filename="../../src/settings-widget.cpp" line="161"/>
<source>360</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="359"/>
<location filename="../../src/settings-widget.cpp" line="403"/>
<source>Cancel</source>
<translation>İptal</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="298"/>
<location filename="../../src/settings-widget.cpp" line="342"/>
<source>Creating ...</source>
<translation>Oluşturuluyor...</translation>
</message>
@ -213,97 +218,97 @@
<translation>ukui-bul</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="92"/>
<location filename="../../src/settings-widget.cpp" line="93"/>
<source>&lt;h2&gt;Settings&lt;/h2&gt;</source>
<translation>&lt;h2&gt;Ayarlar&lt;/h2&gt;</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="97"/>
<location filename="../../src/settings-widget.cpp" line="98"/>
<source>&lt;h3&gt;Index State&lt;/h3&gt;</source>
<translation>&lt;h3&gt;Dizin Durumu&lt;/h3&gt;</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="109"/>
<location filename="../../src/settings-widget.cpp" line="110"/>
<source>&lt;h3&gt;File Index Settings&lt;/h3&gt;</source>
<translation>&lt;h3&gt;Dosya Dizini Ayarları&lt;/h3&gt;</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="141"/>
<location filename="../../src/settings-widget.cpp" line="142"/>
<source>&lt;h3&gt;Search Engine Settings&lt;/h3&gt;</source>
<translation>&lt;h3&gt;SArama Motoru Ayarları&lt;/h3&gt;</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="267"/>
<location filename="../../src/settings-widget.cpp" line="281"/>
<source>Whether to delete this directory?</source>
<translation>Bu dizini silinsin mi?</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="268"/>
<location filename="../../src/settings-widget.cpp" line="282"/>
<source>Yes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="269"/>
<location filename="../../src/settings-widget.cpp" line="283"/>
<source>No</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="301"/>
<location filename="../../src/settings-widget.cpp" line="345"/>
<source>Done</source>
<translation>Tamam</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="309"/>
<location filename="../../src/settings-widget.cpp" line="353"/>
<source>Index Entry: %1</source>
<translation>Dizin Girişi: %1</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="353"/>
<location filename="../../src/settings-widget.cpp" line="397"/>
<source>Directories</source>
<translation>Dizinler</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="354"/>
<location filename="../../src/settings-widget.cpp" line="398"/>
<source>select blocked folder</source>
<translation>engellenen klasörü seç</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="355"/>
<location filename="../../src/settings-widget.cpp" line="399"/>
<source>Select</source>
<translation>Seç</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="356"/>
<location filename="../../src/settings-widget.cpp" line="400"/>
<source>Position: </source>
<translation>Pozisyon: </translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="357"/>
<location filename="../../src/settings-widget.cpp" line="401"/>
<source>FileName: </source>
<translation>Dosya Adı: </translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="358"/>
<location filename="../../src/settings-widget.cpp" line="402"/>
<source>FileType: </source>
<translation>Dosya Türü: </translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="454"/>
<location filename="../../src/settings-widget.cpp" line="498"/>
<source>Choosen path is Empty!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="458"/>
<location filename="../../src/settings-widget.cpp" line="502"/>
<source>Choosen path is not in &quot;home&quot;!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="462"/>
<location filename="../../src/settings-widget.cpp" line="506"/>
<source>Its&apos; parent folder has been blocked!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="466"/>
<location filename="../../src/settings-widget.cpp" line="510"/>
<source>Set blocked folder failed!</source>
<translation type="unfinished"></translation>
</message>

View File

@ -4,57 +4,57 @@
<context>
<name>ContentWidget</name>
<message>
<location filename="../../src/content-widget.cpp" line="354"/>
<location filename="../../src/content-widget.cpp" line="370"/>
<source>Recently Opened</source>
<translation></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="390"/>
<location filename="../../src/content-widget.cpp" line="406"/>
<source>Open Quickly</source>
<translation></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="391"/>
<location filename="../../src/content-widget.cpp" line="407"/>
<source>Commonly Used</source>
<translation></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="653"/>
<location filename="../../src/content-widget.cpp" line="670"/>
<source>Apps</source>
<translation></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="655"/>
<location filename="../../src/content-widget.cpp" line="672"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="657"/>
<location filename="../../src/content-widget.cpp" line="674"/>
<source>Files</source>
<translation></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="659"/>
<location filename="../../src/content-widget.cpp" line="676"/>
<source>Dirs</source>
<translation></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="661"/>
<location filename="../../src/content-widget.cpp" line="678"/>
<source>File Contents</source>
<translation></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="663"/>
<location filename="../../src/content-widget.cpp" line="680"/>
<source>Best Matches</source>
<translation></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="665"/>
<location filename="../../src/content-widget.cpp" line="682"/>
<source>Web Pages</source>
<translation></translation>
</message>
<message>
<location filename="../../src/content-widget.cpp" line="667"/>
<location filename="../../src/content-widget.cpp" line="684"/>
<source>Unknown</source>
<translation></translation>
</message>
@ -75,12 +75,12 @@
<translation></translation>
</message>
<message>
<location filename="../../src/mainwindow.cpp" line="115"/>
<location filename="../../src/mainwindow.cpp" line="121"/>
<source>Global Search</source>
<translation></translation>
</message>
<message>
<location filename="../../src/mainwindow.cpp" line="169"/>
<location filename="../../src/mainwindow.cpp" line="175"/>
<source>Search</source>
<translation></translation>
</message>
@ -88,35 +88,40 @@
<context>
<name>OptionView</name>
<message>
<location filename="../../src/control/option-view.cpp" line="96"/>
<location filename="../../src/control/option-view.cpp" line="101"/>
<source>Open</source>
<translation></translation>
</message>
<message>
<location filename="../../src/control/option-view.cpp" line="103"/>
<location filename="../../src/control/option-view.cpp" line="108"/>
<source>Add Shortcut to Desktop</source>
<translation></translation>
</message>
<message>
<location filename="../../src/control/option-view.cpp" line="110"/>
<location filename="../../src/control/option-view.cpp" line="115"/>
<source>Add Shortcut to Panel</source>
<translation></translation>
</message>
<message>
<location filename="../../src/control/option-view.cpp" line="117"/>
<location filename="../../src/control/option-view.cpp" line="122"/>
<source>Open path</source>
<translation></translation>
</message>
<message>
<location filename="../../src/control/option-view.cpp" line="124"/>
<location filename="../../src/control/option-view.cpp" line="129"/>
<source>Copy path</source>
<translation></translation>
</message>
<message>
<location filename="../../src/control/option-view.cpp" line="136"/>
<source>Install</source>
<translation></translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="../../src/main.cpp" line="149"/>
<location filename="../../src/main.cpp" line="150"/>
<source>ukui-search is already running!</source>
<translation></translation>
</message>
@ -132,22 +137,22 @@
<context>
<name>SearchDetailView</name>
<message>
<location filename="../../src/control/search-detail-view.cpp" line="406"/>
<location filename="../../src/control/search-detail-view.cpp" line="485"/>
<source>Path</source>
<translation></translation>
</message>
<message>
<location filename="../../src/control/search-detail-view.cpp" line="414"/>
<location filename="../../src/control/search-detail-view.cpp" line="493"/>
<source>Last time modified</source>
<translation></translation>
</message>
<message>
<location filename="../../src/control/search-detail-view.cpp" line="236"/>
<location filename="../../src/control/search-detail-view.cpp" line="210"/>
<source>Application</source>
<translation></translation>
</message>
<message>
<location filename="../../src/control/search-detail-view.cpp" line="253"/>
<location filename="../../src/control/search-detail-view.cpp" line="329"/>
<source>Document</source>
<translation></translation>
</message>
@ -155,110 +160,110 @@
<context>
<name>SettingsWidget</name>
<message>
<location filename="../../src/settings-widget.cpp" line="69"/>
<location filename="../../src/settings-widget.cpp" line="267"/>
<location filename="../../src/settings-widget.cpp" line="470"/>
<location filename="../../src/settings-widget.cpp" line="70"/>
<location filename="../../src/settings-widget.cpp" line="281"/>
<location filename="../../src/settings-widget.cpp" line="514"/>
<source>Search</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="92"/>
<location filename="../../src/settings-widget.cpp" line="93"/>
<source>&lt;h2&gt;Settings&lt;/h2&gt;</source>
<translation>&lt;h2&gt;&lt;/h2&gt;</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="97"/>
<location filename="../../src/settings-widget.cpp" line="98"/>
<source>&lt;h3&gt;Index State&lt;/h3&gt;</source>
<translation>&lt;h3&gt;&lt;/h3&gt;</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="99"/>
<location filename="../../src/settings-widget.cpp" line="101"/>
<location filename="../../src/settings-widget.cpp" line="100"/>
<location filename="../../src/settings-widget.cpp" line="102"/>
<source>...</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="109"/>
<location filename="../../src/settings-widget.cpp" line="110"/>
<source>&lt;h3&gt;File Index Settings&lt;/h3&gt;</source>
<translation>&lt;h3&gt;&lt;/h3&gt;</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="111"/>
<location filename="../../src/settings-widget.cpp" line="112"/>
<source>Following folders will not be searched. You can set it by adding and removing folders.</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="120"/>
<location filename="../../src/settings-widget.cpp" line="121"/>
<source>Add ignored folders</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="141"/>
<location filename="../../src/settings-widget.cpp" line="142"/>
<source>&lt;h3&gt;Search Engine Settings&lt;/h3&gt;</source>
<translation>&lt;h3&gt;&lt;/h3&gt;</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="143"/>
<location filename="../../src/settings-widget.cpp" line="144"/>
<source>Please select search engine you preferred.</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="156"/>
<location filename="../../src/settings-widget.cpp" line="157"/>
<source>baidu</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="158"/>
<location filename="../../src/settings-widget.cpp" line="159"/>
<source>sougou</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="160"/>
<location filename="../../src/settings-widget.cpp" line="161"/>
<source>360</source>
<translation>360</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="267"/>
<location filename="../../src/settings-widget.cpp" line="281"/>
<source>Whether to delete this directory?</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="268"/>
<location filename="../../src/settings-widget.cpp" line="282"/>
<source>Yes</source>
<translation>(Y)</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="269"/>
<location filename="../../src/settings-widget.cpp" line="283"/>
<source>No</source>
<translation>(N)</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="359"/>
<location filename="../../src/settings-widget.cpp" line="403"/>
<source>Cancel</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="454"/>
<location filename="../../src/settings-widget.cpp" line="498"/>
<source>Choosen path is Empty!</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="458"/>
<location filename="../../src/settings-widget.cpp" line="502"/>
<source>Choosen path is not in &quot;home&quot;!</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="462"/>
<location filename="../../src/settings-widget.cpp" line="506"/>
<source>Its&apos; parent folder has been blocked!</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="466"/>
<location filename="../../src/settings-widget.cpp" line="510"/>
<source>Set blocked folder failed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="298"/>
<location filename="../../src/settings-widget.cpp" line="342"/>
<source>Creating ...</source>
<translation></translation>
</message>
@ -268,42 +273,42 @@
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="301"/>
<location filename="../../src/settings-widget.cpp" line="345"/>
<source>Done</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="309"/>
<location filename="../../src/settings-widget.cpp" line="353"/>
<source>Index Entry: %1</source>
<translation>: %1</translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="353"/>
<location filename="../../src/settings-widget.cpp" line="397"/>
<source>Directories</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="354"/>
<location filename="../../src/settings-widget.cpp" line="398"/>
<source>select blocked folder</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="355"/>
<location filename="../../src/settings-widget.cpp" line="399"/>
<source>Select</source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="356"/>
<location filename="../../src/settings-widget.cpp" line="400"/>
<source>Position: </source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="357"/>
<location filename="../../src/settings-widget.cpp" line="401"/>
<source>FileName: </source>
<translation></translation>
</message>
<message>
<location filename="../../src/settings-widget.cpp" line="358"/>
<location filename="../../src/settings-widget.cpp" line="402"/>
<source>FileType: </source>
<translation></translation>
</message>