From df03e853a5a386b0c33bf2b281876de29f6013e8 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Wed, 16 Aug 2023 13:13:46 +0200 Subject: [PATCH] queries done --- src/librssguard/database/databasequeries.cpp | 34 ++++++++++++++++++++ src/librssguard/database/databasequeries.h | 1 + src/librssguard/services/abstract/search.cpp | 5 +-- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/librssguard/database/databasequeries.cpp b/src/librssguard/database/databasequeries.cpp index 839bdd35c..485e01030 100644 --- a/src/librssguard/database/databasequeries.cpp +++ b/src/librssguard/database/databasequeries.cpp @@ -980,6 +980,40 @@ ArticleCounts DatabaseQueries::getMessageCountsForBin(const QSqlDatabase& db, in } } +QList DatabaseQueries::getUndeletedMessagesForProbe(const QSqlDatabase& db, const Search* probe) { + QList messages; + QSqlQuery q(db); + + q.prepare(QSL("SELECT %1 " + "FROM Messages " + "WHERE " + " Messages.is_deleted = 0 AND " + " Messages.is_pdeleted = 0 AND " + " Messages.account_id = :account_id AND " + " (title REGEXP :fltr OR contents REGEXP :fltr);") + .arg(messageTableAttributes(true, db.driverName() == QSL(APP_DB_SQLITE_DRIVER)) + .values() + .join(QSL(", ")))); + q.bindValue(QSL(":account_id"), probe->getParentServiceRoot()->accountId()); + q.bindValue(QSL(":fltr"), probe->filter()); + + if (q.exec()) { + while (q.next()) { + bool decoded; + Message message = Message::fromSqlRecord(q.record(), &decoded); + + if (decoded) { + messages.append(message); + } + } + } + else { + throw ApplicationException(q.lastError().text()); + } + + return messages; +} + QList DatabaseQueries::getUndeletedMessagesWithLabel(const QSqlDatabase& db, const Label* label, bool* ok) { QList messages; QSqlQuery q(db); diff --git a/src/librssguard/database/databasequeries.h b/src/librssguard/database/databasequeries.h index 3a6559c9b..f674d51dc 100644 --- a/src/librssguard/database/databasequeries.h +++ b/src/librssguard/database/databasequeries.h @@ -111,6 +111,7 @@ class DatabaseQueries { static ArticleCounts getMessageCountsForBin(const QSqlDatabase& db, int account_id, bool* ok = nullptr); // Get messages (for newspaper view for example). + static QList getUndeletedMessagesForProbe(const QSqlDatabase& db, const Search* probe); static QList getUndeletedMessagesWithLabel(const QSqlDatabase& db, const Label* label, bool* ok = nullptr); static QList getUndeletedLabelledMessages(const QSqlDatabase& db, int account_id, bool* ok = nullptr); static QList getUndeletedImportantMessages(const QSqlDatabase& db, int account_id, bool* ok = nullptr); diff --git a/src/librssguard/services/abstract/search.cpp b/src/librssguard/services/abstract/search.cpp index 4c645ca5e..2199c4853 100755 --- a/src/librssguard/services/abstract/search.cpp +++ b/src/librssguard/services/abstract/search.cpp @@ -109,12 +109,9 @@ void Search::updateCounts(bool including_total_count) { } QList Search::undeletedMessages() const { - return {}; - /* QSqlDatabase database = qApp->database()->driver()->connection(metaObject()->className()); - return DatabaseQueries::getUndeletedMessagesWithLabel(database, this); - */ + return DatabaseQueries::getUndeletedMessagesForProbe(database, this); } QIcon Search::generateIcon(const QColor& color) {