provide local IDs

This commit is contained in:
Martin Rotter 2021-07-14 14:52:27 +02:00
parent fd251a1e78
commit 75ce82bb49
11 changed files with 30 additions and 29 deletions

View File

@ -127,24 +127,27 @@ void FeedDownloader::updateOneFeed(Feed* feed) {
QSqlDatabase database = is_main_thread ? QSqlDatabase database = is_main_thread ?
qApp->database()->driver()->connection(metaObject()->className()) : qApp->database()->driver()->connection(metaObject()->className()) :
qApp->database()->driver()->connection(QSL("feed_upd")); qApp->database()->driver()->connection(QSL("feed_upd"));
QHash<ServiceRoot::BagOfMessages, QStringList> stated_messages; QHash<QString, QPair<ServiceRoot::BagOfMessages, QStringList>> stated_messages;
QHash<QString, QStringList> tagged_messages; QHash<QString, QStringList> tagged_messages;
if (feed->getParentServiceRoot()->wantsBaggedIdsOfExistingMessages()) { if (feed->getParentServiceRoot()->wantsBaggedIdsOfExistingMessages()) {
// This account has activated intelligent downloading of messages. // This account has activated intelligent downloading of messages.
// Prepare bags. // Prepare bags.
stated_messages.insert(ServiceRoot::BagOfMessages::Read, stated_messages.insert(feed->customId(),
DatabaseQueries::bagOfMessages(database, { ServiceRoot::BagOfMessages::Read,
ServiceRoot::BagOfMessages::Read, DatabaseQueries::bagOfMessages(database,
{ feed })); ServiceRoot::BagOfMessages::Read,
stated_messages.insert(ServiceRoot::BagOfMessages::Unread, feed) });
DatabaseQueries::bagOfMessages(database, stated_messages.insert(feed->customId(),
ServiceRoot::BagOfMessages::Unread, { ServiceRoot::BagOfMessages::Unread,
{ feed })); DatabaseQueries::bagOfMessages(database,
stated_messages.insert(ServiceRoot::BagOfMessages::Starred, ServiceRoot::BagOfMessages::Unread,
DatabaseQueries::bagOfMessages(database, feed) });
ServiceRoot::BagOfMessages::Starred, stated_messages.insert(feed->customId(),
{ feed })); { ServiceRoot::BagOfMessages::Starred,
DatabaseQueries::bagOfMessages(database,
ServiceRoot::BagOfMessages::Starred,
feed) });
tagged_messages = DatabaseQueries::bagsOfMessages(database, tagged_messages = DatabaseQueries::bagsOfMessages(database,
feed->getParentServiceRoot()->labelsNode()->labels()); feed->getParentServiceRoot()->labelsNode()->labels());

View File

@ -958,7 +958,7 @@ QList<Message> DatabaseQueries::getUndeletedMessagesForAccount(const QSqlDatabas
return messages; return messages;
} }
QStringList DatabaseQueries::bagOfMessages(const QSqlDatabase& db, ServiceRoot::BagOfMessages bag, const QList<Feed*>& feeds) { QStringList DatabaseQueries::bagOfMessages(const QSqlDatabase& db, ServiceRoot::BagOfMessages bag, const Feed* feed) {
QStringList ids; QStringList ids;
QSqlQuery q(db); QSqlQuery q(db);
QString query; QString query;
@ -984,13 +984,11 @@ QStringList DatabaseQueries::bagOfMessages(const QSqlDatabase& db, ServiceRoot::
"FROM Messages " "FROM Messages "
"WHERE %1 AND account_id = :account_id;").arg(query)); "WHERE %1 AND account_id = :account_id;").arg(query));
for (Feed* feed: feeds) { q.bindValue(QSL(":account_id"), feed->getParentServiceRoot()->accountId());
q.bindValue(QSL(":account_id"), feed->getParentServiceRoot()->accountId()); q.exec();
q.exec();
while (q.next()) { while (q.next()) {
ids.append(q.value(0).toString()); ids.append(q.value(0).toString());
}
} }
return ids; return ids;

View File

@ -93,7 +93,7 @@ class DatabaseQueries {
static QList<Message> getUndeletedMessagesForAccount(const QSqlDatabase& db, int account_id, bool* ok = nullptr); static QList<Message> getUndeletedMessagesForAccount(const QSqlDatabase& db, int account_id, bool* ok = nullptr);
// Custom ID accumulators. // Custom ID accumulators.
static QStringList bagOfMessages(const QSqlDatabase& db, ServiceRoot::BagOfMessages bag, const QList<Feed*>& feeds); static QStringList bagOfMessages(const QSqlDatabase& db, ServiceRoot::BagOfMessages bag, const Feed* feed);
static QHash<QString, QStringList> bagsOfMessages(const QSqlDatabase& db, const QList<Label*>& labels); static QHash<QString, QStringList> bagsOfMessages(const QSqlDatabase& db, const QList<Label*>& labels);
static QStringList customIdsOfMessagesFromLabel(const QSqlDatabase& db, Label* label, bool* ok = nullptr); static QStringList customIdsOfMessagesFromLabel(const QSqlDatabase& db, Label* label, bool* ok = nullptr);
static QStringList customIdsOfImportantMessages(const QSqlDatabase& db, int account_id, bool* ok = nullptr); static QStringList customIdsOfImportantMessages(const QSqlDatabase& db, int account_id, bool* ok = nullptr);

View File

@ -102,7 +102,7 @@ class ServiceRoot : public RootItem {
// Throws exception subclassed from ApplicationException, preferably FeedFetchException // Throws exception subclassed from ApplicationException, preferably FeedFetchException
// if any problems arise. // if any problems arise.
virtual QList<Message> obtainNewMessages(const QList<Feed*>& feeds, virtual QList<Message> obtainNewMessages(const QList<Feed*>& feeds,
const QHash<ServiceRoot::BagOfMessages, QStringList>& stated_messages, QHash<QString, QPair<ServiceRoot::BagOfMessages, QStringList>> stated_messages,
const QHash<QString, QStringList>& tagged_messages) = 0; const QHash<QString, QStringList>& tagged_messages) = 0;
// This method should prepare messages for given "item" (download them maybe?) // This method should prepare messages for given "item" (download them maybe?)

View File

@ -24,7 +24,7 @@ class FeedlyServiceRoot : public ServiceRoot, public CacheForServiceRoot {
virtual QVariantHash customDatabaseData() const; virtual QVariantHash customDatabaseData() const;
virtual void setCustomDatabaseData(const QVariantHash& data); virtual void setCustomDatabaseData(const QVariantHash& data);
virtual QList<Message> obtainNewMessages(const QList<Feed*>& feeds, virtual QList<Message> obtainNewMessages(const QList<Feed*>& feeds,
const QHash<ServiceRoot::BagOfMessages, QStringList>& stated_messages, QHash<QString, QPair<ServiceRoot::BagOfMessages, QStringList>> stated_messages,
const QHash<QString, QStringList>& tagged_messages); const QHash<QString, QStringList>& tagged_messages);
FeedlyNetwork* network() const; FeedlyNetwork* network() const;

View File

@ -32,7 +32,7 @@ class GmailServiceRoot : public ServiceRoot, public CacheForServiceRoot {
virtual QVariantHash customDatabaseData() const; virtual QVariantHash customDatabaseData() const;
virtual void setCustomDatabaseData(const QVariantHash& data); virtual void setCustomDatabaseData(const QVariantHash& data);
virtual QList<Message> obtainNewMessages(const QList<Feed*>& feeds, virtual QList<Message> obtainNewMessages(const QList<Feed*>& feeds,
const QHash<ServiceRoot::BagOfMessages, QStringList>& stated_messages, QHash<QString, QPair<ServiceRoot::BagOfMessages, QStringList>> stated_messages,
const QHash<QString, QStringList>& tagged_messages); const QHash<QString, QStringList>& tagged_messages);
protected: protected:

View File

@ -32,7 +32,7 @@ class GreaderServiceRoot : public ServiceRoot, public CacheForServiceRoot {
virtual QVariantHash customDatabaseData() const; virtual QVariantHash customDatabaseData() const;
virtual void setCustomDatabaseData(const QVariantHash& data); virtual void setCustomDatabaseData(const QVariantHash& data);
virtual QList<Message> obtainNewMessages(const QList<Feed*>& feeds, virtual QList<Message> obtainNewMessages(const QList<Feed*>& feeds,
const QHash<ServiceRoot::BagOfMessages, QStringList>& stated_messages, QHash<QString, QPair<ServiceRoot::BagOfMessages, QStringList>> stated_messages,
const QHash<QString, QStringList>& tagged_messages); const QHash<QString, QStringList>& tagged_messages);
virtual bool wantsBaggedIdsOfExistingMessages() const; virtual bool wantsBaggedIdsOfExistingMessages() const;

View File

@ -30,7 +30,7 @@ class InoreaderServiceRoot : public ServiceRoot, public CacheForServiceRoot {
virtual QVariantHash customDatabaseData() const; virtual QVariantHash customDatabaseData() const;
virtual void setCustomDatabaseData(const QVariantHash& data); virtual void setCustomDatabaseData(const QVariantHash& data);
virtual QList<Message> obtainNewMessages(const QList<Feed*>& feeds, virtual QList<Message> obtainNewMessages(const QList<Feed*>& feeds,
const QHash<ServiceRoot::BagOfMessages, QStringList>& stated_messages, QHash<QString, QPair<ServiceRoot::BagOfMessages, QStringList>> stated_messages,
const QHash<QString, QStringList>& tagged_messages); const QHash<QString, QStringList>& tagged_messages);
protected: protected:

View File

@ -29,7 +29,7 @@ class OwnCloudServiceRoot : public ServiceRoot, public CacheForServiceRoot {
virtual QVariantHash customDatabaseData() const; virtual QVariantHash customDatabaseData() const;
virtual void setCustomDatabaseData(const QVariantHash& data); virtual void setCustomDatabaseData(const QVariantHash& data);
virtual QList<Message> obtainNewMessages(const QList<Feed*>& feeds, virtual QList<Message> obtainNewMessages(const QList<Feed*>& feeds,
const QHash<ServiceRoot::BagOfMessages, QStringList>& stated_messages, QHash<QString, QPair<ServiceRoot::BagOfMessages, QStringList>> stated_messages,
const QHash<QString, QStringList>& tagged_messages); const QHash<QString, QStringList>& tagged_messages);
OwnCloudNetworkFactory* network() const; OwnCloudNetworkFactory* network() const;

View File

@ -33,7 +33,7 @@ class StandardServiceRoot : public ServiceRoot {
virtual bool supportsCategoryAdding() const; virtual bool supportsCategoryAdding() const;
virtual Qt::ItemFlags additionalFlags() const; virtual Qt::ItemFlags additionalFlags() const;
virtual QList<Message> obtainNewMessages(const QList<Feed*>& feeds, virtual QList<Message> obtainNewMessages(const QList<Feed*>& feeds,
const QHash<ServiceRoot::BagOfMessages, QStringList>& stated_messages, QHash<QString, QPair<ServiceRoot::BagOfMessages, QStringList>> stated_messages,
const QHash<QString, QStringList>& tagged_messages); const QHash<QString, QStringList>& tagged_messages);
QList<QAction*> serviceMenu(); QList<QAction*> serviceMenu();

View File

@ -34,7 +34,7 @@ class TtRssServiceRoot : public ServiceRoot, public CacheForServiceRoot {
virtual QVariantHash customDatabaseData() const; virtual QVariantHash customDatabaseData() const;
virtual void setCustomDatabaseData(const QVariantHash& data); virtual void setCustomDatabaseData(const QVariantHash& data);
virtual QList<Message> obtainNewMessages(const QList<Feed*>& feeds, virtual QList<Message> obtainNewMessages(const QList<Feed*>& feeds,
const QHash<ServiceRoot::BagOfMessages, QStringList>& stated_messages, QHash<QString, QPair<ServiceRoot::BagOfMessages, QStringList>> stated_messages,
const QHash<QString, QStringList>& tagged_messages); const QHash<QString, QStringList>& tagged_messages);
// Access to network. // Access to network.