Wait till pdfworker finishes before new search, cancel running
This commit is contained in:
förälder
854f252dd9
incheckning
64b2eda9e5
3
TODO
3
TODO
@ -25,5 +25,6 @@ type:file
|
||||
endswith:
|
||||
startswith:
|
||||
mtime:
|
||||
|
||||
tag:
|
||||
page:
|
||||
SearchWorker::setFilters()
|
||||
|
@ -119,6 +119,9 @@ void MainWindow::makePdfPreview()
|
||||
{
|
||||
if(!pdfWorkerThread.isRunning())
|
||||
pdfWorkerThread.start();
|
||||
|
||||
pdfWorker->cancelAndWait();
|
||||
QCoreApplication::processEvents(); // Process not processed images
|
||||
qDeleteAll(ui->scrollAreaWidgetContents->children());
|
||||
|
||||
ui->scrollAreaWidgetContents->setLayout(new QHBoxLayout());
|
||||
|
@ -14,15 +14,25 @@ Poppler::Document *PdfWorker::document(QString path)
|
||||
return this->documentcache.value(path);
|
||||
|
||||
Poppler::Document *result = Poppler::Document::load(path);
|
||||
if(result == nullptr)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
result->setRenderHint(Poppler::Document::TextAntialiasing);
|
||||
this->documentcache.insert(path, result);
|
||||
return result;
|
||||
}
|
||||
void PdfWorker::generatePreviews(QVector<SearchResult> paths, double scalefactor)
|
||||
{
|
||||
this->cancelCurrent = false;
|
||||
this->generating = true;
|
||||
for(SearchResult &sr : paths)
|
||||
{
|
||||
Poppler::Document *doc = document(sr.path);
|
||||
if(doc == nullptr)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
qDebug() << sr.path;
|
||||
if(doc->isLocked())
|
||||
{
|
||||
@ -39,6 +49,27 @@ void PdfWorker::generatePreviews(QVector<SearchResult> paths, double scalefactor
|
||||
preview.previewImage = image;
|
||||
preview.documentPath = sr.path;
|
||||
emit previewReady(preview);
|
||||
if(this->cancelCurrent.load())
|
||||
{
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
isFreeMutex.lock();
|
||||
isFree.wakeOne();
|
||||
isFreeMutex.unlock();
|
||||
generating = false;
|
||||
emit previewsFinished();
|
||||
}
|
||||
|
||||
void PdfWorker::cancelAndWait()
|
||||
{
|
||||
if(this->generating.load())
|
||||
{
|
||||
this->cancelCurrent = true;
|
||||
|
||||
isFreeMutex.lock();
|
||||
isFree.wait(&isFreeMutex);
|
||||
isFreeMutex.unlock();
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,9 @@
|
||||
#include <QObject>
|
||||
#include <QImage>
|
||||
#include <QHash>
|
||||
#include <QThread>
|
||||
#include <QMutex>
|
||||
#include <QWaitCondition>
|
||||
#include <poppler-qt5.h>
|
||||
#include "pdfpreview.h"
|
||||
#include "searchresult.h"
|
||||
@ -13,9 +16,14 @@ class PdfWorker : public QObject
|
||||
private:
|
||||
QHash<QString, Poppler::Document *> documentcache;
|
||||
Poppler::Document *document(QString path);
|
||||
std::atomic<bool> cancelCurrent{false};
|
||||
std::atomic<bool> generating{false};
|
||||
QMutex isFreeMutex;
|
||||
QWaitCondition isFree;
|
||||
|
||||
public:
|
||||
PdfWorker();
|
||||
void cancelAndWait();
|
||||
public slots:
|
||||
void generatePreviews(QVector<SearchResult> paths, double scalefactor);
|
||||
signals:
|
||||
|
@ -21,6 +21,12 @@ SearchWorker::SearchWorker(const QString &dbpath)
|
||||
"content_fts.content MATCH ? ORDER By file.mtime DESC, content.page ASC");
|
||||
}
|
||||
|
||||
QString normalize(QString str)
|
||||
{
|
||||
str = str.replace(" ", " AND ");
|
||||
str = str.replace("|", " OR ");
|
||||
return str;
|
||||
}
|
||||
void SearchWorker::searchForFile(const QString &query)
|
||||
{
|
||||
QVector<SearchResult> results;
|
||||
|
Laddar…
Referens i nytt ärende
Block a user