summaryrefslogtreecommitdiff
path: root/board.h
diff options
context:
space:
mode:
Diffstat (limited to 'board.h')
-rw-r--r--board.h41
1 files changed, 37 insertions, 4 deletions
diff --git a/board.h b/board.h
index deb1dfb..588219c 100644
--- a/board.h
+++ b/board.h
@@ -3,10 +3,11 @@
#include <QtCore/QDateTime>
#include <QtCore/QHash>
-#include <QtCore/QObject>
#include <QtCore/QPair>
#include <QtCore/QRegExp>
#include <QtCore/QQueue>
+#include <QtCore/QUrl>
+#include <QtCore/QVariant>
#include <QtSql/QSqlDatabase>
class Action;
@@ -15,22 +16,36 @@ class XmlRpcInterface;
class Board : public QObject
{
Q_OBJECT
+ Q_PROPERTY(bool busy READ busy NOTIFY busyChanged)
+ Q_PROPERTY(bool loggedIn READ loggedIn NOTIFY loggedInChanged)
+ Q_PROPERTY(int rootForumId READ rootForumId CONSTANT)
+
public:
- explicit Board(const QString& boardUrl, QObject *parent = 0);
+ explicit Board(QObject *parent = 0);
+ Board(const QUrl& url, const QString& username, const QString& password, QObject *parent = 0);
~Board();
static const QLatin1String CURRENT_DB_VERSION;
bool busy() const;
+
void enqueueAction(Action* action);
QSqlDatabase database();
XmlRpcInterface *service();
+ int rootForumId() const;
+
// Configuration table
QString getConfig(const QString& key) const;
void setConfig(const QString& key, const QString &value);
+ // Login/logout stuff
+ QVariant getLoginInfo(const QString& key) const;
+ bool loggedIn() const;
+ void login(const QString& username, const QString& password);
+ void logout();
+
// Some helper functions
QString removeHtml(QString text) const;
QString removeBbcode(QString text) const;
@@ -40,20 +55,27 @@ public:
QString renderHumanDate(const QDateTime& dateTime);
QString renderHumanTime(const QDateTime& dateTime);
+public slots:
+ void cancelAllActions();
+
// 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);
+ void notifyLogin(const QMap<QString, QVariant>& info);
+ void notifyLogout();
signals:
+ void busyChanged();
+ void loggedInChanged();
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 createSlug(const QUrl& url);
static QString getDbPathFor(const QString& slug);
static QString getTempDbPathFor(const QString& slug);
bool checkCompatibleDb();
@@ -72,13 +94,14 @@ private slots:
void handleActionError(Action *action, const QString& message);
private:
- QString _url;
+ QUrl _url;
QString _slug;
QSqlDatabase _db;
XmlRpcInterface *_iface;
QQueue<Action*> _queue;
/** Configuration cache */
mutable QHash<QString, QString> _config;
+ QMap<QString, QVariant> _loginInfo;
QList< QPair<QRegExp, QString> > _bbcodes;
QHash<QString, QString> _smilies;
QRegExp _smilieRegexp;
@@ -89,6 +112,16 @@ inline bool Board::busy() const
return !_queue.empty();
}
+inline bool Board::loggedIn() const
+{
+ return !_loginInfo.empty();
+}
+
+inline int Board::rootForumId() const
+{
+ return 0;
+}
+
inline QSqlDatabase Board::database()
{
return _db;