#ifndef FORUMMODEL_H #define FORUMMODEL_H #include #include #include class Board; class ForumModel : public QAbstractListModel { Q_OBJECT Q_PROPERTY(QString boardUrl READ boardUrl WRITE setBoardUrl NOTIFY boardUrlChanged) Q_PROPERTY(int forumId READ forumId WRITE setForumId NOTIFY forumIdChanged) public: ForumModel(QObject *parent = 0); enum DataRoles { TitleRole = Qt::DisplayRole, IconRole = Qt::DecorationRole, TopicIdRole = Qt::UserRole, TopicTypeRole }; QString boardUrl() const; void setBoardUrl(const QString& url); int forumId() const; void setForumId(const int id); int rowCount(const QModelIndex &parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role) const; bool canFetchMore(const QModelIndex &parent = QModelIndex()) const; void fetchMore(const QModelIndex &parent = QModelIndex()); signals: void boardUrlChanged(); void forumIdChanged(); protected: struct Topic { int topic_id; QString title; QDateTime last_reply_time; QDateTime last_update_time; }; private: static QDateTime parseDateTime(const QVariant& v); static QDateTime oldestPostUpdate(const QList& topics); QDateTime lastTopPostUpdate(); QList loadTopics(int start, int end); void clearModel(); private slots: void handleForumTopicsChanged(int forumId, int start, int end); void update(); void reload(); private: QString _boardUrl; Board *_board; int _forumId; QList _data; bool _eof; }; #endif // FORUMMODEL_H