From a6433075080b57d59bbda0ae135451823413b917 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Tue, 3 Oct 2017 10:26:17 +0200 Subject: [PATCH] Refactored common code. --- src/miscellaneous/feedreader.cpp | 15 +++++--- src/services/abstract/feed.cpp | 7 +++- src/services/abstract/serviceroot.cpp | 38 ++++++++++++++++--- src/services/abstract/serviceroot.h | 1 - .../network/inoreadernetworkfactory.cpp | 20 +++++++++- src/services/owncloud/owncloudserviceroot.cpp | 36 ------------------ src/services/owncloud/owncloudserviceroot.h | 3 -- src/services/tt-rss/ttrssserviceroot.cpp | 33 ---------------- src/services/tt-rss/ttrssserviceroot.h | 3 -- 9 files changed, 67 insertions(+), 89 deletions(-) diff --git a/src/miscellaneous/feedreader.cpp b/src/miscellaneous/feedreader.cpp index 485e3e9e6..ac3b618ed 100755 --- a/src/miscellaneous/feedreader.cpp +++ b/src/miscellaneous/feedreader.cpp @@ -24,10 +24,6 @@ #include "services/inoreader/inoreaderentrypoint.h" #endif -#include "services/owncloud/owncloudserviceentrypoint.h" -#include "services/standard/standardserviceentrypoint.h" -#include "services/tt-rss/ttrssserviceentrypoint.h" - #include "core/feeddownloader.h" #include "core/feedsmodel.h" #include "core/feedsproxymodel.h" @@ -36,6 +32,10 @@ #include "miscellaneous/application.h" #include "miscellaneous/databasecleaner.h" #include "miscellaneous/mutex.h" +#include "services/abstract/cacheforserviceroot.h" +#include "services/owncloud/owncloudserviceentrypoint.h" +#include "services/standard/standardserviceentrypoint.h" +#include "services/tt-rss/ttrssserviceentrypoint.h" #include #include @@ -224,8 +224,11 @@ void FeedReader::executeNextAutoUpdate() { void FeedReader::checkServicesForAsyncOperations() { foreach (ServiceRoot* service, m_feedsModel->serviceRoots()) { - // Store any cached data. - service->saveAllCachedData(); + auto cache = dynamic_cast(service); + + if (cache != nullptr) { + cache->saveAllCachedData(); + } } asyncCacheSaveFinished(); diff --git a/src/services/abstract/feed.cpp b/src/services/abstract/feed.cpp index 96fa2b20b..29a073199 100755 --- a/src/services/abstract/feed.cpp +++ b/src/services/abstract/feed.cpp @@ -196,7 +196,12 @@ void Feed::run() { << QThread::currentThreadId() << "\'."; // Save all cached data first. - getParentServiceRoot()->saveAllCachedData(); + auto cache = dynamic_cast(getParentServiceRoot()); + + if (cache != nullptr) { + cache->saveAllCachedData(); + } + bool error_during_obtaining; QList msgs = obtainNewMessages(&error_during_obtaining); diff --git a/src/services/abstract/serviceroot.cpp b/src/services/abstract/serviceroot.cpp index e668bc798..05bf61270 100755 --- a/src/services/abstract/serviceroot.cpp +++ b/src/services/abstract/serviceroot.cpp @@ -203,8 +203,6 @@ QList ServiceRoot::undeletedMessages() const { return DatabaseQueries::getUndeletedMessagesForAccount(database, accountId()); } -void ServiceRoot::saveAllCachedData() {} - void ServiceRoot::itemChanged(const QList& items) { emit dataChanged(items); } @@ -447,9 +445,14 @@ bool ServiceRoot::loadMessagesForItem(RootItem* item, MessagesModel* model) { } bool ServiceRoot::onBeforeSetMessagesRead(RootItem* selected_item, const QList& messages, RootItem::ReadStatus read) { - Q_UNUSED(messages) - Q_UNUSED(read) Q_UNUSED(selected_item) + + auto cache = dynamic_cast(this); + + if (cache != nullptr) { + cache->addMessageStatesToCache(customIDsOfMessages(messages), read); + } + return true; } @@ -463,7 +466,32 @@ bool ServiceRoot::onAfterSetMessagesRead(RootItem* selected_item, const QList& changes) { Q_UNUSED(selected_item) - Q_UNUSED(changes) + + auto cache = dynamic_cast(this); + + if (cache != nullptr) { + // Now, we need to separate the changes because of ownCloud API limitations. + QList mark_starred_msgs; + QList mark_unstarred_msgs; + + foreach (const ImportanceChange& pair, changes) { + if (pair.second == RootItem::Important) { + mark_starred_msgs.append(pair.first); + } + else { + mark_unstarred_msgs.append(pair.first); + } + } + + if (!mark_starred_msgs.isEmpty()) { + cache->addMessageStatesToCache(mark_starred_msgs, RootItem::Important); + } + + if (!mark_unstarred_msgs.isEmpty()) { + cache->addMessageStatesToCache(mark_unstarred_msgs, RootItem::NotImportant); + } + } + return true; } diff --git a/src/services/abstract/serviceroot.h b/src/services/abstract/serviceroot.h index 7a470e024..830320f40 100755 --- a/src/services/abstract/serviceroot.h +++ b/src/services/abstract/serviceroot.h @@ -79,7 +79,6 @@ class ServiceRoot : public RootItem { // user explicitly deletes existing service instance. virtual void start(bool freshly_activated) = 0; virtual void stop() = 0; - virtual void saveAllCachedData(); // Account ID corresponds with DB attribute Accounts (id). int accountId() const; diff --git a/src/services/inoreader/network/inoreadernetworkfactory.cpp b/src/services/inoreader/network/inoreadernetworkfactory.cpp index 5c4c5d2da..1db7c47ec 100755 --- a/src/services/inoreader/network/inoreadernetworkfactory.cpp +++ b/src/services/inoreader/network/inoreadernetworkfactory.cpp @@ -151,7 +151,25 @@ QList InoreaderNetworkFactory::messages(const QString& stream_id, bool* } } -void InoreaderNetworkFactory::markMessagesRead(RootItem::ReadStatus status, const QStringList& custom_ids) {} +void InoreaderNetworkFactory::markMessagesRead(RootItem::ReadStatus status, const QStringList& custom_ids) { + QString target_url = INOREADER_API_EDIT_TAG; + + if (status == RootItem::ReadStatus::Read) { + target_url += QString("?a=user/-/") + INOREADER_STATE_READ + "&"; + } + else { + target_url += QString("?r=user/-/") + INOREADER_STATE_READ + "&"; + } + + QStringList trimmed_ids; + + foreach (const QString& id, custom_ids) { + trimmed_ids.append(QString("i=") + id); + } + + QString full_url = target_url + trimmed_ids.join(QL1C('&')); + +} void InoreaderNetworkFactory::markMessagesStarred(RootItem::Importance importance, const QStringList& custom_ids) {} diff --git a/src/services/owncloud/owncloudserviceroot.cpp b/src/services/owncloud/owncloudserviceroot.cpp index 9e205a6da..acd94289b 100755 --- a/src/services/owncloud/owncloudserviceroot.cpp +++ b/src/services/owncloud/owncloudserviceroot.cpp @@ -143,42 +143,6 @@ void OwnCloudServiceRoot::saveAllCachedData() { } } -bool OwnCloudServiceRoot::onBeforeSetMessagesRead(RootItem* selected_item, - const QList& messages, - RootItem::ReadStatus read) { - Q_UNUSED(selected_item) - addMessageStatesToCache(customIDsOfMessages(messages), read); - return true; -} - -bool OwnCloudServiceRoot::onBeforeSwitchMessageImportance(RootItem* selected_item, - const QList& changes) { - Q_UNUSED(selected_item) - - // Now, we need to separate the changes because of ownCloud API limitations. - QList mark_starred_msgs; - QList mark_unstarred_msgs; - - foreach (const ImportanceChange& pair, changes) { - if (pair.second == RootItem::Important) { - mark_starred_msgs.append(pair.first); - } - else { - mark_unstarred_msgs.append(pair.first); - } - } - - if (!mark_starred_msgs.isEmpty()) { - addMessageStatesToCache(mark_starred_msgs, RootItem::Important); - } - - if (!mark_unstarred_msgs.isEmpty()) { - addMessageStatesToCache(mark_unstarred_msgs, RootItem::NotImportant); - } - - return true; -} - void OwnCloudServiceRoot::updateTitle() { setTitle(m_network->authUsername() + QSL(" (Nextcloud News)")); } diff --git a/src/services/owncloud/owncloudserviceroot.h b/src/services/owncloud/owncloudserviceroot.h index a8c465acd..aedd3e8b0 100755 --- a/src/services/owncloud/owncloudserviceroot.h +++ b/src/services/owncloud/owncloudserviceroot.h @@ -47,9 +47,6 @@ class OwnCloudServiceRoot : public ServiceRoot, public CacheForServiceRoot { QString code() const; OwnCloudNetworkFactory* network() const; - bool onBeforeSetMessagesRead(RootItem* selected_item, const QList& messages, ReadStatus read); - bool onBeforeSwitchMessageImportance(RootItem* selected_item, const QList& changes); - void updateTitle(); void saveAccountDataToDatabase(); diff --git a/src/services/tt-rss/ttrssserviceroot.cpp b/src/services/tt-rss/ttrssserviceroot.cpp index c52706bdf..fdd743025 100755 --- a/src/services/tt-rss/ttrssserviceroot.cpp +++ b/src/services/tt-rss/ttrssserviceroot.cpp @@ -193,39 +193,6 @@ QList TtRssServiceRoot::serviceMenu() { return m_serviceMenu; } -bool TtRssServiceRoot::onBeforeSetMessagesRead(RootItem* selected_item, const QList& messages, RootItem::ReadStatus read) { - Q_UNUSED(selected_item) - addMessageStatesToCache(customIDsOfMessages(messages), read); - return true; -} - -bool TtRssServiceRoot::onBeforeSwitchMessageImportance(RootItem* selected_item, const QList& changes) { - Q_UNUSED(selected_item) - - // Now, we need to separate the changes because of ownCloud API limitations. - QList mark_starred_msgs; - QList mark_unstarred_msgs; - - foreach (const ImportanceChange& pair, changes) { - if (pair.second == RootItem::Important) { - mark_starred_msgs.append(pair.first); - } - else { - mark_unstarred_msgs.append(pair.first); - } - } - - if (!mark_starred_msgs.isEmpty()) { - addMessageStatesToCache(mark_starred_msgs, RootItem::Important); - } - - if (!mark_unstarred_msgs.isEmpty()) { - addMessageStatesToCache(mark_unstarred_msgs, RootItem::NotImportant); - } - - return true; -} - TtRssNetworkFactory* TtRssServiceRoot::network() const { return m_network; } diff --git a/src/services/tt-rss/ttrssserviceroot.h b/src/services/tt-rss/ttrssserviceroot.h index 486e3a2a5..3b3a1476e 100755 --- a/src/services/tt-rss/ttrssserviceroot.h +++ b/src/services/tt-rss/ttrssserviceroot.h @@ -49,9 +49,6 @@ class TtRssServiceRoot : public ServiceRoot, public CacheForServiceRoot { void saveAllCachedData(); - bool onBeforeSetMessagesRead(RootItem* selected_item, const QList& messages, ReadStatus read); - bool onBeforeSwitchMessageImportance(RootItem* selected_item, const QList& changes); - // Access to network. TtRssNetworkFactory* network() const;