From b75a479b26326b9fb95d9ef6ec8f04feeb56c7b9 Mon Sep 17 00:00:00 2001 From: Leonardo Robol Date: Mon, 24 Oct 2011 07:16:40 +0200 Subject: [PATCH] A title on the webView. --- feedpoller.cpp | 15 ++++++++++---- main.cpp | 2 -- mainwindow.cpp | 24 +++++++++++++++++----- mainwindow.h | 2 ++ mainwindow.ui | 65 +++++++++++++++++++++++++++++++++++----------------------- rssparser.cpp | 24 ++++++++++++++++------ rssparser.h | 9 ++++++-- 7 files changed, 96 insertions(+), 45 deletions(-) diff --git a/feedpoller.cpp b/feedpoller.cpp index 3d7b696..11a6834 100644 --- a/feedpoller.cpp +++ b/feedpoller.cpp @@ -29,7 +29,7 @@ FeedPoller::run() // Create the timer that will call the function every second. QTimer *timer = new QTimer (); - timer->setInterval(800); + timer->setInterval(1000); timer->connect(timer, SIGNAL(timeout()), this, SLOT(poll())); timer->start(); @@ -87,12 +87,14 @@ FeedPoller::networkManagerReplyFinished(QNetworkReply *reply) query.bindValue("feed", nowLoading - FEEDMODEL_MAX_CATEGORIES); if (!query.exec ()) return; + QStringList links; - query.first(); - do + if (query.first()) { links.append(query.value(0).toString()); - } while (query.next()); + while (query.next()) + links.append(query.value(0).toString()); + } QDomElement doc_el = doc.documentElement(); QDomNodeList items = doc_el.elementsByTagName("item"); @@ -107,6 +109,7 @@ FeedPoller::networkManagerReplyFinished(QNetworkReply *reply) QString link = element.elementsByTagName("link").item(0).firstChild().nodeValue(); QString title = element.elementsByTagName("title").item(0).firstChild().nodeValue(); QString description = element.elementsByTagName("description").item(0).firstChild().nodeValue(); + QString content = element.elementsByTagName("content:encoded").item(0).firstChild().nodeValue(); // We should enable this for RSS 2.0 // QString guid = element.elementsByTagName("guid").item(0).firstChild().nodeValue(); @@ -121,12 +124,16 @@ FeedPoller::networkManagerReplyFinished(QNetworkReply *reply) record.setValue("title", title); record.setValue("link", link); record.setValue("description", description); + record.setValue("content", content); record.setValue("feed", nowLoading - FEEDMODEL_MAX_CATEGORIES); if (!parser->insertRecord(-1, record)) qDebug () << "Error inserting record"; } } + + if (!parser->submitAll()) + qDebug() << "Error submitting new data"; } else qDebug () << "Error parsing the document"; diff --git a/main.cpp b/main.cpp index 778716d..1eea1f3 100644 --- a/main.cpp +++ b/main.cpp @@ -5,8 +5,6 @@ int main(int argc, char *argv[]) { QApplication lars_application(argc, argv); Larss::MainWindow main_window; - main_window.show(); - return lars_application.exec(); } diff --git a/mainwindow.cpp b/mainwindow.cpp index a512f6d..e3da0d8 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -28,13 +28,18 @@ MainWindow::MainWindow(QWidget *parent) : ui->newsTableView->setColumnHidden(1, true); // Feed ID ui->newsTableView->setColumnHidden(3, true); // Link ui->newsTableView->setColumnHidden(4, true); // Description - ui->newsTableView->setColumnHidden(5, true); // Time - ui->newsTableView->setColumnHidden(6, true); // Read state + ui->newsTableView->setColumnHidden(5, true); // Content + ui->newsTableView->setColumnHidden(6, true); // Time + ui->newsTableView->setColumnHidden(7, true); // Read state ui->newsTableView->setEditTriggers(QTableView::NoEditTriggers); ui->newsTableView->verticalHeader()->setHidden(true); + ui->newsTableView->horizontalHeader()->setHidden(true); ui->newsTableView->horizontalHeader()->setStretchLastSection(false); ui->newsTableView->horizontalHeader()->setResizeMode(2, QHeaderView::Stretch); + // Show only unread elements + rssParser->setFilter("read=0"); + poller = new FeedPoller (this, rssParser, feedModel); poller->start(); } @@ -68,6 +73,9 @@ void Larss::MainWindow::on_feedTreeView_clicked(const QModelIndex &index) if ((feed_id = rssParser->getFeed (index))) { rssParser->selectActiveFeed(feed_id); + + // Reset the title + ui->webViewTitleLabel->setText(""); } } @@ -79,11 +87,17 @@ void Larss::MainWindow::on_newsTableView_clicked(const QModelIndex &index) quint32 row_number = index.row(); // A row got activated, so open it in the webview. - QString link = rssParser->getLink(index); - // ui->webView->load(link); - ui->webView->setHtml(rssParser->getDescription(index)); + ui->webView->setHtml(rssParser->getContent(index)); + + // Select the right title + ui->webViewTitleLabel->setText(QString("%1").arg(rssParser->getTitle (index))); // And then mark it as read rssParser->setReadStatus(index, true); ui->newsTableView->selectRow(row_number); } + +void Larss::MainWindow::on_newsTableView_activated(const QModelIndex &index) +{ + on_newsTableView_clicked(index); +} diff --git a/mainwindow.h b/mainwindow.h index 11d1003..6c71c04 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -28,6 +28,8 @@ private slots: void on_newsTableView_clicked(const QModelIndex &index); + void on_newsTableView_activated(const QModelIndex &index); + private: Ui::MainWindow *ui; void do_exit(); diff --git a/mainwindow.ui b/mainwindow.ui index dbf773b..f297349 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -14,7 +14,7 @@ Larss 0.1 - + @@ -36,33 +36,46 @@ false - - - - 0 - 0 - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - 0 - - - 0 - + + - - - - about:blank - + + + + + + + + + + + 0 + 0 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + 0 + + + 0 + + + + + + about:blank + + + + + diff --git a/rssparser.cpp b/rssparser.cpp index 3322a0c..03e1ac1 100644 --- a/rssparser.cpp +++ b/rssparser.cpp @@ -16,7 +16,7 @@ Larss::RssParser::RssParser(QSqlDatabase db, FeedModel *model, QObject *parent) { qDebug () << "Creating table news that is not in database..."; QSqlQuery query(db); - query.prepare("CREATE TABLE news (id INTEGER PRIMARY KEY, feed INTEGER, title TEXT, link TEXT, description TEXT, time INTEGER, read INTEGER);"); + query.prepare("CREATE TABLE news (id INTEGER PRIMARY KEY, feed INTEGER, title TEXT, link TEXT, description TEXT, content TEXT, time INTEGER, read INTEGER);"); if (!query.exec()) qDebug () << "Error occurred while creating the database:" << query.lastError(); } @@ -25,7 +25,7 @@ Larss::RssParser::RssParser(QSqlDatabase db, FeedModel *model, QObject *parent) setTable("news"); // Select manual submit so user cannot modify content directly - setEditStrategy(QSqlTableModel::OnRowChange); + setEditStrategy(QSqlTableModel::OnManualSubmit); this->model = model; select(); } @@ -55,9 +55,12 @@ Larss::RssParser::headerData(int section, Qt::Orientation orientation, int role) return tr("Description"); break; case 5: - return tr("Time"); + return tr("Content"); break; case 6: + return tr("Time"); + break; + case 7: return tr("Read"); } } @@ -98,8 +101,10 @@ Larss::RssParser::getLink(const QModelIndex &index) void Larss::RssParser::setReadStatus(const QModelIndex& index, bool read) { - QModelIndex read_index = createIndex(index.row(), 6, index.internalPointer()); + QModelIndex read_index = createIndex(index.row(), 7, index.internalPointer()); setData(read_index, read ? 1 : 0); + if (!submitAll()) + qDebug() << "Error while setting the read flag"; } quint64 @@ -113,12 +118,19 @@ Larss::RssParser::getFeed(const QModelIndex &index) } QString -Larss::RssParser::getDescription(const QModelIndex &index) +Larss::RssParser::getContent(const QModelIndex &index) { - QModelIndex description_index = createIndex(index.row(), 4, index.internalPointer()); + QModelIndex description_index = createIndex(index.row(), 5, index.internalPointer()); return data(description_index, Qt::DisplayRole).toString(); } +QString +Larss::RssParser::getTitle(const QModelIndex &index) +{ + QModelIndex title_index = createIndex(index.row(), 2, index.internalPointer()); + return data(title_index, Qt::DisplayRole).toString(); +} + void Larss::RssParser::selectActiveFeed(quint64 feed_id) { diff --git a/rssparser.h b/rssparser.h index bd9b772..1070b43 100644 --- a/rssparser.h +++ b/rssparser.h @@ -42,9 +42,14 @@ namespace Larss { quint64 getFeed (const QModelIndex& index); /** - * @brief Get the description associated with the feed. + * @brief Get the content associated with the feed. */ - QString getDescription (const QModelIndex& index); + QString getContent (const QModelIndex& index); + + /** + * @brief Get the title of a news pointed by index + */ + QString getTitle (const QModelIndex& index); /** * @brief Set the read status on a news. -- 2.1.4