summaryrefslogtreecommitdiff
path: root/boardmodel.cpp
diff options
context:
space:
mode:
authorJavier S. Pedro <maemo@javispedro.com>2013-04-04 00:00:38 +0200
committerJavier S. Pedro <maemo@javispedro.com>2013-04-04 00:00:38 +0200
commit5d8d6fed3fd7dd796a5a3093a7dbd46fab8d380a (patch)
tree56d1aa55260d0081cfd99b52c53f5ddc78cba200 /boardmodel.cpp
parenta6d8b23fd03993c0b94d21806ac3a36e251c8b9c (diff)
downloadtapasboard-5d8d6fed3fd7dd796a5a3093a7dbd46fab8d380a.tar.gz
tapasboard-5d8d6fed3fd7dd796a5a3093a7dbd46fab8d380a.zip
pass Board objects instead of boardUrls around QML
Diffstat (limited to 'boardmodel.cpp')
-rw-r--r--boardmodel.cpp52
1 files changed, 31 insertions, 21 deletions
diff --git a/boardmodel.cpp b/boardmodel.cpp
index c2421f7..c8d8bd3 100644
--- a/boardmodel.cpp
+++ b/boardmodel.cpp
@@ -3,11 +3,11 @@
#include "global.h"
#include "board.h"
+#include "fetchforumsaction.h"
#include "boardmodel.h"
BoardModel::BoardModel(QObject *parent) :
- QAbstractListModel(parent),
- _rootForumId(0)
+ QAbstractListModel(parent), _board(0), _forumId(-1)
{
QHash<int, QByteArray> roles = roleNames();
roles[NameRole] = QByteArray("title");
@@ -19,32 +19,35 @@ BoardModel::BoardModel(QObject *parent) :
setRoleNames(roles);
}
-QString BoardModel::boardUrl() const
+Board * BoardModel::board() const
{
- return _boardUrl;
+ return _board;
}
-void BoardModel::setBoardUrl(const QString &url)
+void BoardModel::setBoard(Board *board)
{
- if (_boardUrl != url) {
+ if (_board != board) {
disconnect(this, SLOT(reload()));
- _boardUrl = url;
+ _board = board;
+ if (_board) {
+ connect(board, SIGNAL(forumsChanged()), SLOT(reload()));
+ }
reload();
- emit boardUrlChanged();
+ emit boardChanged();
}
}
-int BoardModel::rootForumId() const
+int BoardModel::forumId() const
{
- return _rootForumId;
+ return _forumId;
}
-void BoardModel::setRootForumId(const int id)
+void BoardModel::setForumId(const int id)
{
- if (_rootForumId != id) {
- _rootForumId = id;
+ if (_forumId != id) {
+ _forumId = id;
reload();
- emit rootForumIdChanged();
+ emit forumIdChanged();
}
}
@@ -56,6 +59,7 @@ int BoardModel::rowCount(const QModelIndex &parent) const
QVariant BoardModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid()) return QVariant();
+ if (!_board) return QVariant();
if (!_query.seek(index.row())) {
qWarning() << "Could not seek to" << index.row();
return QVariant();
@@ -113,6 +117,13 @@ void BoardModel::fetchMore(const QModelIndex &parent)
}
}
+void BoardModel::refresh()
+{
+ if (_board) {
+ _board->enqueueAction(new FetchForumsAction(_board));
+ }
+}
+
void BoardModel::reload()
{
beginResetModel();
@@ -120,22 +131,21 @@ void BoardModel::reload()
_records = 0;
_query.clear();
- if (!_boardUrl.isEmpty()) {
- Board *board = board_manager->getBoard(_boardUrl);
- connect(board, SIGNAL(forumsChanged()), SLOT(reload()));
- _query = QSqlQuery(board->database());
+ if (_board && _forumId >= 0) {
+ qDebug() << "Reloading" << _board << _forumId;
+ _query = QSqlQuery(_board->database());
_query.prepare("SELECT f1.forum_id,f1.forum_name,f1.logo_url,f1.description,f1.sub_only,f2.forum_name AS cat_name FROM forums f1 "
"LEFT JOIN forums f2 ON f2.forum_id = f1.parent_id "
"WHERE (f1.parent_id=:parent_id_1 AND f1.sub_only = 0) OR f1.parent_id IN "
"(SELECT forum_id from forums WHERE parent_id=:parent_id_2 AND sub_only=1) "
"ORDER by f1.sort_index ASC;");
- _query.bindValue(0, _rootForumId);
- _query.bindValue(1, _rootForumId);
+ _query.bindValue(0, _forumId);
+ _query.bindValue(1, _forumId);
if (!_query.exec()) {
qWarning() << "Coult not select forums: " << _query.lastError().text();
}
}
endResetModel();
- fetchMore();
+ fetchMore(); // So that at least a few rows are sent
}