aboutsummaryrefslogtreecommitdiff
path: root/src
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
parentbd196fa5d04bd133fc7fcf8f6dc7a7281d0f41a0 (diff)
downloadqxmpp-8fb5a45163c29e6ff4747f2ced28a54778904e4e.tar.gz
HttpUploadManager: Use unique_ptr for data device (#479)
Diffstat (limited to 'src')
-rw-r--r--src/client/QXmppHttpUploadManager.cpp13
-rw-r--r--src/client/QXmppHttpUploadManager.h2
2 files changed, 8 insertions, 7 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;
}
diff --git a/src/client/QXmppHttpUploadManager.h b/src/client/QXmppHttpUploadManager.h
index ff72e59d..5b0b0f68 100644
--- a/src/client/QXmppHttpUploadManager.h
+++ b/src/client/QXmppHttpUploadManager.h
@@ -58,7 +58,7 @@ public:
explicit QXmppHttpUploadManager(QNetworkAccessManager *netManager);
~QXmppHttpUploadManager();
- std::shared_ptr<QXmppHttpUpload> uploadFile(QIODevice *data, const QString &filename, const QMimeType &mimeType, qint64 fileSize = -1, const QString &uploadServiceJid = {});
+ std::shared_ptr<QXmppHttpUpload> uploadFile(std::unique_ptr<QIODevice> data, const QString &filename, const QMimeType &mimeType, qint64 fileSize = -1, const QString &uploadServiceJid = {});
std::shared_ptr<QXmppHttpUpload> uploadFile(const QFileInfo &fileInfo, const QString &filename = {}, const QString &uploadServiceJid = {});
private: