diff --git a/src/librssguard/core/message.cpp b/src/librssguard/core/message.cpp index 9c2ce7c56..f27ff9b7a 100644 --- a/src/librssguard/core/message.cpp +++ b/src/librssguard/core/message.cpp @@ -181,6 +181,7 @@ QJsonObject Message::toJson() const { obj.insert(QSL("id"), m_id); obj.insert(QSL("custom_id"), m_customId); obj.insert(QSL("custom_hash"), m_customHash); + obj.insert(QSL("feed_custom_id"), m_feedId); obj.insert(QSL("enclosures"), Enclosures::encodeEnclosuresToJson(m_enclosures)); return obj; diff --git a/src/librssguard/database/databasequeries.cpp b/src/librssguard/database/databasequeries.cpp index 53da6c723..752a9aa07 100644 --- a/src/librssguard/database/databasequeries.cpp +++ b/src/librssguard/database/databasequeries.cpp @@ -1174,32 +1174,35 @@ QList DatabaseQueries::getUndeletedUnreadMessages(const QSqlDatabase& d return messages; } -QList DatabaseQueries::getFeedsSlice(const QSqlDatabase& db, - const QString& feed_custom_id, - int account_id, - bool newest_first, - bool unread_only, - int row_offset, - int row_limit) { +QList DatabaseQueries::getArticlesSlice(const QSqlDatabase& db, + const QString& feed_custom_id, + int account_id, + bool newest_first, + bool unread_only, + int row_offset, + int row_limit) { QList messages; QSqlQuery q(db); + QString feed_clause = !feed_custom_id.isEmpty() ? QSL("feed = :feed AND") : QString(); + q.setForwardOnly(true); q.prepare(QSL("SELECT %1 " "FROM Messages " "WHERE is_deleted = 0 AND " " is_pdeleted = 0 AND " " is_read = :is_read AND " - " feed = :feed AND " + " %3 " " account_id = :account_id " "ORDER BY Messages.date_created %2 " "LIMIT :row_limit OFFSET :row_offset;") .arg(messageTableAttributes(true, db.driverName() == QSL(APP_DB_SQLITE_DRIVER)).values().join(QSL(", ")), - newest_first ? QSL("DESC") : QSL("ASC"))); - q.bindValue(QSL(":feed"), feed_custom_id); + newest_first ? QSL("DESC") : QSL("ASC"), + feed_clause)); q.bindValue(QSL(":account_id"), account_id); q.bindValue(QSL(":row_limit"), row_limit); q.bindValue(QSL(":row_offset"), row_offset); + q.bindValue(QSL(":feed"), QSL("feed")); if (unread_only) { q.bindValue(QSL(":is_read"), 0); diff --git a/src/librssguard/database/databasequeries.h b/src/librssguard/database/databasequeries.h index a2692eccb..ee76740ae 100644 --- a/src/librssguard/database/databasequeries.h +++ b/src/librssguard/database/databasequeries.h @@ -118,13 +118,13 @@ class DatabaseQueries { static QList getUndeletedMessagesForBin(const QSqlDatabase& db, int account_id, bool* ok = nullptr); static QList getUndeletedMessagesForAccount(const QSqlDatabase& db, int account_id, bool* ok = nullptr); - static QList getFeedsSlice(const QSqlDatabase& db, - const QString& feed_custom_id, - int account_id, - bool newest_first, - bool unread_only, - int row_offset, - int row_limit); + static QList getArticlesSlice(const QSqlDatabase& db, + const QString& feed_custom_id, + int account_id, + bool newest_first, + bool unread_only, + int row_offset, + int row_limit); // Custom ID accumulators. static QStringList bagOfMessages(const QSqlDatabase& db, ServiceRoot::BagOfMessages bag, const Feed* feed); diff --git a/src/librssguard/network-web/apiserver.cpp b/src/librssguard/network-web/apiserver.cpp index 1bc3c797a..a4cb284f0 100644 --- a/src/librssguard/network-web/apiserver.cpp +++ b/src/librssguard/network-web/apiserver.cpp @@ -81,7 +81,7 @@ ApiResponse ApiServer::processArticlesFromFeed(const QJsonValue& req) const { QSqlDatabase database = qApp->database()->driver()->connection(metaObject()->className()); QList msgs = - DatabaseQueries::getFeedsSlice(database, feed_id, account_id, newest_first, unread_only, row_offset, row_limit); + DatabaseQueries::getArticlesSlice(database, feed_id, account_id, newest_first, unread_only, row_offset, row_limit); QJsonArray msgs_json_array; for (const Message& msg : msgs) {