From c877f83d4bd8ca216fc9495e182771efc7f81ef3 Mon Sep 17 00:00:00 2001 From: iaom <18504285112@163.com> Date: Fri, 27 Aug 2021 18:07:42 +0800 Subject: [PATCH 1/4] Fix : Index crash when meet encrypt .doc files. --- libsearch/parser/binary-parser.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libsearch/parser/binary-parser.cpp b/libsearch/parser/binary-parser.cpp index 59e9ef4..040a2cb 100644 --- a/libsearch/parser/binary-parser.cpp +++ b/libsearch/parser/binary-parser.cpp @@ -4874,6 +4874,7 @@ bool KBinaryParser::read8DocText(FILE *pFile, const ppsInfoType *pPPS, const ULONG *aulBlockDepot; ULONG ulTextOffset, ulBeginTextInfo; ULONG ulTotLength, ulLen; + ULONG ulEncryptInfo; long lIndex, lPieces, lOff; size_t tTextInfoLen, tBlockDepotLen, tBlockSize; int iType, iLen; @@ -4882,6 +4883,11 @@ bool KBinaryParser::read8DocText(FILE *pFile, const ppsInfoType *pPPS, ulBeginTextInfo = ulGetLong(0x1a2, aucHeader); /* fcClx */ tTextInfoLen = (size_t)ulGetLong(0x1a6, aucHeader); /* lcbClx */ + ulEncryptInfo = ulGetLong(0x0a, aucHeader); + if(ulEncryptInfo & 0x0100) { + qDebug() << "Encrypt file:" << m_strFileName << (size_t)ulEncryptInfo; + return false; + } if(pPPS->tTable.ulSize == 0) return false; From 18f1d29e68543dd7fb9e912cc2cb702268a6d18e Mon Sep 17 00:00:00 2001 From: iaom <18504285112@163.com> Date: Fri, 3 Sep 2021 11:39:06 +0800 Subject: [PATCH 2/4] Update quickly open desktop file names; Fix: Search icon in search lineediter is not visble in dark theme. --- src/content-widget.cpp | 2 +- src/input-box.cpp | 15 ++------------- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/src/content-widget.cpp b/src/content-widget.cpp index 0fdcee8..8d04eef 100644 --- a/src/content-widget.cpp +++ b/src/content-widget.cpp @@ -39,7 +39,7 @@ ContentWidget::ContentWidget(QWidget * parent): QStackedWidget(parent) { m_quicklyOpenList.replace(2, "/usr/share/applications/eom.desktop"); } if (QString::compare(FileUtils::getAppName(m_quicklyOpenList.at(4)), "Unknown App") == 0) { - m_quicklyOpenList.replace(4, "/usr/share/applications/org.gnome.Evolution.desktop"); + m_quicklyOpenList.replace(4, "/usr/share/applications/evolution.desktop"); } } diff --git a/src/input-box.cpp b/src/input-box.cpp index 0b57c19..a81f9ce 100644 --- a/src/input-box.cpp +++ b/src/input-box.cpp @@ -105,20 +105,9 @@ void SearchBarHLayout::initUI() { queryWidLayout->setSpacing(5); m_queryWidget->setLayout(queryWidLayout); - - if (!QIcon::fromTheme("system-search-symbolic").isNull()) { - QPixmap pixmap(QIcon::fromTheme("system-search-symbolic").pixmap(QSize(20, 20))); - m_queryIcon = new QLabel; - m_queryIcon->setFixedSize(pixmap.size()); - m_queryIcon->setPixmap(pixmap); - } else { - QPixmap pixmap(QIcon(":/res/icons/system-search.symbolic.png").pixmap(QSize(20, 20))); - m_queryIcon = new QLabel; - m_queryIcon->setFixedSize(pixmap.size()); - m_queryIcon->setPixmap(pixmap); - } - QPixmap pixmap(QIcon::fromTheme("system-search-symbolic").pixmap(QSize(20, 20))); + QPixmap pixmap(QIcon::fromTheme("system-search-symbolic", QIcon(":/res/icons/system-search.symbolic.png")).pixmap(QSize(20, 20))); m_queryIcon = new QLabel; + m_queryIcon->setProperty("useIconHighlightEffect", 0x10); m_queryIcon->setFixedSize(pixmap.size()); m_queryIcon->setPixmap(pixmap); From d216398c82acc6486b77350d5a72c0bb66b87fa2 Mon Sep 17 00:00:00 2001 From: iaom <18504285112@163.com> Date: Tue, 7 Sep 2021 17:11:23 +0800 Subject: [PATCH 3/4] Fix: Index error when process a whole dir. --- libsearch/index/construct-document.cpp | 6 +++--- libsearch/index/index-generator.cpp | 13 ++++++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/libsearch/index/construct-document.cpp b/libsearch/index/construct-document.cpp index 445bdb5..1b1f4eb 100644 --- a/libsearch/index/construct-document.cpp +++ b/libsearch/index/construct-document.cpp @@ -54,12 +54,12 @@ void ConstructDocumentForPath::run() { // } QString uniqueterm = QString::fromStdString(FileUtils::makeDocUterm(sourcePath)); - QString upTerm = QString::fromStdString(FileUtils::makeDocUterm(sourcePath.section("/", 0, -2, QString::SectionIncludeLeadingSep))); + QString upTerm = QString::fromStdString("ZEEKERUPTERM" + FileUtils::makeDocUterm(sourcePath.section("/", 0, -2, QString::SectionIncludeLeadingSep))); // qDebug()<<"sourcePath"<isEmpty()) return true; try { + qDebug() << "--delete start--"; for(int i = 0; i < list->size(); i++) { QString doc = list->at(i); std::string uniqueterm = FileUtils::makeDocUterm(doc); - qDebug() << "--delete start--"; + std::string upterm = "ZEEKERUPTERM" + FileUtils::makeDocUterm(doc); + m_database_path->delete_document(uniqueterm); m_database_content->delete_document(uniqueterm); + + //delete all files under it if it's a dir. + m_database_path->delete_document(upterm); + m_database_content->delete_document(upterm); qDebug() << "delete path" << doc; - qDebug() << "delete md5" << QString::fromStdString(uniqueterm); - qDebug() << "--delete finish--"; +// qDebug() << "delete md5" << QString::fromStdString(uniqueterm); + // qDebug()<<"m_database_path->get_lastdocid()!!!"<get_lastdocid(); // qDebug()<<"m_database_path->get_doccount()!!!"<get_doccount(); } m_database_path->commit(); m_database_content->commit(); + qDebug() << "--delete finish--"; } catch(const Xapian::Error &e) { qWarning() << QString::fromStdString(e.get_description()); return false; From 091dac9d73a160eb5333225d0df320a2628b16ce Mon Sep 17 00:00:00 2001 From: iaom <18504285112@163.com> Date: Wed, 8 Sep 2021 15:31:47 +0800 Subject: [PATCH 4/4] Fix: UI stuck occasionally. --- libsearch/appsearch/app-match.cpp | 34 +++++++++++---------- libsearch/file-utils.cpp | 6 ++++ libsearch/file-utils.h | 1 + libsearch/index/inotify-watch.cpp | 2 +- libsearch/libsearch.pro | 2 +- libsearch/notesearch/note-search-plugin.cpp | 3 +- 6 files changed, 29 insertions(+), 19 deletions(-) diff --git a/libsearch/appsearch/app-match.cpp b/libsearch/appsearch/app-match.cpp index 3ad1ee2..4778dd3 100644 --- a/libsearch/appsearch/app-match.cpp +++ b/libsearch/appsearch/app-match.cpp @@ -19,6 +19,7 @@ */ #include "app-match.h" #include +#include #include "file-utils.h" #include "app-search-plugin.h" #define ANDROID_APP_DESKTOP_PATH QDir::homePath() + "/.local/share/applications/" @@ -252,8 +253,6 @@ void AppMatch::appNameMatch(QString keyWord, size_t uniqueSymbol, DataQueue iter(m_installAppMap); while(iter.hasNext()) { iter.next(); -// list = iter.value(); -// name.app_name = iter.key().app_name; if(iter.key().app_name.contains(keyWord, Qt::CaseInsensitive)) { SearchPluginIface::ResultInfo ri; creatResultInfo(ri, iter, true); @@ -261,17 +260,17 @@ void AppMatch::appNameMatch(QString keyWord, size_t uniqueSymbol, DataQueueenqueue(ri); AppSearchPlugin::m_mutex.unlock(); + continue; } else { AppSearchPlugin::m_mutex.unlock(); - break; + return; } -// installed.insert(name, list); - continue; } QStringList pinyinlist; pinyinlist = FileUtils::findMultiToneWords(iter.key().app_name); + bool matched = false; for(int i = 0; i < pinyinlist.size() / 2; i++) { QString shouzimu = pinyinlist.at(2 * i + 1); // 中文转首字母 if(shouzimu.contains(keyWord, Qt::CaseInsensitive)) { @@ -281,12 +280,12 @@ void AppMatch::appNameMatch(QString keyWord, size_t uniqueSymbol, DataQueueenqueue(ri); AppSearchPlugin::m_mutex.unlock(); + matched = true; + break; } else { AppSearchPlugin::m_mutex.unlock(); - break; + return; } -// installed.insert(name, list); - break; } if(keyWord.size() < 2) break; @@ -298,14 +297,17 @@ void AppMatch::appNameMatch(QString keyWord, size_t uniqueSymbol, DataQueueenqueue(ri); AppSearchPlugin::m_mutex.unlock(); - } else { - AppSearchPlugin::m_mutex.lock(); + matched = true; break; + } else { + AppSearchPlugin::m_mutex.unlock(); + return; } -// installed.insert(name, list); - break; } } + if(matched) { + continue; + } QStringList tmpList; tmpList << iter.value().at(2) << iter.value().at(3); for(QString s : tmpList) { @@ -316,12 +318,11 @@ void AppMatch::appNameMatch(QString keyWord, size_t uniqueSymbol, DataQueueenqueue(ri); AppSearchPlugin::m_mutex.unlock(); + break; } else { AppSearchPlugin::m_mutex.unlock(); - break; + return; } - // installed.insert(name, list); - continue; } } } @@ -397,7 +398,8 @@ void AppMatch::getInstalledAppsVersion(QString appname) { void AppMatch::creatResultInfo(SearchPluginIface::ResultInfo &ri, QMapIterator &iter, bool isInstalled) { - ri.icon = QIcon::fromTheme(iter.value().at(1), QIcon(":/res/icons/desktop.png")); +// ri.icon = QIcon::fromTheme(iter.value().at(1), QIcon(":/res/icons/desktop.png")); + ri.icon = XdgIcon::fromTheme(iter.value().at(1), QIcon(":/res/icons/desktop.png")); ri.name = iter.key().app_name; ri.actionKey = iter.value().at(0); ri.type = 0; //0 means installed apps. diff --git a/libsearch/file-utils.cpp b/libsearch/file-utils.cpp index e4e95a7..da2b5e8 100644 --- a/libsearch/file-utils.cpp +++ b/libsearch/file-utils.cpp @@ -838,6 +838,12 @@ QString FileUtils::chineseSubString(const std::string &myStr, int start, int len return sub; } +QIcon FileUtils::iconFromTheme(const QString &name, const QIcon &iconDefault) +{ + QMutexLocker locker(&iconMutex); + return QIcon::fromTheme(name, iconDefault); +} + QString FileUtils::getHtmlText(const QString &text, const QString &keyword) { QString htmlString; diff --git a/libsearch/file-utils.h b/libsearch/file-utils.h index 0b3bd69..8db658c 100644 --- a/libsearch/file-utils.h +++ b/libsearch/file-utils.h @@ -94,6 +94,7 @@ public: static bool copyPath(QString &path); static QString escapeHtml(const QString & str); static QString chineseSubString(const std::string &myStr,int start,int length); + static QIcon iconFromTheme(const QString& name, const QIcon &iconDefault); static size_t _max_index_count; static size_t _current_index_count; //this one has been Abandoned,do not use it. static unsigned short _index_status; diff --git a/libsearch/index/inotify-watch.cpp b/libsearch/index/inotify-watch.cpp index eb845a8..43b36a7 100644 --- a/libsearch/index/inotify-watch.cpp +++ b/libsearch/index/inotify-watch.cpp @@ -232,8 +232,8 @@ void InotifyWatch::run() void InotifyWatch::slotEvent(char *buf, ssize_t len) { // eventProcess(socket); - ++FileUtils::_index_status; if(FileUtils::SearchMethod::INDEXSEARCH == FileUtils::searchMethod) { + ++FileUtils::_index_status; pid_t pid; pid = fork(); if(pid == 0) { diff --git a/libsearch/libsearch.pro b/libsearch/libsearch.pro index f655cc4..c123147 100644 --- a/libsearch/libsearch.pro +++ b/libsearch/libsearch.pro @@ -33,7 +33,7 @@ include(notesearch/notesearch.pri) include(settingsearch/settingsearch.pri) LIBS += -L$$OUT_PWD/../libchinese-segmentation/ -lchinese-segmentation -LIBS += -lxapian -lquazip5 -luchardet #-L/usr/local/lib/libjemalloc -ljemalloc +LIBS += -lxapian -lquazip5 -luchardet -lQt5Xdg#-L/usr/local/lib/libjemalloc -ljemalloc SOURCES += \ file-utils.cpp \ diff --git a/libsearch/notesearch/note-search-plugin.cpp b/libsearch/notesearch/note-search-plugin.cpp index c3deb62..dc74dc8 100644 --- a/libsearch/notesearch/note-search-plugin.cpp +++ b/libsearch/notesearch/note-search-plugin.cpp @@ -1,6 +1,7 @@ #include "note-search-plugin.h" #include #include +#include #include "file-utils.h" #include "chinese-segmentation.h" using namespace Zeeker; @@ -183,7 +184,7 @@ void NoteSearch::run() { dbusArgs.endArray(); qDebug() << str; SearchPluginIface::ResultInfo ri = { - icon : QIcon::fromTheme("kylin-notebook"), + icon : XdgIcon::fromTheme("kylin-notebook", QIcon(":/res/icons/desktop.png")), name : str.at(1), description : QVector() << SearchPluginIface::DescriptionInfo { key : QString(tr("Note Description:")),