diff --git a/src/librssguard/core/feeddownloader.cpp b/src/librssguard/core/feeddownloader.cpp index 2f47a0ff4..e7d0cd52f 100644 --- a/src/librssguard/core/feeddownloader.cpp +++ b/src/librssguard/core/feeddownloader.cpp @@ -127,24 +127,27 @@ void FeedDownloader::updateOneFeed(Feed* feed) { QSqlDatabase database = is_main_thread ? qApp->database()->driver()->connection(metaObject()->className()) : qApp->database()->driver()->connection(QSL("feed_upd")); - QHash stated_messages; + QHash> stated_messages; QHash tagged_messages; if (feed->getParentServiceRoot()->wantsBaggedIdsOfExistingMessages()) { // This account has activated intelligent downloading of messages. // Prepare bags. - stated_messages.insert(ServiceRoot::BagOfMessages::Read, - DatabaseQueries::bagOfMessages(database, - ServiceRoot::BagOfMessages::Read, - { feed })); - stated_messages.insert(ServiceRoot::BagOfMessages::Unread, - DatabaseQueries::bagOfMessages(database, - ServiceRoot::BagOfMessages::Unread, - { feed })); - stated_messages.insert(ServiceRoot::BagOfMessages::Starred, - DatabaseQueries::bagOfMessages(database, - ServiceRoot::BagOfMessages::Starred, - { feed })); + stated_messages.insert(feed->customId(), + { ServiceRoot::BagOfMessages::Read, + DatabaseQueries::bagOfMessages(database, + ServiceRoot::BagOfMessages::Read, + feed) }); + stated_messages.insert(feed->customId(), + { ServiceRoot::BagOfMessages::Unread, + DatabaseQueries::bagOfMessages(database, + ServiceRoot::BagOfMessages::Unread, + feed) }); + stated_messages.insert(feed->customId(), + { ServiceRoot::BagOfMessages::Starred, + DatabaseQueries::bagOfMessages(database, + ServiceRoot::BagOfMessages::Starred, + feed) }); tagged_messages = DatabaseQueries::bagsOfMessages(database, feed->getParentServiceRoot()->labelsNode()->labels()); diff --git a/src/librssguard/database/databasequeries.cpp b/src/librssguard/database/databasequeries.cpp index 804b3cae8..54885c51d 100755 --- a/src/librssguard/database/databasequeries.cpp +++ b/src/librssguard/database/databasequeries.cpp @@ -958,7 +958,7 @@ QList DatabaseQueries::getUndeletedMessagesForAccount(const QSqlDatabas return messages; } -QStringList DatabaseQueries::bagOfMessages(const QSqlDatabase& db, ServiceRoot::BagOfMessages bag, const QList& feeds) { +QStringList DatabaseQueries::bagOfMessages(const QSqlDatabase& db, ServiceRoot::BagOfMessages bag, const Feed* feed) { QStringList ids; QSqlQuery q(db); QString query; @@ -984,13 +984,11 @@ QStringList DatabaseQueries::bagOfMessages(const QSqlDatabase& db, ServiceRoot:: "FROM Messages " "WHERE %1 AND account_id = :account_id;").arg(query)); - for (Feed* feed: feeds) { - q.bindValue(QSL(":account_id"), feed->getParentServiceRoot()->accountId()); - q.exec(); + q.bindValue(QSL(":account_id"), feed->getParentServiceRoot()->accountId()); + q.exec(); - while (q.next()) { - ids.append(q.value(0).toString()); - } + while (q.next()) { + ids.append(q.value(0).toString()); } return ids; diff --git a/src/librssguard/database/databasequeries.h b/src/librssguard/database/databasequeries.h index 0a76d0e22..ea2b4efce 100644 --- a/src/librssguard/database/databasequeries.h +++ b/src/librssguard/database/databasequeries.h @@ -93,7 +93,7 @@ class DatabaseQueries { static QList getUndeletedMessagesForAccount(const QSqlDatabase& db, int account_id, bool* ok = nullptr); // Custom ID accumulators. - static QStringList bagOfMessages(const QSqlDatabase& db, ServiceRoot::BagOfMessages bag, const QList& feeds); + static QStringList bagOfMessages(const QSqlDatabase& db, ServiceRoot::BagOfMessages bag, const Feed* feed); static QHash bagsOfMessages(const QSqlDatabase& db, const QList& labels); static QStringList customIdsOfMessagesFromLabel(const QSqlDatabase& db, Label* label, bool* ok = nullptr); static QStringList customIdsOfImportantMessages(const QSqlDatabase& db, int account_id, bool* ok = nullptr); diff --git a/src/librssguard/services/abstract/serviceroot.h b/src/librssguard/services/abstract/serviceroot.h index c10158101..601e63aff 100644 --- a/src/librssguard/services/abstract/serviceroot.h +++ b/src/librssguard/services/abstract/serviceroot.h @@ -102,7 +102,7 @@ class ServiceRoot : public RootItem { // Throws exception subclassed from ApplicationException, preferably FeedFetchException // if any problems arise. virtual QList obtainNewMessages(const QList& feeds, - const QHash& stated_messages, + QHash> stated_messages, const QHash& tagged_messages) = 0; // This method should prepare messages for given "item" (download them maybe?) diff --git a/src/librssguard/services/feedly/feedlyserviceroot.h b/src/librssguard/services/feedly/feedlyserviceroot.h index 79edf203e..4dabaed41 100755 --- a/src/librssguard/services/feedly/feedlyserviceroot.h +++ b/src/librssguard/services/feedly/feedlyserviceroot.h @@ -24,7 +24,7 @@ class FeedlyServiceRoot : public ServiceRoot, public CacheForServiceRoot { virtual QVariantHash customDatabaseData() const; virtual void setCustomDatabaseData(const QVariantHash& data); virtual QList obtainNewMessages(const QList& feeds, - const QHash& stated_messages, + QHash> stated_messages, const QHash& tagged_messages); FeedlyNetwork* network() const; diff --git a/src/librssguard/services/gmail/gmailserviceroot.h b/src/librssguard/services/gmail/gmailserviceroot.h index eb8c42c11..7a0ca0b00 100644 --- a/src/librssguard/services/gmail/gmailserviceroot.h +++ b/src/librssguard/services/gmail/gmailserviceroot.h @@ -32,7 +32,7 @@ class GmailServiceRoot : public ServiceRoot, public CacheForServiceRoot { virtual QVariantHash customDatabaseData() const; virtual void setCustomDatabaseData(const QVariantHash& data); virtual QList obtainNewMessages(const QList& feeds, - const QHash& stated_messages, + QHash> stated_messages, const QHash& tagged_messages); protected: diff --git a/src/librssguard/services/greader/greaderserviceroot.h b/src/librssguard/services/greader/greaderserviceroot.h index 79b590519..2390d7909 100755 --- a/src/librssguard/services/greader/greaderserviceroot.h +++ b/src/librssguard/services/greader/greaderserviceroot.h @@ -32,7 +32,7 @@ class GreaderServiceRoot : public ServiceRoot, public CacheForServiceRoot { virtual QVariantHash customDatabaseData() const; virtual void setCustomDatabaseData(const QVariantHash& data); virtual QList obtainNewMessages(const QList& feeds, - const QHash& stated_messages, + QHash> stated_messages, const QHash& tagged_messages); virtual bool wantsBaggedIdsOfExistingMessages() const; diff --git a/src/librssguard/services/inoreader/inoreaderserviceroot.h b/src/librssguard/services/inoreader/inoreaderserviceroot.h index c8954a6f8..dd6324e57 100644 --- a/src/librssguard/services/inoreader/inoreaderserviceroot.h +++ b/src/librssguard/services/inoreader/inoreaderserviceroot.h @@ -30,7 +30,7 @@ class InoreaderServiceRoot : public ServiceRoot, public CacheForServiceRoot { virtual QVariantHash customDatabaseData() const; virtual void setCustomDatabaseData(const QVariantHash& data); virtual QList obtainNewMessages(const QList& feeds, - const QHash& stated_messages, + QHash> stated_messages, const QHash& tagged_messages); protected: diff --git a/src/librssguard/services/owncloud/owncloudserviceroot.h b/src/librssguard/services/owncloud/owncloudserviceroot.h index 1e5cb9b5d..7cac7a1fa 100644 --- a/src/librssguard/services/owncloud/owncloudserviceroot.h +++ b/src/librssguard/services/owncloud/owncloudserviceroot.h @@ -29,7 +29,7 @@ class OwnCloudServiceRoot : public ServiceRoot, public CacheForServiceRoot { virtual QVariantHash customDatabaseData() const; virtual void setCustomDatabaseData(const QVariantHash& data); virtual QList obtainNewMessages(const QList& feeds, - const QHash& stated_messages, + QHash> stated_messages, const QHash& tagged_messages); OwnCloudNetworkFactory* network() const; diff --git a/src/librssguard/services/standard/standardserviceroot.h b/src/librssguard/services/standard/standardserviceroot.h index 4bc453102..6ac971be1 100644 --- a/src/librssguard/services/standard/standardserviceroot.h +++ b/src/librssguard/services/standard/standardserviceroot.h @@ -33,7 +33,7 @@ class StandardServiceRoot : public ServiceRoot { virtual bool supportsCategoryAdding() const; virtual Qt::ItemFlags additionalFlags() const; virtual QList obtainNewMessages(const QList& feeds, - const QHash& stated_messages, + QHash> stated_messages, const QHash& tagged_messages); QList serviceMenu(); diff --git a/src/librssguard/services/tt-rss/ttrssserviceroot.h b/src/librssguard/services/tt-rss/ttrssserviceroot.h index 021ce21a9..6d9098a16 100644 --- a/src/librssguard/services/tt-rss/ttrssserviceroot.h +++ b/src/librssguard/services/tt-rss/ttrssserviceroot.h @@ -34,7 +34,7 @@ class TtRssServiceRoot : public ServiceRoot, public CacheForServiceRoot { virtual QVariantHash customDatabaseData() const; virtual void setCustomDatabaseData(const QVariantHash& data); virtual QList obtainNewMessages(const QList& feeds, - const QHash& stated_messages, + QHash> stated_messages, const QHash& tagged_messages); // Access to network.