|
|
|
@ -19,6 +19,7 @@ |
|
|
|
|
|
|
|
|
|
#include <QtNetwork/QNetworkAccessManager> |
|
|
|
|
|
|
|
|
|
#include "MessageEvent.h" |
|
|
|
|
#include "Profile.h" |
|
|
|
|
#include "RoomMessages.h" |
|
|
|
|
#include "Sync.h" |
|
|
|
@ -29,145 +30,152 @@ |
|
|
|
|
*/ |
|
|
|
|
class MatrixClient : public QNetworkAccessManager |
|
|
|
|
{ |
|
|
|
|
Q_OBJECT |
|
|
|
|
Q_OBJECT |
|
|
|
|
public: |
|
|
|
|
MatrixClient(QString server, QObject *parent = 0); |
|
|
|
|
|
|
|
|
|
// Client API.
|
|
|
|
|
void initialSync() noexcept; |
|
|
|
|
void sync() noexcept; |
|
|
|
|
void sendTextMessage(const QString &roomid, const QString &msg) noexcept; |
|
|
|
|
void login(const QString &username, const QString &password) noexcept; |
|
|
|
|
void registerUser(const QString &username, const QString &password, const QString &server) noexcept; |
|
|
|
|
void versions() noexcept; |
|
|
|
|
void fetchRoomAvatar(const QString &roomid, const QUrl &avatar_url); |
|
|
|
|
void fetchUserAvatar(const QString &userId, const QUrl &avatarUrl); |
|
|
|
|
void fetchOwnAvatar(const QUrl &avatar_url); |
|
|
|
|
void downloadImage(const QString &event_id, const QUrl &url); |
|
|
|
|
void messages(const QString &room_id, const QString &from_token, int limit = 20) noexcept; |
|
|
|
|
|
|
|
|
|
inline QUrl getHomeServer(); |
|
|
|
|
inline int transactionId(); |
|
|
|
|
inline void incrementTransactionId(); |
|
|
|
|
|
|
|
|
|
void reset() noexcept; |
|
|
|
|
MatrixClient(QString server, QObject *parent = 0); |
|
|
|
|
|
|
|
|
|
// Client API.
|
|
|
|
|
void initialSync() noexcept; |
|
|
|
|
void sync() noexcept; |
|
|
|
|
void sendRoomMessage(matrix::events::MessageEventType ty, |
|
|
|
|
const QString &roomid, |
|
|
|
|
const QString &msg) noexcept; |
|
|
|
|
void login(const QString &username, const QString &password) noexcept; |
|
|
|
|
void registerUser(const QString &username, |
|
|
|
|
const QString &password, |
|
|
|
|
const QString &server) noexcept; |
|
|
|
|
void versions() noexcept; |
|
|
|
|
void fetchRoomAvatar(const QString &roomid, const QUrl &avatar_url); |
|
|
|
|
void fetchUserAvatar(const QString &userId, const QUrl &avatarUrl); |
|
|
|
|
void fetchOwnAvatar(const QUrl &avatar_url); |
|
|
|
|
void downloadImage(const QString &event_id, const QUrl &url); |
|
|
|
|
void messages(const QString &room_id, const QString &from_token, int limit = 20) noexcept; |
|
|
|
|
|
|
|
|
|
inline QUrl getHomeServer(); |
|
|
|
|
inline int transactionId(); |
|
|
|
|
inline void incrementTransactionId(); |
|
|
|
|
|
|
|
|
|
void reset() noexcept; |
|
|
|
|
|
|
|
|
|
public slots: |
|
|
|
|
void getOwnProfile() noexcept; |
|
|
|
|
void logout() noexcept; |
|
|
|
|
void getOwnProfile() noexcept; |
|
|
|
|
void logout() noexcept; |
|
|
|
|
|
|
|
|
|
inline void setServer(const QString &server); |
|
|
|
|
inline void setAccessToken(const QString &token); |
|
|
|
|
inline void setNextBatchToken(const QString &next_batch); |
|
|
|
|
inline void setServer(const QString &server); |
|
|
|
|
inline void setAccessToken(const QString &token); |
|
|
|
|
inline void setNextBatchToken(const QString &next_batch); |
|
|
|
|
|
|
|
|
|
signals: |
|
|
|
|
void loginError(const QString &error); |
|
|
|
|
void registerError(const QString &error); |
|
|
|
|
void versionError(const QString &error); |
|
|
|
|
|
|
|
|
|
void loggedOut(); |
|
|
|
|
|
|
|
|
|
void loginSuccess(const QString &userid, const QString &homeserver, const QString &token); |
|
|
|
|
void registerSuccess(const QString &userid, const QString &homeserver, const QString &token); |
|
|
|
|
void versionSuccess(); |
|
|
|
|
|
|
|
|
|
void roomAvatarRetrieved(const QString &roomid, const QPixmap &img); |
|
|
|
|
void userAvatarRetrieved(const QString &userId, const QImage &img); |
|
|
|
|
void ownAvatarRetrieved(const QPixmap &img); |
|
|
|
|
void imageDownloaded(const QString &event_id, const QPixmap &img); |
|
|
|
|
|
|
|
|
|
// Returned profile data for the user's account.
|
|
|
|
|
void getOwnProfileResponse(const QUrl &avatar_url, const QString &display_name); |
|
|
|
|
void initialSyncCompleted(const SyncResponse &response); |
|
|
|
|
void syncCompleted(const SyncResponse &response); |
|
|
|
|
void syncFailed(const QString &msg); |
|
|
|
|
void messageSent(const QString &event_id, const QString &roomid, const int txn_id); |
|
|
|
|
void messagesRetrieved(const QString &room_id, const RoomMessages &msgs); |
|
|
|
|
void loginError(const QString &error); |
|
|
|
|
void registerError(const QString &error); |
|
|
|
|
void versionError(const QString &error); |
|
|
|
|
|
|
|
|
|
void loggedOut(); |
|
|
|
|
|
|
|
|
|
void loginSuccess(const QString &userid, const QString &homeserver, const QString &token); |
|
|
|
|
void registerSuccess(const QString &userid, |
|
|
|
|
const QString &homeserver, |
|
|
|
|
const QString &token); |
|
|
|
|
void versionSuccess(); |
|
|
|
|
|
|
|
|
|
void roomAvatarRetrieved(const QString &roomid, const QPixmap &img); |
|
|
|
|
void userAvatarRetrieved(const QString &userId, const QImage &img); |
|
|
|
|
void ownAvatarRetrieved(const QPixmap &img); |
|
|
|
|
void imageDownloaded(const QString &event_id, const QPixmap &img); |
|
|
|
|
|
|
|
|
|
// Returned profile data for the user's account.
|
|
|
|
|
void getOwnProfileResponse(const QUrl &avatar_url, const QString &display_name); |
|
|
|
|
void initialSyncCompleted(const SyncResponse &response); |
|
|
|
|
void syncCompleted(const SyncResponse &response); |
|
|
|
|
void syncFailed(const QString &msg); |
|
|
|
|
void messageSent(const QString &event_id, const QString &roomid, const int txn_id); |
|
|
|
|
void emoteSent(const QString &event_id, const QString &roomid, const int txn_id); |
|
|
|
|
void messagesRetrieved(const QString &room_id, const RoomMessages &msgs); |
|
|
|
|
|
|
|
|
|
private slots: |
|
|
|
|
void onResponse(QNetworkReply *reply); |
|
|
|
|
void onResponse(QNetworkReply *reply); |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
|
enum class Endpoint { |
|
|
|
|
GetOwnAvatar, |
|
|
|
|
GetOwnProfile, |
|
|
|
|
GetProfile, |
|
|
|
|
Image, |
|
|
|
|
InitialSync, |
|
|
|
|
Login, |
|
|
|
|
Logout, |
|
|
|
|
Messages, |
|
|
|
|
Register, |
|
|
|
|
RoomAvatar, |
|
|
|
|
UserAvatar, |
|
|
|
|
SendTextMessage, |
|
|
|
|
Sync, |
|
|
|
|
Versions, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// Response handlers.
|
|
|
|
|
void onLoginResponse(QNetworkReply *reply); |
|
|
|
|
void onLogoutResponse(QNetworkReply *reply); |
|
|
|
|
void onRegisterResponse(QNetworkReply *reply); |
|
|
|
|
void onVersionsResponse(QNetworkReply *reply); |
|
|
|
|
void onGetOwnProfileResponse(QNetworkReply *reply); |
|
|
|
|
void onGetOwnAvatarResponse(QNetworkReply *reply); |
|
|
|
|
void onSendTextMessageResponse(QNetworkReply *reply); |
|
|
|
|
void onInitialSyncResponse(QNetworkReply *reply); |
|
|
|
|
void onSyncResponse(QNetworkReply *reply); |
|
|
|
|
void onRoomAvatarResponse(QNetworkReply *reply); |
|
|
|
|
void onUserAvatarResponse(QNetworkReply *reply); |
|
|
|
|
void onImageResponse(QNetworkReply *reply); |
|
|
|
|
void onMessagesResponse(QNetworkReply *reply); |
|
|
|
|
|
|
|
|
|
// Client API prefix.
|
|
|
|
|
QString api_url_; |
|
|
|
|
|
|
|
|
|
// The Matrix server used for communication.
|
|
|
|
|
QUrl server_; |
|
|
|
|
|
|
|
|
|
// The access token used for authentication.
|
|
|
|
|
QString token_; |
|
|
|
|
|
|
|
|
|
// Increasing transaction ID.
|
|
|
|
|
int txn_id_; |
|
|
|
|
|
|
|
|
|
// Token to be used for the next sync.
|
|
|
|
|
QString next_batch_; |
|
|
|
|
enum class Endpoint { |
|
|
|
|
GetOwnAvatar, |
|
|
|
|
GetOwnProfile, |
|
|
|
|
GetProfile, |
|
|
|
|
Image, |
|
|
|
|
InitialSync, |
|
|
|
|
Login, |
|
|
|
|
Logout, |
|
|
|
|
Messages, |
|
|
|
|
Register, |
|
|
|
|
RoomAvatar, |
|
|
|
|
SendRoomMessage, |
|
|
|
|
Sync, |
|
|
|
|
UserAvatar, |
|
|
|
|
Versions, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// Response handlers.
|
|
|
|
|
void onGetOwnAvatarResponse(QNetworkReply *reply); |
|
|
|
|
void onGetOwnProfileResponse(QNetworkReply *reply); |
|
|
|
|
void onImageResponse(QNetworkReply *reply); |
|
|
|
|
void onInitialSyncResponse(QNetworkReply *reply); |
|
|
|
|
void onLoginResponse(QNetworkReply *reply); |
|
|
|
|
void onLogoutResponse(QNetworkReply *reply); |
|
|
|
|
void onMessagesResponse(QNetworkReply *reply); |
|
|
|
|
void onRegisterResponse(QNetworkReply *reply); |
|
|
|
|
void onRoomAvatarResponse(QNetworkReply *reply); |
|
|
|
|
void onSendRoomMessage(QNetworkReply *reply); |
|
|
|
|
void onSyncResponse(QNetworkReply *reply); |
|
|
|
|
void onUserAvatarResponse(QNetworkReply *reply); |
|
|
|
|
void onVersionsResponse(QNetworkReply *reply); |
|
|
|
|
|
|
|
|
|
// Client API prefix.
|
|
|
|
|
QString api_url_; |
|
|
|
|
|
|
|
|
|
// The Matrix server used for communication.
|
|
|
|
|
QUrl server_; |
|
|
|
|
|
|
|
|
|
// The access token used for authentication.
|
|
|
|
|
QString token_; |
|
|
|
|
|
|
|
|
|
// Increasing transaction ID.
|
|
|
|
|
int txn_id_; |
|
|
|
|
|
|
|
|
|
// Token to be used for the next sync.
|
|
|
|
|
QString next_batch_; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
inline QUrl |
|
|
|
|
MatrixClient::getHomeServer() |
|
|
|
|
{ |
|
|
|
|
return server_; |
|
|
|
|
return server_; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline int |
|
|
|
|
MatrixClient::transactionId() |
|
|
|
|
{ |
|
|
|
|
return txn_id_; |
|
|
|
|
return txn_id_; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline void |
|
|
|
|
MatrixClient::setServer(const QString &server) |
|
|
|
|
{ |
|
|
|
|
server_ = QUrl(QString("https://%1").arg(server)); |
|
|
|
|
server_ = QUrl(QString("https://%1").arg(server)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline void |
|
|
|
|
MatrixClient::setAccessToken(const QString &token) |
|
|
|
|
{ |
|
|
|
|
token_ = token; |
|
|
|
|
token_ = token; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline void |
|
|
|
|
MatrixClient::setNextBatchToken(const QString &next_batch) |
|
|
|
|
{ |
|
|
|
|
next_batch_ = next_batch; |
|
|
|
|
next_batch_ = next_batch; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline void |
|
|
|
|
MatrixClient::incrementTransactionId() |
|
|
|
|
{ |
|
|
|
|
txn_id_ += 1; |
|
|
|
|
txn_id_ += 1; |
|
|
|
|
} |
|
|
|
|