From 4f33bd650ef68acf20fcb5320a357689f4e2f20d Mon Sep 17 00:00:00 2001 From: Leonardo Robol Date: Mon, 24 Oct 2011 15:25:15 +0200 Subject: [PATCH] Added possibility to add new feeds, but not new categories (on the way). --- Larss.pro | 9 ++-- include/editfeeddialog.h | 43 ++++++++++++++++++ include/mainwindow.h | 2 + larss/editfeeddialog.cpp | 39 +++++++++++++++++ larss/feedmodel.cpp | 5 +++ larss/feedpoller.cpp | 4 +- larss/mainwindow.cpp | 13 +++++- ui/editfeeddialog.ui | 112 +++++++++++++++++++++++++++++++++++++++++++++++ ui/mainwindow.ui | 7 +++ 9 files changed, 229 insertions(+), 5 deletions(-) create mode 100644 include/editfeeddialog.h create mode 100644 larss/editfeeddialog.cpp create mode 100644 ui/editfeeddialog.ui diff --git a/Larss.pro b/Larss.pro index 483e055..dd58d63 100644 --- a/Larss.pro +++ b/Larss.pro @@ -14,13 +14,16 @@ SOURCES += larss/main.cpp\ larss/mainwindow.cpp \ larss/feedmodel.cpp \ larss/rssparser.cpp \ - larss/feedpoller.cpp + larss/feedpoller.cpp \ + larss/editfeeddialog.cpp HEADERS += include/mainwindow.h \ include/feedmodel.h \ include/rssparser.h \ - include/feedpoller.h + include/feedpoller.h \ + include/editfeeddialog.h -FORMS += ui/mainwindow.ui +FORMS += ui/mainwindow.ui \ + ui/editfeeddialog.ui INCLUDEPATH += ./include diff --git a/include/editfeeddialog.h b/include/editfeeddialog.h new file mode 100644 index 0000000..fd95659 --- /dev/null +++ b/include/editfeeddialog.h @@ -0,0 +1,43 @@ +#ifndef EDITFEEDDIALOG_H +#define EDITFEEDDIALOG_H + +#include +#include "feedmodel.h" + +namespace Ui { + class EditFeedDialog; +} + +namespace Larss { + + class EditFeedDialog : public QDialog + { + Q_OBJECT + + public: + explicit EditFeedDialog(QWidget *parent, FeedModel *feedModel); + ~EditFeedDialog(); + + /** + * @brief Get the name of the New feed. + */ + QString getFeedName(); + + /** + * @brief Get the URL selected by the user. + */ + QString getFeedUrl(); + + /** + * @brief Return the ID of the selected category. + */ + quint64 getCategoryId(); + + private: + Ui::EditFeedDialog *ui; + FeedModel *feedModel; + }; + +} + +#endif // EDITFEEDDIALOG_H diff --git a/include/mainwindow.h b/include/mainwindow.h index 6c71c04..e326cc0 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -30,6 +30,8 @@ private slots: void on_newsTableView_activated(const QModelIndex &index); + void on_actionAdd_Feed_triggered(); + private: Ui::MainWindow *ui; void do_exit(); diff --git a/larss/editfeeddialog.cpp b/larss/editfeeddialog.cpp new file mode 100644 index 0000000..db426f7 --- /dev/null +++ b/larss/editfeeddialog.cpp @@ -0,0 +1,39 @@ +#include "editfeeddialog.h" +#include "ui_editfeeddialog.h" +#include "feedmodel.h" + +using namespace Larss; + +EditFeedDialog::EditFeedDialog(QWidget *parent, FeedModel *feedModel) : + QDialog(parent), + ui(new Ui::EditFeedDialog) +{ + this->feedModel = feedModel; + ui->setupUi(this); + + // Load model in the ComboBox + ui->categoryComboBox->setModel(feedModel); +} + +EditFeedDialog::~EditFeedDialog() +{ + delete ui; +} + +QString +EditFeedDialog::getFeedName() +{ + return ui->newFeedName->text(); +} + +QString +EditFeedDialog::getFeedUrl() +{ + return ui->newFeedUrl->text(); +} + +quint64 +EditFeedDialog::getCategoryId() +{ + return ui->categoryComboBox->currentIndex() + 1; +} diff --git a/larss/feedmodel.cpp b/larss/feedmodel.cpp index 7382f1e..104e010 100644 --- a/larss/feedmodel.cpp +++ b/larss/feedmodel.cpp @@ -191,6 +191,11 @@ FeedModel::addFeed(QString name, QString url, quint32 category_id) bool successful = query.exec(); if (successful) reset(); + else + { + qDebug() << "Query failed: " << query.executedQuery() << query.lastError(); + } + return successful; } diff --git a/larss/feedpoller.cpp b/larss/feedpoller.cpp index 592d934..d25ff93 100644 --- a/larss/feedpoller.cpp +++ b/larss/feedpoller.cpp @@ -111,7 +111,9 @@ 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(); + QString content = description; + if (element.elementsByTagName("content:encoded").length() > 0) + content = element.elementsByTagName("content:encoded").item(0).firstChild().nodeValue(); // Check if this is RSS2 or not uint pubDate; diff --git a/larss/mainwindow.cpp b/larss/mainwindow.cpp index 3c9bf8d..f15ea34 100644 --- a/larss/mainwindow.cpp +++ b/larss/mainwindow.cpp @@ -1,5 +1,6 @@ #include "mainwindow.h" #include "ui_mainwindow.h" +#include "editfeeddialog.h" #include #include @@ -19,7 +20,6 @@ MainWindow::MainWindow(QWidget *parent) : // Load feedModel that will wrap the SQLite database feedModel = new FeedModel(db, this); ui->feedTreeView->setModel(feedModel); - ui->feedTreeView->setEditTriggers(QTreeView::DoubleClicked); // Load the RSSParser, hiding the unnecessary columns rssParser = new RssParser(db, feedModel, this); @@ -102,3 +102,14 @@ void Larss::MainWindow::on_newsTableView_activated(const QModelIndex &index) { on_newsTableView_clicked(index); } + +void Larss::MainWindow::on_actionAdd_Feed_triggered() +{ + Larss::EditFeedDialog dialog(this, feedModel); + if (dialog.exec() == QDialog::Accepted) + { + qDebug() << "Adding new feed"; + feedModel->addFeed(dialog.getFeedName(), + dialog.getFeedUrl(), dialog.getCategoryId()); + } +} diff --git a/ui/editfeeddialog.ui b/ui/editfeeddialog.ui new file mode 100644 index 0000000..387abc2 --- /dev/null +++ b/ui/editfeeddialog.ui @@ -0,0 +1,112 @@ + + + EditFeedDialog + + + + 0 + 0 + 317 + 187 + + + + Dialog + + + + + + + + Insert the URL of the RSS feed. + + + false + + + + + + + + + Name + + + + + + + + + + URL + + + + + + + + + + Category + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + + buttonBox + accepted() + EditFeedDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + EditFeedDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui index 83d5de3..7247ffb 100644 --- a/ui/mainwindow.ui +++ b/ui/mainwindow.ui @@ -98,6 +98,8 @@ File + + @@ -108,6 +110,11 @@ Exit + + + Add Feed + + -- 2.1.4