diff --git a/src/libsync/propagateupload.cpp b/src/libsync/propagateupload.cpp index bb0f7181cc..82a2825297 100644 --- a/src/libsync/propagateupload.cpp +++ b/src/libsync/propagateupload.cpp @@ -91,6 +91,19 @@ void PUTFileJob::start() AbstractNetworkJob::start(); } +bool PUTFileJob::finished() +{ + _device->close(); + + qCInfo(lcPutJob) << "PUT of" << reply()->request().url().toString() << "FINISHED WITH STATUS" + << replyStatusString() + << reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute) + << reply()->attribute(QNetworkRequest::HttpReasonPhraseAttribute); + + emit finishedSignal(); + return true; +} + void PollJob::start() { setTimeout(120 * 1000); @@ -343,13 +356,17 @@ bool UploadDevice::open(QIODevice::OpenMode mode) if (mode & QIODevice::WriteOnly) return false; + // Get the file size now: _file.fileName() is no longer reliable + // on all platforms after openAndSeekFileSharedRead(). + auto fileDiskSize = FileSystem::getSize(_file.fileName()); + QString openError; if (!FileSystem::openAndSeekFileSharedRead(&_file, &openError, _start)) { setErrorString(openError); return false; } - _size = qBound(0ll, _size, FileSystem::getSize(_file.fileName()) - _start); + _size = qBound(0ll, _size, fileDiskSize - _start); _read = 0; return QIODevice::open(mode); diff --git a/src/libsync/propagateupload.h b/src/libsync/propagateupload.h index 5721cea6d6..afcbdf6f2c 100644 --- a/src/libsync/propagateupload.h +++ b/src/libsync/propagateupload.h @@ -121,16 +121,7 @@ public: virtual void start() Q_DECL_OVERRIDE; - virtual bool finished() Q_DECL_OVERRIDE - { - qCInfo(lcPutJob) << "PUT of" << reply()->request().url().toString() << "FINISHED WITH STATUS" - << replyStatusString() - << reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute) - << reply()->attribute(QNetworkRequest::HttpReasonPhraseAttribute); - - emit finishedSignal(); - return true; - } + virtual bool finished() Q_DECL_OVERRIDE; QIODevice *device() {