diff --git a/src/rss/rss_imp.cpp b/src/rss/rss_imp.cpp index 10c8d22df..caf6ae128 100644 --- a/src/rss/rss_imp.cpp +++ b/src/rss/rss_imp.cpp @@ -320,7 +320,7 @@ void RSSImp::saveFoldersOpenState() { } // refresh all streams by a button -void RSSImp::on_updateAllButton_clicked() { +void RSSImp::refreshAllFeeds() { foreach (QTreeWidgetItem *item, m_feedList->getAllFeedItems()) { item->setData(0,Qt::DecorationRole, QVariant(QIcon(":/Icons/loading.png"))); } @@ -402,23 +402,20 @@ void RSSImp::refreshSelectedItems() { RssFilePtr file = m_feedList->getRSSItem(item); // Update icons if (item == m_feedList->stickyUnreadItem()) { - foreach (QTreeWidgetItem *feed, m_feedList->getAllFeedItems()) { - feed->setData(0, Qt::DecorationRole, QVariant(QIcon(":/Icons/loading.png"))); - } - file->refresh(); - break; + refreshAllFeeds(); + return; } else { + if (!file->refresh()) + continue; + // Update UI if (qSharedPointerDynamicCast(file)) { item->setData(0, Qt::DecorationRole, QVariant(QIcon(":/Icons/loading.png"))); } else if (qSharedPointerDynamicCast(file)) { // Update feeds in the folder - foreach (QTreeWidgetItem *feed, m_feedList->getAllFeedItems(item)) { + foreach (QTreeWidgetItem *feed, m_feedList->getAllFeedItems(item)) feed->setData(0, Qt::DecorationRole, QVariant(QIcon(":/Icons/loading.png"))); - } } } - // Actually refresh - file->refresh(); } } @@ -688,7 +685,8 @@ RSSImp::RSSImp(QWidget *parent) : QWidget(parent), m_rssManager(new RssManager) connect(actionUpdate, SIGNAL(triggered()), this, SLOT(refreshSelectedItems())); connect(actionNew_folder, SIGNAL(triggered()), this, SLOT(askNewFolder())); connect(actionNew_subscription, SIGNAL(triggered()), this, SLOT(on_newFeedButton_clicked())); - connect(actionUpdate_all_feeds, SIGNAL(triggered()), this, SLOT(on_updateAllButton_clicked())); + connect(actionUpdate_all_feeds, SIGNAL(triggered()), this, SLOT(refreshAllFeeds())); + connect(updateAllButton, SIGNAL(clicked()), SLOT(refreshAllFeeds())); connect(actionCopy_feed_URL, SIGNAL(triggered()), this, SLOT(copySelectedFeedsURL())); connect(actionMark_items_read, SIGNAL(triggered()), this, SLOT(on_markReadButton_clicked())); // News list actions @@ -731,5 +729,5 @@ void RSSImp::on_rssDownloaderBtn_clicked() AutomatedRssDownloader dlg(m_rssManager, this); dlg.exec(); if (dlg.isRssDownloaderEnabled()) - on_updateAllButton_clicked(); + refreshAllFeeds(); } diff --git a/src/rss/rss_imp.h b/src/rss/rss_imp.h index 1cf08b26c..bbd3440c9 100644 --- a/src/rss/rss_imp.h +++ b/src/rss/rss_imp.h @@ -57,7 +57,7 @@ public slots: private slots: void on_newFeedButton_clicked(); - void on_updateAllButton_clicked(); + void refreshAllFeeds(); void on_markReadButton_clicked(); void displayRSSListMenu(const QPoint&); void displayItemsListMenu(const QPoint&); diff --git a/src/rss/rssfeed.cpp b/src/rss/rssfeed.cpp index 823402127..fe5c355bc 100644 --- a/src/rss/rssfeed.cpp +++ b/src/rss/rssfeed.cpp @@ -127,14 +127,15 @@ void RssFeed::addArticle(const RssArticlePtr& article) } } -void RssFeed::refresh() { +bool RssFeed::refresh() { if (m_loading) { qWarning() << Q_FUNC_INFO << "Feed" << this->displayName() << "is already being refreshed, ignoring request"; - return; + return false; } m_loading = true; // Download the RSS again m_manager->rssDownloader()->downloadUrl(m_url); + return true; } void RssFeed::removeAllSettings() { diff --git a/src/rss/rssfeed.h b/src/rss/rssfeed.h index 5c430e202..70acbe0c2 100644 --- a/src/rss/rssfeed.h +++ b/src/rss/rssfeed.h @@ -55,7 +55,7 @@ public: virtual ~RssFeed(); virtual RssFolder* parent() const { return m_parent; } virtual void setParent(RssFolder* parent) { m_parent = parent; } - void refresh(); + bool refresh(); virtual QString id() const { return m_url; } virtual void removeAllSettings(); virtual void saveItemsToDisk(); diff --git a/src/rss/rssfile.h b/src/rss/rssfile.h index 4b9590c3c..bfa8a343e 100644 --- a/src/rss/rssfile.h +++ b/src/rss/rssfile.h @@ -58,7 +58,7 @@ public: virtual void markAsRead() = 0; virtual RssFolder* parent() const = 0; virtual void setParent(RssFolder* parent) = 0; - virtual void refresh() = 0; + virtual bool refresh() = 0; virtual RssArticleList articleListByDateDesc() const = 0; virtual RssArticleList unreadArticleListByDateDesc() const = 0; virtual void removeAllSettings() = 0; diff --git a/src/rss/rssfolder.cpp b/src/rss/rssfolder.cpp index afb625127..e2cd3babe 100644 --- a/src/rss/rssfolder.cpp +++ b/src/rss/rssfolder.cpp @@ -83,12 +83,15 @@ RssFeedPtr RssFolder::addStream(RssManager* manager, const QString &url) { } // Refresh All Children -void RssFolder::refresh() { +bool RssFolder::refresh() { RssFileHash::ConstIterator it = m_children.begin(); RssFileHash::ConstIterator itend = m_children.end(); + bool refreshed = false; for ( ; it != itend; ++it) { - it.value()->refresh(); + if (it.value()->refresh()) + refreshed = true; } + return refreshed; } RssArticleList RssFolder::articleListByDateDesc() const { diff --git a/src/rss/rssfolder.h b/src/rss/rssfolder.h index fad154fd3..702b0e416 100644 --- a/src/rss/rssfolder.h +++ b/src/rss/rssfolder.h @@ -71,7 +71,7 @@ public: RssFilePtr takeChild(const QString &childId); public slots: - virtual void refresh(); + virtual bool refresh(); void addFile(const RssFilePtr& item); void removeChild(const QString &childId); virtual void rename(const QString &new_name);