#ifndef BOARD_H #define BOARD_H #include #include #include class Action; class XmlRpcInterface; class Board : public QObject { Q_OBJECT public: explicit Board(const QString& boardUrl, QObject *parent = 0); ~Board(); bool busy() const; void enqueueAction(Action* action); QSqlDatabase database(); XmlRpcInterface *service(); QString getConfig(const QString& key) const; void setConfig(const QString& key, const QString &value); int rootForumId() const; void notifyConfigChanged(); void notifyForumsChanged(); void notifyForumTopicsChanged(int forumId, int start, int end); void notifyTopicPostsChanged(int topicId, int start, int end); signals: void configChanged(); void forumsChanged(); void imageChanged(const QString& imageUrl); void forumTopicsChanged(int forumId, int start, int end); void topicPostsChanged(int topicId, int start, int end); private: static QString createSlug(const QString& forumUrl); static QString getDbDir(); static QString getDbPathFor(const QString& slug); bool initializeDb(); bool eraseDb(); bool cleanDb(); bool removeFromActionQueue(Action *action); void executeActionFromQueue(); void fetchConfigIfOutdated(); void fetchForumsIfOutdated(); private slots: void handleActionFinished(Action *action); void handleActionError(Action *action, const QString& message); private: QString _url; QString _slug; QSqlDatabase _db; XmlRpcInterface *_iface; QQueue _queue; }; inline bool Board::busy() const { return !_queue.empty(); } inline QSqlDatabase Board::database() { return _db; } inline XmlRpcInterface * Board::service() { return _iface; } #endif // BOARD_H