#ifndef BOARD_H #define BOARD_H #include #include #include #include #include #include #include class Action; class XmlRpcInterface; class Board : public QObject { Q_OBJECT public: explicit Board(const QString& boardUrl, QObject *parent = 0); ~Board(); static const QLatin1String CURRENT_DB_VERSION; bool busy() const; void enqueueAction(Action* action); QSqlDatabase database(); XmlRpcInterface *service(); // Configuration table QString getConfig(const QString& key) const; void setConfig(const QString& key, const QString &value); // Some helper functions QString removeHtml(QString text) const; QString removeBbcode(QString text) const; QString bbcodeToRichText(QString text) const; QString parseSmilies(QString text) const; QString renderHumanDate(const QDateTime& dateTime); QString renderHumanTime(const QDateTime& dateTime); // These functions wrap emitting the signals below void notifyConfigChanged(const QString& key = QString()); void notifyForumsChanged(); void notifyForumTopicsChanged(int forumId, int start, int end); void notifyTopicPostsChanged(int topicId, int start, int end); signals: void configChanged(const QString& key); void forumsChanged(); 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 getDbPathFor(const QString& slug); static QString getTempDbPathFor(const QString& slug); bool checkCompatibleDb(); bool initializeDb(); bool eraseDb(); bool cleanDb(); bool removeFromActionQueue(Action *action); void executeActionFromQueue(); void initializeBbCode(); void initializeSmilies(); 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; /** Configuration cache */ mutable QHash _config; QList< QPair > _bbcodes; QHash _smilies; QRegExp _smilieRegexp; }; inline bool Board::busy() const { return !_queue.empty(); } inline QSqlDatabase Board::database() { return _db; } inline XmlRpcInterface * Board::service() { return _iface; } #endif // BOARD_H