summary refs log tree commit diff
path: root/src/MatrixClient.cc
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2017-04-11 17:45:47 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2017-04-11 17:45:47 +0300
commit6468faa39eda494d83310bec4a557d29bf037f8a (patch)
treec4a2632730c99500871fbc3a8f5d746585507089 /src/MatrixClient.cc
parentMake the timer single shot (diff)
downloadnheko-6468faa39eda494d83310bec4a557d29bf037f8a.tar.xz
Use only a MatrixClient as a shared pointer
Diffstat (limited to 'src/MatrixClient.cc')
-rw-r--r--src/MatrixClient.cc91
1 files changed, 90 insertions, 1 deletions
diff --git a/src/MatrixClient.cc b/src/MatrixClient.cc

index fb7857c9..7b45646c 100644 --- a/src/MatrixClient.cc +++ b/src/MatrixClient.cc
@@ -20,6 +20,7 @@ #include <QJsonObject> #include <QNetworkReply> #include <QNetworkRequest> +#include <QPixmap> #include <QSettings> #include <QUrl> #include <QUrlQuery> @@ -39,7 +40,6 @@ MatrixClient::MatrixClient(QString server, QObject *parent) QSettings settings; txn_id_ = settings.value("client/transaction_id", 1).toInt(); - // FIXME: Other QNetworkAccessManagers use the finish handler. connect(this, SIGNAL(finished(QNetworkReply *)), this, SLOT(onResponse(QNetworkReply *))); } @@ -263,6 +263,52 @@ void MatrixClient::onSendTextMessageResponse(QNetworkReply *reply) incrementTransactionId(); } +void MatrixClient::onRoomAvatarResponse(QNetworkReply *reply) +{ + reply->deleteLater(); + + int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + + if (status == 0 || status >= 400) { + qWarning() << reply->errorString(); + return; + } + + auto img = reply->readAll(); + + if (img.size() == 0) + return; + + auto roomid = reply->property("roomid").toString(); + + QPixmap pixmap; + pixmap.loadFromData(img); + + emit roomAvatarRetrieved(roomid, pixmap); +} + +void MatrixClient::onGetOwnAvatarResponse(QNetworkReply *reply) +{ + reply->deleteLater(); + + int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + + if (status == 0 || status >= 400) { + qWarning() << reply->errorString(); + return; + } + + auto img = reply->readAll(); + + if (img.size() == 0) + return; + + QPixmap pixmap; + pixmap.loadFromData(img); + + emit ownAvatarRetrieved(pixmap); +} + void MatrixClient::onResponse(QNetworkReply *reply) { switch (reply->property("endpoint").toInt()) { @@ -290,6 +336,12 @@ void MatrixClient::onResponse(QNetworkReply *reply) case Endpoint::SendTextMessage: onSendTextMessageResponse(reply); break; + case Endpoint::RoomAvatar: + onRoomAvatarResponse(reply); + break; + case Endpoint::GetOwnAvatar: + onGetOwnAvatarResponse(reply); + break; default: break; } @@ -448,3 +500,40 @@ void MatrixClient::getOwnProfile() noexcept QNetworkReply *reply = get(request); reply->setProperty("endpoint", Endpoint::GetOwnProfile); } + +void MatrixClient::fetchRoomAvatar(const QString &roomid, const QUrl &avatar_url) +{ + QList<QString> url_parts = avatar_url.toString().split("mxc://"); + + if (url_parts.size() != 2) { + qDebug() << "Invalid format for room avatar " << avatar_url.toString(); + return; + } + + QString media_params = url_parts[1]; + QString media_url = QString("%1/_matrix/media/r0/download/%2").arg(getHomeServer(), media_params); + + QNetworkRequest avatar_request(media_url); + + QNetworkReply *reply = get(avatar_request); + reply->setProperty("roomid", roomid); + reply->setProperty("endpoint", Endpoint::RoomAvatar); +} + +void MatrixClient::fetchOwnAvatar(const QUrl &avatar_url) +{ + QList<QString> url_parts = avatar_url.toString().split("mxc://"); + + if (url_parts.size() != 2) { + qDebug() << "Invalid format for media " << avatar_url.toString(); + return; + } + + QString media_params = url_parts[1]; + QString media_url = QString("%1/_matrix/media/r0/download/%2").arg(getHomeServer(), media_params); + + QNetworkRequest avatar_request(media_url); + + QNetworkReply *reply = get(avatar_request); + reply->setProperty("endpoint", Endpoint::GetOwnAvatar); +}