diff --git a/debian/changelog b/debian/changelog index b2e917e..c625d04 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +ukui-search (0.0.1+0120) v101; urgency=medium + + * Bugs Fixed. + + -- zhangpengfei Wed, 20 Jan 2021 15:55:57 +0800 + ukui-search (0.0.1+0118) v101; urgency=medium * Feature: Add animation into inputbox. @@ -11,8 +17,7 @@ ukui-search (0.0.1+0118) v101; urgency=medium * Fix: Translation is incompleted.(33047) * Fix: Widget crashed when searching & open file/filepath failed. - -- zhangjiaping Mon, 18 Jan 2021 14:3 -6:12 +0800 + -- zhangjiaping Mon, 18 Jan 2021 14:31:24 +0800 ukui-search (0.0.1+0115) v101; urgency=medium @@ -24,7 +29,7 @@ ukui-search (0.0.1+0114) v101; urgency=medium * Bugs fixed. - -- zhangpengfei Thu, 14 Jan 2021 20:47:42 +0800 + -- zhangpengfei Thu, 14 Jan 2021 20:47:42 +0800 ukui-search (0.0.1+0113) v101; urgency=medium diff --git a/libchinese-segmentation/chinese-segmentation.cpp b/libchinese-segmentation/chinese-segmentation.cpp index efbb8c8..2bcec40 100644 --- a/libchinese-segmentation/chinese-segmentation.cpp +++ b/libchinese-segmentation/chinese-segmentation.cpp @@ -6,7 +6,6 @@ QMutex ChineseSegmentation::m_mutex; ChineseSegmentation::ChineseSegmentation() { - QMutexLocker locker(&m_mutex); const char * const DICT_PATH = "/usr/share/ukui-search/res/dict/jieba.dict.utf8"; const char * const HMM_PATH = "/usr/share/ukui-search/res/dict/hmm_model.utf8"; const char * const USER_DICT_PATH ="/usr/share/ukui-search/res/dict/user.dict.utf8"; @@ -29,6 +28,7 @@ ChineseSegmentation::~ChineseSegmentation() ChineseSegmentation *ChineseSegmentation::getInstance() { + QMutexLocker locker(&m_mutex); if (!global_instance_chinese_segmentation) { global_instance_chinese_segmentation = new ChineseSegmentation; } diff --git a/libsearch/file-utils.h b/libsearch/file-utils.h index 3d99dbe..5594615 100644 --- a/libsearch/file-utils.h +++ b/libsearch/file-utils.h @@ -10,6 +10,7 @@ #define CREATING_INDEX 1 #define FINISH_CREATING_INDEX 2 + class LIBSEARCH_EXPORT FileUtils { public: diff --git a/libsearch/index/file-searcher.cpp b/libsearch/index/file-searcher.cpp index f2ee9c7..9377112 100644 --- a/libsearch/index/file-searcher.cpp +++ b/libsearch/index/file-searcher.cpp @@ -66,6 +66,7 @@ void FileSearcher::onKeywordSearch(QString keyword,QQueue *searchResult total += resultCount; begin += num; } + return; }); // Q_EMIT this->resultFile(m_search_result_file); //dir @@ -84,6 +85,7 @@ void FileSearcher::onKeywordSearch(QString keyword,QQueue *searchResult total += resultCount; begin += num; } + return; }); // Q_EMIT this->resultDir(m_search_result_dir); //content @@ -103,6 +105,7 @@ void FileSearcher::onKeywordSearch(QString keyword,QQueue *searchResult total += resultCount; begin += num; } + return; }); // Q_EMIT this->resultContent(m_search_result_content); } diff --git a/libsearch/index/first-index.cpp b/libsearch/index/first-index.cpp index 7feb60a..9ba13c9 100644 --- a/libsearch/index/first-index.cpp +++ b/libsearch/index/first-index.cpp @@ -2,7 +2,6 @@ #include "first-index.h" #include - void handler(int){ qDebug() << "Recieved SIGTERM!"; GlobalSettings::getInstance()->setValue(INDEX_DATABASE_STATE, "2"); @@ -107,67 +106,81 @@ void FirstIndex::run(){ // this->p_indexGenerator->creatAllIndex(this->q_content_index); - FileUtils::_index_status = CREATING_INDEX; - QSemaphore sem(5); - QMutex mutex1, mutex2, mutex3; - mutex1.lock(); - mutex2.lock(); - mutex3.lock(); - sem.acquire(4); - QtConcurrent::run([&](){ - sem.acquire(1); + pid_t pid; + pid = fork(); + if(pid == 0) + { + prctl(PR_SET_NAME,"first-index"); + FileUtils::_index_status = CREATING_INDEX; + QSemaphore sem(5); + QMutex mutex1, mutex2, mutex3; + mutex1.lock(); + mutex2.lock(); + mutex3.lock(); + sem.acquire(4); + QtConcurrent::run([&](){ + sem.acquire(1); + mutex1.unlock(); + this->Traverse(); + FileUtils::_max_index_count = this->q_index->length(); + sem.release(5); + }); + QtConcurrent::run([&](){ + sem.acquire(2); + mutex2.unlock(); + qDebug() << "index start;"; + this->p_indexGenerator->creatAllIndex(this->q_index); + qDebug() << "index end;"; + sem.release(2); + }); + QtConcurrent::run([&](){ + sem.acquire(2); + mutex3.unlock(); + qDebug() << "content index start;"; + this->p_indexGenerator->creatAllIndex(this->q_content_index); + qDebug() << "content index end;"; + sem.release(2); + }); + mutex1.lock(); + mutex2.lock(); + mutex3.lock(); + sem.acquire(5); mutex1.unlock(); - this->Traverse(); - FileUtils::_max_index_count = this->q_index->length(); - sem.release(5); - }); - QtConcurrent::run([&](){ - sem.acquire(2); mutex2.unlock(); - qDebug() << "index start;"; - this->p_indexGenerator->creatAllIndex(this->q_index); - qDebug() << "index end;"; - sem.release(2); - }); - QtConcurrent::run([&](){ - sem.acquire(2); mutex3.unlock(); - qDebug() << "content index start;"; - this->p_indexGenerator->creatAllIndex(this->q_content_index); - qDebug() << "content index end;"; - sem.release(2); - }); - mutex1.lock(); - mutex2.lock(); - mutex3.lock(); - sem.acquire(5); - mutex1.unlock(); - mutex2.unlock(); - mutex3.unlock(); + _exit(0); -// qDebug() << "first index end;"; - //don't use it now!!!! - //MouseZhangZh -// this->~FirstIndex(); -// qDebug() << "~FirstIndex end;"; + + // qDebug() << "first index end;"; + //don't use it now!!!! + //MouseZhangZh + // this->~FirstIndex(); + // qDebug() << "~FirstIndex end;" - if (this->q_index) - delete this->q_index; - this->q_index = nullptr; - if (this->q_content_index) - delete this->q_content_index; - this->q_content_index = nullptr; - if (this->p_indexGenerator) - delete this->p_indexGenerator; - this->p_indexGenerator = nullptr; - - QThreadPool::globalInstance()->releaseThread(); - QThreadPool::globalInstance()->waitForDone(); - + if (this->q_index) + delete this->q_index; + this->q_index = nullptr; + if (this->q_content_index) + delete this->q_content_index; + this->q_content_index = nullptr; + if (this->p_indexGenerator) + delete this->p_indexGenerator; + this->p_indexGenerator = nullptr; + QThreadPool::globalInstance()->releaseThread(); + QThreadPool::globalInstance()->waitForDone(); + } + else if(pid < 0) + { + qWarning()<<"First Index fork error!!"; + } + else + { + waitpid(pid,NULL,0); + } FileUtils::_index_status = FINISH_CREATING_INDEX; qDebug() << "sigset start!"; diff --git a/libsearch/index/first-index.h b/libsearch/index/first-index.h index 914fa85..794267d 100644 --- a/libsearch/index/first-index.h +++ b/libsearch/index/first-index.h @@ -4,6 +4,11 @@ #include #include #include +#include +#include +#include +#include +#include //#include #include "traverse_bfs.h" #include "global-settings.h" diff --git a/libsearch/index/index-generator.cpp b/libsearch/index/index-generator.cpp index 96c60a8..faad57d 100644 --- a/libsearch/index/index-generator.cpp +++ b/libsearch/index/index-generator.cpp @@ -450,7 +450,11 @@ bool IndexGenerator::deleteAllIndex(QStringList *pathlist) qDebug()<<"delete path"<commit(); + m_database_content->commit(); qDebug()<< "--delete finish--"; +// qDebug()<<"m_database_path->get_lastdocid()!!!"<get_lastdocid(); + +// qDebug()<<"m_database_path->get_doccount()!!!"<get_doccount(); } catch(const Xapian::Error &e) { diff --git a/libsearch/index/inotify-index.cpp b/libsearch/index/inotify-index.cpp index 642aa14..e87b75d 100644 --- a/libsearch/index/inotify-index.cpp +++ b/libsearch/index/inotify-index.cpp @@ -1,6 +1,5 @@ #include "inotify-index.h" - InotifyIndex::InotifyIndex(const QString& path) : Traverse_BFS(path) { /*-------------ukuisearchdbus Test start-----------------*/ @@ -88,51 +87,64 @@ bool InotifyIndex::RemoveWatch(const QString &path){ return true; } -/* - * Symbolic Link!!!!!!!!!!!!!!!!!! - * Sysmbolic link to database dir will make a Infinite loop !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * MouseZhangZh -*/ +void InotifyIndex::eventProcess(const char* buf, ssize_t tmp){ + // qDebug() << "Read " << numRead << " bytes from inotify fd"; -void InotifyIndex::run(){ + /* Process all of the events in buffer returned by read() */ - char * p; - char buf[BUF_LEN] __attribute__((aligned(8))); - - ssize_t numRead; QQueue>* indexQueue = new QQueue>(); QQueue* contentIndexQueue = new QQueue(); - for (;;) { /* Read events forever */ - numRead = read(m_fd, buf, BUF_LEN); - if (numRead == 0) { - qDebug() << "read() from inotify fd returned 0!"; - } - if (numRead == -1) { - qDebug() << "read"; - } -// qDebug() << "Read " << numRead << " bytes from inotify fd"; + ssize_t numRead = 0; + numRead = tmp; + char * p = const_cast(buf); - /* Process all of the events in buffer returned by read() */ + for (; p < buf + numRead;) { + struct inotify_event * event = reinterpret_cast(p); +// qDebug() << "Read Event: " << currentPath[event->wd] << QString(event->name) << event->cookie << event->wd << event->mask; + if(event->name[0] != '.'){ + qDebug() << QString(currentPath[event->wd] + '/' + event->name); + FileUtils::_index_status = CREATING_INDEX; - for (p = buf; p < buf + numRead;) { - struct inotify_event * event = reinterpret_cast(p); -// qDebug() << "Read Event: " << currentPath[event->wd] << QString(event->name) << event->cookie << event->wd << event->mask; - if(event->name[0] != '.'){ - qDebug() << QString(currentPath[event->wd] + '/' + event->name); - FileUtils::_index_status = CREATING_INDEX; + // switch (event->mask) { + if (event->mask & IN_CREATE){ + if (event->mask & IN_ISDIR){ + AddWatch(currentPath[event->wd] + '/' + event->name); + this->setPath(currentPath[event->wd] + '/' + event->name); + Traverse(); + } -// switch (event->mask) { - if (event->mask & IN_CREATE){ - if (event->mask & IN_ISDIR){ - AddWatch(currentPath[event->wd] + '/' + event->name); - this->setPath(currentPath[event->wd] + '/' + event->name); - Traverse(); + /*--------------------------------*/ + // IndexGenerator::getInstance()->creatAllIndex(QQueue>(QVector() << fileInfo.fileName() << fileInfo.absoluteFilePath() << QString(fileInfo.isDir() ? "1" : "0"))); + indexQueue->enqueue(QVector() << QString(event->name) << QString(currentPath[event->wd] + '/' + event->name) << QString((event->mask & IN_ISDIR) ? "1" : "0")); + IndexGenerator::getInstance()->creatAllIndex(indexQueue); + indexQueue->clear(); + for (auto i : this->targetFileTypeVec){ + if (QString(currentPath[event->wd] + '/' + event->name).endsWith(i)){ + contentIndexQueue->enqueue(QString(currentPath[event->wd] + '/' + event->name)); + IndexGenerator::getInstance()->creatAllIndex(contentIndexQueue); + contentIndexQueue->clear(); + break; } + } + goto next; + } - /*--------------------------------*/ -// IndexGenerator::getInstance()->creatAllIndex(QQueue>(QVector() << fileInfo.fileName() << fileInfo.absoluteFilePath() << QString(fileInfo.isDir() ? "1" : "0"))); + + if ((event->mask & IN_DELETE) | (event->mask & IN_MOVED_FROM)){ + if (event->mask & IN_ISDIR){ + RemoveWatch(currentPath[event->wd] + '/' + event->name); + } + //delete once more + IndexGenerator::getInstance()->deleteAllIndex(new QStringList(currentPath[event->wd] + '/' + event->name)); + goto next; + } + + + if (event->mask & IN_MODIFY){ + if (!(event->mask & IN_ISDIR)){ + IndexGenerator::getInstance()->deleteAllIndex(new QStringList(currentPath[event->wd] + '/' + event->name)); indexQueue->enqueue(QVector() << QString(event->name) << QString(currentPath[event->wd] + '/' + event->name) << QString((event->mask & IN_ISDIR) ? "1" : "0")); IndexGenerator::getInstance()->creatAllIndex(indexQueue); indexQueue->clear(); @@ -144,134 +156,101 @@ void InotifyIndex::run(){ break; } } - goto next; } - - - if ((event->mask & IN_DELETE) | (event->mask & IN_MOVED_FROM)){ - if (event->mask & IN_ISDIR){ - RemoveWatch(currentPath[event->wd] + '/' + event->name); - } - //delete once more - IndexGenerator::getInstance()->deleteAllIndex(new QStringList(currentPath[event->wd] + '/' + event->name)); - goto next; - } - - - if (event->mask & IN_MODIFY){ - if (!(event->mask & IN_ISDIR)){ - IndexGenerator::getInstance()->deleteAllIndex(new QStringList(currentPath[event->wd] + '/' + event->name)); - indexQueue->enqueue(QVector() << QString(event->name) << QString(currentPath[event->wd] + '/' + event->name) << QString((event->mask & IN_ISDIR) ? "1" : "0")); - IndexGenerator::getInstance()->creatAllIndex(indexQueue); - indexQueue->clear(); - for (auto i : this->targetFileTypeVec){ - if (QString(currentPath[event->wd] + '/' + event->name).endsWith(i)){ - contentIndexQueue->enqueue(QString(currentPath[event->wd] + '/' + event->name)); - IndexGenerator::getInstance()->creatAllIndex(contentIndexQueue); - contentIndexQueue->clear(); - break; - } - } - } - goto next; - } - - - if (event->mask & IN_MOVED_TO){ - if (event->mask & IN_ISDIR){ - RemoveWatch(currentPath[event->wd] + '/' + event->name); - IndexGenerator::getInstance()->deleteAllIndex(new QStringList(currentPath[event->wd] + '/' + event->name)); - AddWatch(currentPath[event->wd] + '/' + event->name); - this->setPath(currentPath[event->wd] + '/' + event->name); - Traverse(); - - // - - - - indexQueue->enqueue(QVector() << QString(event->name) << QString(currentPath[event->wd] + '/' + event->name) << QString((event->mask & IN_ISDIR) ? "1" : "0")); - IndexGenerator::getInstance()->creatAllIndex(indexQueue); - indexQueue->clear(); - for (auto i : this->targetFileTypeVec){ - if (QString(currentPath[event->wd] + '/' + event->name).endsWith(i)){ - contentIndexQueue->enqueue(QString(currentPath[event->wd] + '/' + event->name)); - IndexGenerator::getInstance()->creatAllIndex(contentIndexQueue); - contentIndexQueue->clear(); - break; - } - } - } - else { - IndexGenerator::getInstance()->deleteAllIndex(new QStringList(currentPath[event->wd] + '/' + event->name)); - indexQueue->enqueue(QVector() << QString(event->name) << QString(currentPath[event->wd] + '/' + event->name) << QString((event->mask & IN_ISDIR) ? "1" : "0")); - IndexGenerator::getInstance()->creatAllIndex(indexQueue); - indexQueue->clear(); - for (auto i : this->targetFileTypeVec){ - if (QString(currentPath[event->wd] + '/' + event->name).endsWith(i)){ - contentIndexQueue->enqueue(QString(currentPath[event->wd] + '/' + event->name)); - IndexGenerator::getInstance()->creatAllIndex(contentIndexQueue); - contentIndexQueue->clear(); - break; - } - } - } - goto next; - } - -// } - -// //传创建或移动过来的文件路径 -// if((event->mask & IN_CREATE)){ -// //添加监视要先序遍历,先添加top节点 -// if (event->mask & IN_ISDIR){ -// AddWatch(currentPath[event->wd] + '/' + event->name); -// this->setPath(currentPath[event->wd] + '/' + event->name); -// Traverse(); -// } - -// /*--------------------------------*/ -//// IndexGenerator::getInstance()->creatAllIndex(QQueue>(QVector() << fileInfo.fileName() << fileInfo.absoluteFilePath() << QString(fileInfo.isDir() ? "1" : "0"))); -// indexQueue->enqueue(QVector() << QString(event->name) << QString(currentPath[event->wd] + '/' + event->name) << QString((event->mask & IN_ISDIR) ? "1" : "0")); -// IndexGenerator::getInstance()->creatAllIndex(indexQueue); -// indexQueue->clear(); -// for (auto i : this->targetFileTypeVec){ -// if (QString(currentPath[event->wd] + '/' + event->name).endsWith(i)){ -// contentIndexQueue->enqueue(QString(currentPath[event->wd] + '/' + event->name)); -// IndexGenerator::getInstance()->creatAllIndex(contentIndexQueue); -// contentIndexQueue->clear(); -// break; -// } -// } -// /*--------------------------------*/ -// } -// else if((event->mask & IN_DELETE) | (event->mask & IN_MOVED_FROM)){ -// if (event->mask & IN_ISDIR){ -// RemoveWatch(currentPath[event->wd] + '/' + event->name); -// } -// IndexGenerator::getInstance()->deleteAllIndex(new QStringList(currentPath[event->wd] + '/' + event->name)); -// } -// else if((event->mask & IN_MODIFY) | (event->mask & IN_MOVED_TO)){ -// if (!(event->mask & IN_ISDIR)){ -// IndexGenerator::getInstance()->deleteAllIndex(new QStringList(currentPath[event->wd] + '/' + event->name)); -// indexQueue->enqueue(QVector() << QString(event->name) << QString(currentPath[event->wd] + '/' + event->name) << QString((event->mask & IN_ISDIR) ? "1" : "0")); -// IndexGenerator::getInstance()->creatAllIndex(indexQueue); -// indexQueue->clear(); -// for (auto i : this->targetFileTypeVec){ -// if (QString(currentPath[event->wd] + '/' + event->name).endsWith(i)){ -// contentIndexQueue->enqueue(QString(currentPath[event->wd] + '/' + event->name)); -// IndexGenerator::getInstance()->creatAllIndex(contentIndexQueue); -// contentIndexQueue->clear(); -// break; -// } -// } -// } -// } - /*--------------------------------*/ - FileUtils::_index_status = FINISH_CREATING_INDEX; + goto next; } -next: - p += sizeof(struct inotify_event) + event->len; + + + if (event->mask & IN_MOVED_TO){ + if (event->mask & IN_ISDIR){ + RemoveWatch(currentPath[event->wd] + '/' + event->name); + IndexGenerator::getInstance()->deleteAllIndex(new QStringList(currentPath[event->wd] + '/' + event->name)); + AddWatch(currentPath[event->wd] + '/' + event->name); + this->setPath(currentPath[event->wd] + '/' + event->name); + Traverse(); + + indexQueue->enqueue(QVector() << QString(event->name) << QString(currentPath[event->wd] + '/' + event->name) << QString((event->mask & IN_ISDIR) ? "1" : "0")); + IndexGenerator::getInstance()->creatAllIndex(indexQueue); + indexQueue->clear(); + for (auto i : this->targetFileTypeVec){ + if (QString(currentPath[event->wd] + '/' + event->name).endsWith(i)){ + contentIndexQueue->enqueue(QString(currentPath[event->wd] + '/' + event->name)); + IndexGenerator::getInstance()->creatAllIndex(contentIndexQueue); + contentIndexQueue->clear(); + break; + } + } + } + else { + IndexGenerator::getInstance()->deleteAllIndex(new QStringList(currentPath[event->wd] + '/' + event->name)); + indexQueue->enqueue(QVector() << QString(event->name) << QString(currentPath[event->wd] + '/' + event->name) << QString((event->mask & IN_ISDIR) ? "1" : "0")); + IndexGenerator::getInstance()->creatAllIndex(indexQueue); + indexQueue->clear(); + for (auto i : this->targetFileTypeVec){ + if (QString(currentPath[event->wd] + '/' + event->name).endsWith(i)){ + contentIndexQueue->enqueue(QString(currentPath[event->wd] + '/' + event->name)); + IndexGenerator::getInstance()->creatAllIndex(contentIndexQueue); + contentIndexQueue->clear(); + break; + } + } + } + goto next; + } + + // } + + // //传创建或移动过来的文件路径 + // if((event->mask & IN_CREATE)){ + // //添加监视要先序遍历,先添加top节点 + // if (event->mask & IN_ISDIR){ + // AddWatch(currentPath[event->wd] + '/' + event->name); + // this->setPath(currentPath[event->wd] + '/' + event->name); + // Traverse(); + // } + + // /*--------------------------------*/ + //// IndexGenerator::getInstance()->creatAllIndex(QQueue>(QVector() << fileInfo.fileName() << fileInfo.absoluteFilePath() << QString(fileInfo.isDir() ? "1" : "0"))); + // indexQueue->enqueue(QVector() << QString(event->name) << QString(currentPath[event->wd] + '/' + event->name) << QString((event->mask & IN_ISDIR) ? "1" : "0")); + // IndexGenerator::getInstance()->creatAllIndex(indexQueue); + // indexQueue->clear(); + // for (auto i : this->targetFileTypeVec){ + // if (QString(currentPath[event->wd] + '/' + event->name).endsWith(i)){ + // contentIndexQueue->enqueue(QString(currentPath[event->wd] + '/' + event->name)); + // IndexGenerator::getInstance()->creatAllIndex(contentIndexQueue); + // contentIndexQueue->clear(); + // break; + // } + // } + // /*--------------------------------*/ + // } + // else if((event->mask & IN_DELETE) | (event->mask & IN_MOVED_FROM)){ + // if (event->mask & IN_ISDIR){ + // RemoveWatch(currentPath[event->wd] + '/' + event->name); + // } + // IndexGenerator::getInstance()->deleteAllIndex(new QStringList(currentPath[event->wd] + '/' + event->name)); + // } + // else if((event->mask & IN_MODIFY) | (event->mask & IN_MOVED_TO)){ + // if (!(event->mask & IN_ISDIR)){ + // IndexGenerator::getInstance()->deleteAllIndex(new QStringList(currentPath[event->wd] + '/' + event->name)); + // indexQueue->enqueue(QVector() << QString(event->name) << QString(currentPath[event->wd] + '/' + event->name) << QString((event->mask & IN_ISDIR) ? "1" : "0")); + // IndexGenerator::getInstance()->creatAllIndex(indexQueue); + // indexQueue->clear(); + // for (auto i : this->targetFileTypeVec){ + // if (QString(currentPath[event->wd] + '/' + event->name).endsWith(i)){ + // contentIndexQueue->enqueue(QString(currentPath[event->wd] + '/' + event->name)); + // IndexGenerator::getInstance()->creatAllIndex(contentIndexQueue); + // contentIndexQueue->clear(); + // break; + // } + // } + // } + // } + /*--------------------------------*/ + FileUtils::_index_status = FINISH_CREATING_INDEX; } +next: + p += sizeof(struct inotify_event) + event->len; } delete indexQueue; @@ -279,3 +258,59 @@ next: delete contentIndexQueue; contentIndexQueue = nullptr; } + +/* + * Symbolic Link!!!!!!!!!!!!!!!!!! + * Sysmbolic link to database dir will make a Infinite loop !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * MouseZhangZh +*/ + +void InotifyIndex::run(){ + char buf[BUF_LEN] __attribute__((aligned(8))); + + ssize_t numRead; + + for (;;) { /* Read events forever */ + numRead = read(m_fd, buf, BUF_LEN); + + + pid_t pid; + pid = fork(); + if(pid == 0) + { + prctl(PR_SET_NAME,"inotify-index"); + if (numRead == 0) { + qDebug() << "read() from inotify fd returned 0!"; + } + if (numRead == -1) { + qDebug() << "read"; + } + eventProcess(buf, numRead); + QTimer* liveTime = new QTimer(this); + bool b_timeout = false; + liveTime->setInterval(30000); + connect(liveTime, &QTimer::timeout, this, [&](){ +// _exit(0); + b_timeout = true; + }); + liveTime->start(); + for (;;){ + numRead = read(m_fd, buf, BUF_LEN); + liveTime->stop(); + this->eventProcess(buf, numRead); + if (b_timeout){ + _exit(0); + } + liveTime->start(); + } + } + else if (pid > 0){ + memset(buf, 0x00, BUF_LEN); + waitpid(pid, NULL, 0); + } + else{ + assert(false); + } + } + +} diff --git a/libsearch/index/inotify-index.h b/libsearch/index/inotify-index.h index 0ffa24b..e535b11 100644 --- a/libsearch/index/inotify-index.h +++ b/libsearch/index/inotify-index.h @@ -2,6 +2,7 @@ #define INOTIFYINDEX_H #include +#include #include #include #include "index-generator.h" @@ -9,6 +10,7 @@ #include "ukui-search-qdbus.h" #include "global-settings.h" #include "file-utils.h" +#include "first-index.h" #define BUF_LEN 1024 class InotifyIndex; @@ -29,6 +31,8 @@ public: bool AddWatch(const QString&); bool RemoveWatch(const QString&); virtual void DoSomething(const QFileInfo &) final; + + void eventProcess(const char*, ssize_t); protected: void run() override; private: diff --git a/src/main.cpp b/src/main.cpp index 0bb548e..7e56892 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include "qt-single-application.h" #include "qt-local-peer.h" //#include "inotify-manager.h" @@ -185,6 +186,7 @@ int main(int argc, char *argv[]) // FirstIndex* fi = new FirstIndex("/home/zhangzihao/Desktop/qwerty"); FirstIndex fi("/home"); fi.start(); + fi.wait(); // fi->wait(); // fi->exit(); // delete fi;