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("<b>%1</b>").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 @@
<string>Larss 0.1</string>
</property>
<widget class="QWidget" name="centralWidget">
- <layout class="QVBoxLayout" name="verticalLayout_2">
+ <layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QSplitter" name="splitter_2">
<property name="orientation">
@@ -36,33 +36,46 @@
<bool>false</bool>
</attribute>
</widget>
- <widget class="QFrame" name="frame">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="frameShape">
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
+ <widget class="QWidget" name="">
+ <layout class="QVBoxLayout" name="verticalLayout_2">
<item>
- <widget class="QWebView" name="webView">
- <property name="url">
- <url>
- <string>about:blank</string>
- </url>
+ <widget class="QLabel" name="webViewTitleLabel">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QFrame" name="frame">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Raised</enum>
</property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QWebView" name="webView">
+ <property name="url">
+ <url>
+ <string>about:blank</string>
+ </url>
+ </property>
+ </widget>
+ </item>
+ </layout>
</widget>
</item>
</layout>
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.