From 9081af31e81b909034b09eee4d317ad8fd82193d Mon Sep 17 00:00:00 2001 From: Leonardo Robol Date: Tue, 25 Oct 2011 12:56:44 +0200 Subject: [PATCH] Feed updating every 10 minutes. --- include/feedpoller.h | 3 +++ include/mainwindow.h | 3 +++ larss/feedpoller.cpp | 30 +++++++++++++++++++++++++++++- larss/mainwindow.cpp | 8 ++++++++ 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/include/feedpoller.h b/include/feedpoller.h index 1072dab..1e0340d 100644 --- a/include/feedpoller.h +++ b/include/feedpoller.h @@ -19,10 +19,13 @@ namespace Larss { void stopPolling (); signals: + void startLoadingFeed (QString name); + void finishedLoadingFeed (QString name); public slots: void networkManagerReplyFinished(QNetworkReply* reply); bool poll(); + void queueAll (); private: /** diff --git a/include/mainwindow.h b/include/mainwindow.h index dc628ec..b3430e2 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -34,6 +34,9 @@ private slots: void on_actionAdd_Category_triggered(); + public slots: + void loadingFeedStart (QString feedName); + private: Ui::MainWindow *ui; void do_exit(); diff --git a/larss/feedpoller.cpp b/larss/feedpoller.cpp index 011f576..796fdf8 100644 --- a/larss/feedpoller.cpp +++ b/larss/feedpoller.cpp @@ -35,6 +35,13 @@ FeedPoller::run() this, SLOT(poll())); timer->start(); + QTimer* updaterTimer = new QTimer(); + updaterTimer->setInterval(10 * 60 * 1000); + updaterTimer->connect(updaterTimer, SIGNAL(timeout()), + this, SLOT(queueAll())); + + queueAll(); + QThread::exec(); } @@ -51,6 +58,7 @@ FeedPoller::poll() QModelIndex next_item = workQueue->takeFirst(); FeedNode *node = model->itemFromIndex(next_item); nowLoading = node->id(); + startLoadingFeed(node->name()); manager->get(QNetworkRequest(QUrl(model->getUrl(next_item)))); return true; } @@ -78,6 +86,24 @@ FeedPoller::queueWork(const QModelIndex &index) } void +FeedPoller::queueAll() +{ + QStandardItem *rootItem = model->invisibleRootItem(); + for(qint32 i = 0; i < rootItem->rowCount(); i++) + { + // Get the category + FeedNode *categoryNode = model->itemFromIndex(rootItem->child(i, 0)->index()); + + // Get all the feed in that category + for(qint32 j = 0; j < categoryNode->rowCount(); j++) + { + QModelIndex feedIndex = categoryNode->child(j, 0)->index (); + queueWork(feedIndex); + } + } +} + +void FeedPoller::networkManagerReplyFinished(QNetworkReply *reply) { // Assume that the string is UTF-8 encoded. This is likely to be @@ -135,7 +161,6 @@ FeedPoller::networkManagerReplyFinished(QNetworkReply *reply) } else { - qDebug() << "Rss 1.0"; guid = link; pubDate = QDateTime::currentDateTime().toTime_t(); } @@ -170,6 +195,8 @@ FeedPoller::networkManagerReplyFinished(QNetworkReply *reply) qDebug () << "Error parsing the document"; nowLoading = 0; + finishedLoadingFeed(""); + return; // Check if there is work in the queue @@ -178,6 +205,7 @@ FeedPoller::networkManagerReplyFinished(QNetworkReply *reply) QModelIndex next_item = workQueue->takeFirst(); FeedNode *node = (FeedNode*) next_item.internalPointer(); nowLoading = node->id(); + startLoadingFeed(node->name()); manager->get(QNetworkRequest(QUrl(model->getUrl(next_item)))); } } diff --git a/larss/mainwindow.cpp b/larss/mainwindow.cpp index b09ce0d..a294759 100644 --- a/larss/mainwindow.cpp +++ b/larss/mainwindow.cpp @@ -46,6 +46,8 @@ MainWindow::MainWindow(QWidget *parent) : rssParser->setFilter("1 = 0"); poller = new FeedPoller (this, rssParser, feedModel); + poller->connect(poller, SIGNAL(startLoadingFeed(QString)), this, + SLOT(loadingFeedStart(QString))); poller->start(); } @@ -55,6 +57,12 @@ MainWindow::~MainWindow() delete ui; } +void +MainWindow::loadingFeedStart(QString feedName) +{ + ui->statusBar->showMessage(tr("Updating feed '%1'...").arg(feedName), 2000); +} + void MainWindow::do_exit() { poller->stopPolling(); -- 2.1.4