diff --git a/src/librssguard/gui/dialogs/formmain.cpp b/src/librssguard/gui/dialogs/formmain.cpp index a274e7c61..c39c6d859 100755 --- a/src/librssguard/gui/dialogs/formmain.cpp +++ b/src/librssguard/gui/dialogs/formmain.cpp @@ -165,6 +165,7 @@ QList FormMain::allActions() const { actions << m_ui->m_actionDeleteSelectedMessages; actions << m_ui->m_actionUpdateAllItems; actions << m_ui->m_actionUpdateSelectedItems; + actions << m_ui->m_actionUpdateSelectedItemsWithCustomTimers; actions << m_ui->m_actionStopRunningItemsUpdate; actions << m_ui->m_actionEditSelectedItem; actions << m_ui->m_actionCopyUrlSelectedFeed; @@ -421,6 +422,7 @@ void FormMain::updateFeedButtonsAvailability() { m_ui->m_actionMarkSelectedItemsAsRead->setEnabled(anything_selected); m_ui->m_actionMarkSelectedItemsAsUnread->setEnabled(anything_selected); m_ui->m_actionUpdateAllItems->setEnabled(!critical_action_running); + m_ui->m_actionUpdateSelectedItemsWithCustomTimers->setEnabled(!critical_action_running); m_ui->m_actionUpdateSelectedItems->setEnabled(!critical_action_running && (feed_selected || category_selected || service_selected)); m_ui->m_actionViewSelectedItemsNewspaperMode->setEnabled(anything_selected); m_ui->m_actionExpandCollapseItem->setEnabled(anything_selected); @@ -494,6 +496,7 @@ void FormMain::setupIcons() { m_ui->m_actionStopRunningItemsUpdate->setIcon(icon_theme_factory->fromTheme(QSL("process-stop"))); m_ui->m_actionUpdateAllItems->setIcon(icon_theme_factory->fromTheme(QSL("view-refresh"))); m_ui->m_actionUpdateSelectedItems->setIcon(icon_theme_factory->fromTheme(QSL("view-refresh"))); + m_ui->m_actionUpdateSelectedItemsWithCustomTimers->setIcon(icon_theme_factory->fromTheme(QSL("view-refresh"))); m_ui->m_actionClearSelectedItems->setIcon(icon_theme_factory->fromTheme(QSL("mail-mark-junk"))); m_ui->m_actionClearAllItems->setIcon(icon_theme_factory->fromTheme(QSL("mail-mark-junk"))); m_ui->m_actionDeleteSelectedItem->setIcon(icon_theme_factory->fromTheme(QSL("list-remove"))); @@ -719,6 +722,8 @@ void FormMain::createConnections() { &QAction::triggered, tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::updateSelectedItems); connect(m_ui->m_actionUpdateAllItems, &QAction::triggered, qApp->feedReader(), &FeedReader::updateAllFeeds); + connect(m_ui->m_actionUpdateSelectedItemsWithCustomTimers, + &QAction::triggered, qApp->feedReader(), &FeedReader::updateManuallyIntervaledFeeds); connect(m_ui->m_actionStopRunningItemsUpdate, &QAction::triggered, qApp->feedReader(), &FeedReader::stopRunningFeedUpdate); connect(m_ui->m_actionCopyUrlSelectedFeed, diff --git a/src/librssguard/gui/dialogs/formmain.ui b/src/librssguard/gui/dialogs/formmain.ui index abb4409d0..44dcb2281 100755 --- a/src/librssguard/gui/dialogs/formmain.ui +++ b/src/librssguard/gui/dialogs/formmain.ui @@ -107,6 +107,7 @@ + @@ -775,6 +776,11 @@ &Show tree branches + + + Update items with custom &timers + + diff --git a/src/librssguard/miscellaneous/feedreader.cpp b/src/librssguard/miscellaneous/feedreader.cpp index 6765207ce..df67510fd 100644 --- a/src/librssguard/miscellaneous/feedreader.cpp +++ b/src/librssguard/miscellaneous/feedreader.cpp @@ -201,6 +201,10 @@ void FeedReader::updateAllFeeds() { updateFeeds(m_feedsModel->rootItem()->getSubTreeFeeds()); } +void FeedReader::updateManuallyIntervaledFeeds() { + updateFeeds(m_feedsModel->rootItem()->getSubTreeManuallyIntervaledFeeds()); +} + void FeedReader::stopRunningFeedUpdate() { if (m_feedDownloader != nullptr) { m_feedDownloader->stopRunningUpdate(); diff --git a/src/librssguard/miscellaneous/feedreader.h b/src/librssguard/miscellaneous/feedreader.h index 13c41e4e4..a69af13a4 100644 --- a/src/librssguard/miscellaneous/feedreader.h +++ b/src/librssguard/miscellaneous/feedreader.h @@ -62,6 +62,7 @@ class RSSGUARD_DLLSPEC FeedReader : public QObject { public slots: void updateAllFeeds(); + void updateManuallyIntervaledFeeds(); void stopRunningFeedUpdate(); void quit(); diff --git a/src/librssguard/services/abstract/rootitem.cpp b/src/librssguard/services/abstract/rootitem.cpp index 6c6212414..850151e4f 100644 --- a/src/librssguard/services/abstract/rootitem.cpp +++ b/src/librssguard/services/abstract/rootitem.cpp @@ -356,6 +356,27 @@ QList RootItem::getSubTreeFeeds() const { return children; } +QList RootItem::getSubTreeManuallyIntervaledFeeds() const { + QList children; + QList traversable_items; + + traversable_items.append(const_cast(this)); + + // Iterate all nested items. + while (!traversable_items.isEmpty()) { + RootItem* active_item = traversable_items.takeFirst(); + + if (active_item->kind() == RootItem::Kind::Feed && + active_item->toFeed()->autoUpdateType() == Feed::AutoUpdateType::SpecificAutoUpdate) { + children.append(active_item->toFeed()); + } + + traversable_items.append(active_item->childItems()); + } + + return children; +} + ServiceRoot* RootItem::getParentServiceRoot() const { const RootItem* working_parent = this; diff --git a/src/librssguard/services/abstract/rootitem.h b/src/librssguard/services/abstract/rootitem.h index 4c022c02d..8046a69f3 100644 --- a/src/librssguard/services/abstract/rootitem.h +++ b/src/librssguard/services/abstract/rootitem.h @@ -161,6 +161,7 @@ class RSSGUARD_DLLSPEC RootItem : public QObject { // Returns list of feeds complemented by their own string CUSTOM ID. QHash getHashedSubTreeFeeds() const; QList getSubTreeFeeds() const; + QList getSubTreeManuallyIntervaledFeeds() const; // Returns the service root node which is direct or indirect parent of current item. ServiceRoot* getParentServiceRoot() const;