aboutsummaryrefslogtreecommitdiff
path: root/src/client/QXmppHttpUploadManager.cpp
diff options
context:
space:
mode:
authorJonah BrĂ¼chert <jbb@kaidan.im>2022-09-29 19:24:57 +0200
committerGitHub <noreply@github.com>2022-09-29 19:24:57 +0200
commit8fb5a45163c29e6ff4747f2ced28a54778904e4e (patch)
treef793b8f1e34e6e95cf5beb45a2013b63df2907f9 /src/client/QXmppHttpUploadManager.cpp
parentbd196fa5d04bd133fc7fcf8f6dc7a7281d0f41a0 (diff)
HttpUploadManager: Use unique_ptr for data device (#479)
Diffstat (limited to 'src/client/QXmppHttpUploadManager.cpp')
-rw-r--r--src/client/QXmppHttpUploadManager.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/client/QXmppHttpUploadManager.cpp b/src/client/QXmppHttpUploadManager.cpp
index 728956e5..f6261773 100644
--- a/src/client/QXmppHttpUploadManager.cpp
+++ b/src/client/QXmppHttpUploadManager.cpp
@@ -273,7 +273,7 @@ QXmppHttpUploadManager::~QXmppHttpUploadManager() = default;
/// });
/// \endcode
///
-std::shared_ptr<QXmppHttpUpload> QXmppHttpUploadManager::uploadFile(QIODevice *data, const QString &filename, const QMimeType &mimeType, qint64 fileSize, const QString &uploadServiceJid)
+std::shared_ptr<QXmppHttpUpload> QXmppHttpUploadManager::uploadFile(std::unique_ptr<QIODevice> data, const QString &filename, const QMimeType &mimeType, qint64 fileSize, const QString &uploadServiceJid)
{
using SlotResult = QXmppUploadRequestManager::SlotResult;
@@ -304,7 +304,7 @@ std::shared_ptr<QXmppHttpUpload> QXmppHttpUploadManager::uploadFile(QIODevice *d
}
auto future = client()->findExtension<QXmppUploadRequestManager>()->requestSlot(filename, fileSize, mimeType, uploadServiceJid);
- await(future, this, [this, upload, data](SlotResult result) {
+ await(future, this, [this, upload, data = std::move(data)](SlotResult result) mutable {
// first check whether upload was cancelled in the meantime
if (upload->d->cancelled) {
upload->d->reportFinished();
@@ -331,7 +331,10 @@ std::shared_ptr<QXmppHttpUpload> QXmppHttpUploadManager::uploadFile(QIODevice *d
for (auto itr = headers.cbegin(); itr != headers.cend(); ++itr) {
request.setRawHeader(itr.key().toUtf8(), itr.value().toUtf8());
}
- auto *reply = d->netManager->put(request, data);
+
+ auto *rawSourceDevice = data.release();
+ auto *reply = d->netManager->put(request, rawSourceDevice);
+ rawSourceDevice->setParent(reply);
upload->d->reply = reply;
connect(reply, &QNetworkReply::finished, this, [reply, upload]() {
@@ -400,12 +403,10 @@ std::shared_ptr<QXmppHttpUpload> QXmppHttpUploadManager::uploadFile(const QFileI
}
auto upload = uploadFile(
- file.get(),
+ std::move(file),
filename.isEmpty() ? fileInfo.fileName() : filename,
QMimeDatabase().mimeTypeForFile(fileInfo),
-1,
uploadServiceJid);
- // from now on lifetime is bound to the upload
- file.release()->setParent(upload.get());
return upload;
}