diff options
Diffstat (limited to 'boardmodel.cpp')
-rw-r--r-- | boardmodel.cpp | 52 |
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 } |