summary refs log tree commit diff
path: root/src/MatrixClient.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/MatrixClient.cc')
-rw-r--r--src/MatrixClient.cc44
1 files changed, 24 insertions, 20 deletions
diff --git a/src/MatrixClient.cc b/src/MatrixClient.cc

index 72467385..67203d59 100644 --- a/src/MatrixClient.cc +++ b/src/MatrixClient.cc
@@ -821,14 +821,16 @@ MatrixClient::messages(const QString &roomid, const QString &from_token, int lim } void -MatrixClient::uploadImage(const QString &roomid, const QString &filename) +MatrixClient::uploadImage(const QString &roomid, + const QSharedPointer<QIODevice> data, + const QString &filename) { - auto reply = makeUploadRequest(filename); + auto reply = makeUploadRequest(data); if (reply == nullptr) return; - connect(reply, &QNetworkReply::finished, this, [this, reply, roomid, filename]() { + connect(reply, &QNetworkReply::finished, this, [this, reply, roomid, data, filename]() { reply->deleteLater(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -838,12 +840,12 @@ MatrixClient::uploadImage(const QString &roomid, const QString &filename) return; } - auto data = reply->readAll(); + auto res_data = reply->readAll(); - if (data.isEmpty()) + if (res_data.isEmpty()) return; - auto json = QJsonDocument::fromJson(data); + auto json = QJsonDocument::fromJson(res_data); if (!json.isObject()) { qDebug() << "Media upload: Response is not a json object."; @@ -857,16 +859,18 @@ MatrixClient::uploadImage(const QString &roomid, const QString &filename) return; } - emit imageUploaded(roomid, filename, object.value("content_uri").toString()); + emit imageUploaded(roomid, data, filename, object.value("content_uri").toString()); }); } void -MatrixClient::uploadFile(const QString &roomid, const QString &filename) +MatrixClient::uploadFile(const QString &roomid, + const QSharedPointer<QIODevice> data, + const QString &filename) { - auto reply = makeUploadRequest(filename); + auto reply = makeUploadRequest(data); - connect(reply, &QNetworkReply::finished, this, [this, reply, roomid, filename]() { + connect(reply, &QNetworkReply::finished, this, [this, reply, roomid, data, filename]() { reply->deleteLater(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -900,11 +904,13 @@ MatrixClient::uploadFile(const QString &roomid, const QString &filename) } void -MatrixClient::uploadAudio(const QString &roomid, const QString &filename) +MatrixClient::uploadAudio(const QString &roomid, + const QSharedPointer<QIODevice> data, + const QString &filename) { - auto reply = makeUploadRequest(filename); + auto reply = makeUploadRequest(data); - connect(reply, &QNetworkReply::finished, this, [this, reply, roomid, filename]() { + connect(reply, &QNetworkReply::finished, this, [this, reply, roomid, data, filename]() { reply->deleteLater(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -1158,7 +1164,7 @@ MatrixClient::readEvent(const QString &room_id, const QString &event_id) } QNetworkReply * -MatrixClient::makeUploadRequest(const QString &filename) +MatrixClient::makeUploadRequest(QSharedPointer<QIODevice> iodev) { QUrlQuery query; query.addQueryItem("access_token", token_); @@ -1167,20 +1173,18 @@ MatrixClient::makeUploadRequest(const QString &filename) endpoint.setPath(mediaApiUrl_ + "/upload"); endpoint.setQuery(query); - QFile file(filename); - if (!file.open(QIODevice::ReadWrite)) { - qDebug() << "Error while reading" << filename; + if (!iodev->open(QIODevice::ReadOnly)) { + qWarning() << "Error while reading device:" << iodev->errorString(); return nullptr; } QMimeDatabase db; - QMimeType mime = db.mimeTypeForFile(filename, QMimeDatabase::MatchContent); + QMimeType mime = db.mimeTypeForData(iodev.data()); QNetworkRequest request(QString(endpoint.toEncoded())); - request.setHeader(QNetworkRequest::ContentLengthHeader, file.size()); request.setHeader(QNetworkRequest::ContentTypeHeader, mime.name()); - auto reply = post(request, file.readAll()); + auto reply = post(request, iodev.data()); return reply; }