From d3bd0c9761526852a7b7eea5a5be8ee2f15e656a Mon Sep 17 00:00:00 2001 From: Leonardo Robol Date: Tue, 25 Oct 2011 08:41:40 +0200 Subject: [PATCH] Lot of fixes to make things work again. --- include/editfeeddialog.h | 4 ++-- include/feedmodel.h | 2 +- larss/editfeeddialog.cpp | 9 ++++++--- larss/feedmodel.cpp | 45 ++++++++++++++++++++++++++++++++++++++++----- larss/feedpoller.cpp | 3 +-- larss/mainwindow.cpp | 2 +- 6 files changed, 51 insertions(+), 14 deletions(-) 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()); } } -- 2.1.4