From 620aa20868dfca28198f2d20946c8b79ec2e06dd Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 20 Aug 2021 12:09:52 +0200 Subject: [PATCH] Generalize some methods a bit --- src/librssguard/core/feeddownloader.cpp | 8 ++- src/librssguard/core/feeddownloader.h | 3 +- src/librssguard/gui/dialogs/formmain.cpp | 4 +- src/librssguard/gui/dialogs/formmain.ui | 2 +- .../gui/dialogs/formmessagefiltersmanager.cpp | 2 +- src/librssguard/services/abstract/feed.cpp | 57 ------------------- src/librssguard/services/abstract/feed.h | 3 - .../services/abstract/serviceroot.cpp | 57 +++++++++++++++++++ .../services/abstract/serviceroot.h | 3 + 9 files changed, 70 insertions(+), 69 deletions(-) diff --git a/src/librssguard/core/feeddownloader.cpp b/src/librssguard/core/feeddownloader.cpp index e93d54221..d4be2e17a 100644 --- a/src/librssguard/core/feeddownloader.cpp +++ b/src/librssguard/core/feeddownloader.cpp @@ -150,7 +150,8 @@ void FeedDownloader::updateFeeds(const QList& feeds) { while (!m_feeds.isEmpty()) { auto n_f = m_feeds.takeFirst(); - updateOneFeed(n_f, + updateOneFeed(n_f->getParentServiceRoot(), + n_f, stated_messages.value(n_f->getParentServiceRoot()).value(n_f->customId()), tagged_messages.value(n_f->getParentServiceRoot())); } @@ -165,7 +166,8 @@ void FeedDownloader::stopRunningUpdate() { m_feedsOriginalCount = m_feedsUpdated = 0; } -void FeedDownloader::updateOneFeed(Feed* feed, +void FeedDownloader::updateOneFeed(ServiceRoot* acc, + Feed* feed, const QHash& stated_messages, const QHash& tagged_messages) { qDebugNN << LOGSEC_FEEDDOWNLOADER @@ -351,7 +353,7 @@ void FeedDownloader::updateOneFeed(Feed* feed, << QThread::currentThreadId() << "'."; tmr.restart(); - auto updated_messages = feed->updateMessages(msgs, false); + auto updated_messages = acc->updateMessages(msgs, feed, false); qDebugNN << LOGSEC_FEEDDOWNLOADER << "Updating messages in DB took " << tmr.nsecsElapsed() / 1000 << " microseconds."; diff --git a/src/librssguard/core/feeddownloader.h b/src/librssguard/core/feeddownloader.h index 291668464..7687c14a3 100644 --- a/src/librssguard/core/feeddownloader.h +++ b/src/librssguard/core/feeddownloader.h @@ -54,7 +54,8 @@ class FeedDownloader : public QObject { void updateProgress(const Feed* feed, int current, int total); private: - void updateOneFeed(Feed* feed, + void updateOneFeed(ServiceRoot* acc, + Feed* feed, const QHash& stated_messages, const QHash& tagged_messages); void finalizeUpdate(); diff --git a/src/librssguard/gui/dialogs/formmain.cpp b/src/librssguard/gui/dialogs/formmain.cpp index 7ea68cec8..23dadb59b 100755 --- a/src/librssguard/gui/dialogs/formmain.cpp +++ b/src/librssguard/gui/dialogs/formmain.cpp @@ -215,8 +215,6 @@ void FormMain::prepareMenus() { #endif // Add needed items to the menu. - m_trayMenu->addAction(m_ui->m_actionSwitchMainWindow); - m_trayMenu->addSeparator(); m_trayMenu->addAction(m_ui->m_actionUpdateAllItems); m_trayMenu->addAction(m_ui->m_actionMarkAllItemsRead); m_trayMenu->addSeparator(); @@ -846,7 +844,7 @@ void FormMain::restoreDatabaseSettings() { void FormMain::changeEvent(QEvent* event) { switch (event->type()) { - case QEvent::WindowStateChange: { + case QEvent::Type::WindowStateChange: { if ((windowState() & Qt::WindowState::WindowMinimized) == Qt::WindowState::WindowMinimized && SystemTrayIcon::isSystemTrayDesired() && SystemTrayIcon::isSystemTrayAreaAvailable() && diff --git a/src/librssguard/gui/dialogs/formmain.ui b/src/librssguard/gui/dialogs/formmain.ui index 5493c10c8..4f8b1d763 100755 --- a/src/librssguard/gui/dialogs/formmain.ui +++ b/src/librssguard/gui/dialogs/formmain.ui @@ -421,7 +421,7 @@ false - Switch main &window visibility + Minimize (or hide) main window Hides main window if it is visible and shows it if it is hidden. diff --git a/src/librssguard/gui/dialogs/formmessagefiltersmanager.cpp b/src/librssguard/gui/dialogs/formmessagefiltersmanager.cpp index 92026d619..092ab9ab0 100644 --- a/src/librssguard/gui/dialogs/formmessagefiltersmanager.cpp +++ b/src/librssguard/gui/dialogs/formmessagefiltersmanager.cpp @@ -424,7 +424,7 @@ void FormMessageFiltersManager::processCheckedFeeds() { } // Update messages in DB and reload selection. - it->toFeed()->updateMessages(msgs, true); + it->getParentServiceRoot()->updateMessages(msgs, it->toFeed(), true); displayMessagesOfFeed(); } } diff --git a/src/librssguard/services/abstract/feed.cpp b/src/librssguard/services/abstract/feed.cpp index 6cfabc411..e189f0ffb 100755 --- a/src/librssguard/services/abstract/feed.cpp +++ b/src/librssguard/services/abstract/feed.cpp @@ -189,63 +189,6 @@ bool Feed::markAsReadUnread(RootItem::ReadStatus status) { return service->markFeedsReadUnread(QList() << this, status); } -QPair Feed::updateMessages(QList& messages, bool force_update) { - QPair updated_messages = { 0, 0 }; - - if (messages.isEmpty()) { - qDebugNN << "No messages to be updated/added in DB for feed" - << QUOTE_W_SPACE_DOT(customId()); - return updated_messages; - } - - QList items_to_update; - bool is_main_thread = QThread::currentThread() == qApp->thread(); - - qDebugNN << LOGSEC_CORE - << "Updating messages in DB. Main thread:" - << QUOTE_W_SPACE_DOT(is_main_thread); - - bool ok = false; - QSqlDatabase database = is_main_thread ? - qApp->database()->driver()->connection(metaObject()->className()) : - qApp->database()->driver()->connection(QSL("feed_upd")); - - updated_messages = DatabaseQueries::updateMessages(database, messages, - this, force_update, - &ok); - - if (updated_messages.first > 0 || updated_messages.second > 0) { - // Something was added or updated in the DB, update numbers. - updateCounts(true); - - if (getParentServiceRoot()->recycleBin() != nullptr) { - getParentServiceRoot()->recycleBin()->updateCounts(true); - items_to_update.append(getParentServiceRoot()->recycleBin()); - } - - if (getParentServiceRoot()->importantNode() != nullptr) { - getParentServiceRoot()->importantNode()->updateCounts(true); - items_to_update.append(getParentServiceRoot()->importantNode()); - } - - if (getParentServiceRoot()->unreadNode() != nullptr) { - getParentServiceRoot()->unreadNode()->updateCounts(true); - items_to_update.append(getParentServiceRoot()->unreadNode()); - } - - if (getParentServiceRoot()->labelsNode() != nullptr) { - getParentServiceRoot()->labelsNode()->updateCounts(true); - items_to_update.append(getParentServiceRoot()->labelsNode()); - } - } - - // Some messages were really added to DB, reload feed in model. - items_to_update.append(this); - getParentServiceRoot()->itemChanged(items_to_update); - - return updated_messages; -} - QString Feed::getAutoUpdateStatusDescription() const { QString auto_update_string; diff --git a/src/librssguard/services/abstract/feed.h b/src/librssguard/services/abstract/feed.h index d0bcc21c7..38fead793 100644 --- a/src/librssguard/services/abstract/feed.h +++ b/src/librssguard/services/abstract/feed.h @@ -78,9 +78,6 @@ class Feed : public RootItem { void setMessageFilters(const QList>& messageFilters); void removeMessageFilter(MessageFilter* filter); - // Returns counts of updated messages . - QPair updateMessages(QList& messages, bool force_update); - public slots: virtual void updateCounts(bool including_total_count); diff --git a/src/librssguard/services/abstract/serviceroot.cpp b/src/librssguard/services/abstract/serviceroot.cpp index c26afc73d..46933a776 100644 --- a/src/librssguard/services/abstract/serviceroot.cpp +++ b/src/librssguard/services/abstract/serviceroot.cpp @@ -18,6 +18,8 @@ #include "services/abstract/recyclebin.h" #include "services/abstract/unreadnode.h" +#include + ServiceRoot::ServiceRoot(RootItem* parent) : RootItem(parent), m_recycleBin(new RecycleBin(this)), m_importantNode(new ImportantNode(this)), m_labelsNode(new LabelsNode(this)), m_unreadNode(new UnreadNode(this)), @@ -864,3 +866,58 @@ ServiceRoot::LabelOperation operator|(ServiceRoot::LabelOperation lhs, ServiceRo ServiceRoot::LabelOperation operator&(ServiceRoot::LabelOperation lhs, ServiceRoot::LabelOperation rhs) { return static_cast(static_cast(lhs) & static_cast(rhs)); } + +QPair ServiceRoot::updateMessages(QList& messages, Feed* feed, bool force_update) { + QPair updated_messages = { 0, 0 }; + + if (messages.isEmpty()) { + qDebugNN << "No messages to be updated/added in DB for feed" + << QUOTE_W_SPACE_DOT(feed->customId()); + return updated_messages; + } + + QList items_to_update; + bool is_main_thread = QThread::currentThread() == qApp->thread(); + + qDebugNN << LOGSEC_CORE + << "Updating messages in DB. Main thread:" + << QUOTE_W_SPACE_DOT(is_main_thread); + + bool ok = false; + QSqlDatabase database = is_main_thread ? + qApp->database()->driver()->connection(metaObject()->className()) : + qApp->database()->driver()->connection(QSL("feed_upd")); + + updated_messages = DatabaseQueries::updateMessages(database, messages, feed, force_update, &ok); + + if (updated_messages.first > 0 || updated_messages.second > 0) { + // Something was added or updated in the DB, update numbers. + feed->updateCounts(true); + + if (recycleBin() != nullptr) { + recycleBin()->updateCounts(true); + items_to_update.append(recycleBin()); + } + + if (importantNode() != nullptr) { + importantNode()->updateCounts(true); + items_to_update.append(importantNode()); + } + + if (unreadNode() != nullptr) { + unreadNode()->updateCounts(true); + items_to_update.append(unreadNode()); + } + + if (labelsNode() != nullptr) { + labelsNode()->updateCounts(true); + items_to_update.append(labelsNode()); + } + } + + // Some messages were really added to DB, reload feed in model. + items_to_update.append(feed); + getParentServiceRoot()->itemChanged(items_to_update); + + return updated_messages; +} diff --git a/src/librssguard/services/abstract/serviceroot.h b/src/librssguard/services/abstract/serviceroot.h index d57b0ac85..a20fb9f16 100644 --- a/src/librssguard/services/abstract/serviceroot.h +++ b/src/librssguard/services/abstract/serviceroot.h @@ -193,6 +193,9 @@ class ServiceRoot : public RootItem { // and from model. void completelyRemoveAllData(); + // Returns counts of updated messages . + QPair updateMessages(QList& messages, Feed* feed, bool force_update); + QIcon feedIconForMessage(const QString& feed_custom_id) const; // Removes all/read only messages from given underlying feeds.