diff --git a/include/editfeeddialog.h b/include/editfeeddialog.h
index fd95659..e76191c 100644
--- a/include/editfeeddialog.h
+++ b/include/editfeeddialog.h
@@ -29,9 +29,9 @@ namespace Larss {
QString getFeedUrl();
/**
- * @brief Return the ID of the selected category.
+ * @brief Return the FeedNode of the selected category.
*/
- quint64 getCategoryId();
+ FeedNode* getCategory();
private:
Ui::EditFeedDialog *ui;
diff --git a/include/feedmodel.h b/include/feedmodel.h
index 2c4334d..a7a2859 100644
--- a/include/feedmodel.h
+++ b/include/feedmodel.h
@@ -45,7 +45,7 @@ public:
/**
* @brief Add a new feed in the specified category.
*/
- bool addFeed (QString name, QString url, quint32 category_id);
+ bool addFeed (QString name, QString url, FeedNode* categoryNode);
/**
* @brief Select data from the database.
diff --git a/larss/editfeeddialog.cpp b/larss/editfeeddialog.cpp
index db426f7..1f1d5ba 100644
--- a/larss/editfeeddialog.cpp
+++ b/larss/editfeeddialog.cpp
@@ -32,8 +32,11 @@ EditFeedDialog::getFeedUrl()
return ui->newFeedUrl->text();
}
-quint64
-EditFeedDialog::getCategoryId()
+FeedNode*
+EditFeedDialog::getCategory()
{
- return ui->categoryComboBox->currentIndex() + 1;
+ QModelIndex root = feedModel->indexFromItem(feedModel->invisibleRootItem());
+ QModelIndex selectedCategory = feedModel->index (ui->categoryComboBox->currentIndex(),
+ 0, root);
+ return feedModel->itemFromIndex(selectedCategory);
}
diff --git a/larss/feedmodel.cpp b/larss/feedmodel.cpp
index 81048dd..944d2b8 100644
--- a/larss/feedmodel.cpp
+++ b/larss/feedmodel.cpp
@@ -80,34 +80,69 @@ FeedModel::select()
bool
FeedModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
- return QStandardItemModel::setData(index, value, role);
+ // Get the involved node
+ FeedNode *node = itemFromIndex(index);
+
+ // First we need to update the data in the database.
+ QSqlQuery query(db);
+ if (node->type() == FeedNode::Category)
+ {
+ query.prepare("UPDATE categories SET name=:value WHERE id=:id;");
+ query.bindValue("value", value);
+ query.bindValue("id", node->id());
+ }
+ else
+ {
+ query.prepare("UPDATE feeds SET name=:value WHERE id=:id;");
+ query.bindValue("value", value);
+ query.bindValue("id", node->id());
+ }
+
+ // Check if the query has gone well
+ if (query.exec())
+ return QStandardItemModel::setData(index, value, role);
+ else
+ {
+ qDebug() << query.executedQuery() << query.lastError();
+ return false;
+ }
}
bool
FeedModel::addCategory(QString name)
{
+ // First push the data in the database.
QSqlQuery query(db);
query.prepare("INSERT INTO categories VALUES (NULL, :name);");
query.bindValue("name", name);
+ // If the insertion works then update the QStandardItemModel
bool successful = query.exec();
if (successful)
- reset();
+ {
+ FeedNode *node = new FeedNode (query.lastInsertId().toInt(), name);
+ QStandardItem *root = invisibleRootItem();
+ root->appendRow(node);
+ }
return successful;
}
bool
-FeedModel::addFeed(QString name, QString url, quint32 category_id)
+FeedModel::addFeed(QString name, QString url, FeedNode* categoryNode)
{
QSqlQuery query(db);
query.prepare("INSERT INTO feeds VALUES (NULL, :category, :name, :url);");
- query.bindValue("category", category_id);
+ query.bindValue("category", categoryNode->id());
query.bindValue("name", name);
query.bindValue("url", url);
bool successful = query.exec();
if (successful)
- reset();
+ {
+ FeedNode *node = new FeedNode (query.lastInsertId().toInt(),
+ name, url);
+ categoryNode->appendRow(node);
+ }
else
{
qDebug() << "Query failed: " << query.executedQuery() << query.lastError();
diff --git a/larss/feedpoller.cpp b/larss/feedpoller.cpp
index b6f56f1..92f808f 100644
--- a/larss/feedpoller.cpp
+++ b/larss/feedpoller.cpp
@@ -49,7 +49,7 @@ FeedPoller::poll()
else
{
QModelIndex next_item = workQueue->takeFirst();
- FeedNode *node = (FeedNode*) next_item.internalPointer();
+ FeedNode *node = model->itemFromIndex(next_item);
nowLoading = node->id();
manager->get(QNetworkRequest(QUrl(model->getUrl(next_item))));
return true;
@@ -69,7 +69,6 @@ FeedPoller::stopPolling ()
void
FeedPoller::queueWork(const QModelIndex &index)
{
- qDebug() << index;
if (!index.isValid())
return;
FeedNode *node = model->itemFromIndex(index);
diff --git a/larss/mainwindow.cpp b/larss/mainwindow.cpp
index 579993c..671c9d6 100644
--- a/larss/mainwindow.cpp
+++ b/larss/mainwindow.cpp
@@ -116,7 +116,7 @@ void Larss::MainWindow::on_actionAdd_Feed_triggered()
if (dialog.exec() == QDialog::Accepted)
{
feedModel->addFeed(dialog.getFeedName(),
- dialog.getFeedUrl(), dialog.getCategoryId());
+ dialog.getFeedUrl(), dialog.getCategory());
}
}