diff options
author | Kitsune Ral <Kitsune-Ral@users.sf.net> | 2018-03-31 13:16:02 +0900 |
---|---|---|
committer | Kitsune Ral <Kitsune-Ral@users.sf.net> | 2018-03-31 14:23:55 +0900 |
commit | efeb50a46ad824aa258472f6ac8da74810f05a55 (patch) | |
tree | a89c6f35d56986c60e73f870530c9d6ee0527e6d /jobs/downloadfilejob.cpp | |
parent | 29093379b707bfe620234c2968b37aa86666542a (diff) | |
download | libquotient-efeb50a46ad824aa258472f6ac8da74810f05a55.tar.gz libquotient-efeb50a46ad824aa258472f6ac8da74810f05a55.zip |
Move source files to a separate folder
It's been long overdue to separate them from the rest of the stuff (docs etc.). Also, this allows installing to a directory within the checked out git tree (say, ./install/, similar to ./build/).
Diffstat (limited to 'jobs/downloadfilejob.cpp')
-rw-r--r-- | jobs/downloadfilejob.cpp | 120 |
1 files changed, 0 insertions, 120 deletions
diff --git a/jobs/downloadfilejob.cpp b/jobs/downloadfilejob.cpp deleted file mode 100644 index 6a3d8483..00000000 --- a/jobs/downloadfilejob.cpp +++ /dev/null @@ -1,120 +0,0 @@ -#include "downloadfilejob.h" - -#include <QtNetwork/QNetworkReply> -#include <QtCore/QFile> -#include <QtCore/QTemporaryFile> - -using namespace QMatrixClient; - -class DownloadFileJob::Private -{ - public: - Private() : tempFile(new QTemporaryFile()) { } - - explicit Private(const QString& localFilename) - : targetFile(new QFile(localFilename)) - , tempFile(new QFile(targetFile->fileName() + ".qmcdownload")) - { } - - QScopedPointer<QFile> targetFile; - QScopedPointer<QFile> tempFile; -}; - -QUrl DownloadFileJob::makeRequestUrl(QUrl baseUrl, const QUrl& mxcUri) -{ - return makeRequestUrl(baseUrl, mxcUri.authority(), mxcUri.path().mid(1)); -} - -DownloadFileJob::DownloadFileJob(const QString& serverName, - const QString& mediaId, - const QString& localFilename) - : GetContentJob(serverName, mediaId) - , d(localFilename.isEmpty() ? new Private : new Private(localFilename)) -{ - setObjectName("DownloadFileJob"); -} - -QString DownloadFileJob::targetFileName() const -{ - return (d->targetFile ? d->targetFile : d->tempFile)->fileName(); -} - -void DownloadFileJob::beforeStart(const ConnectionData*) -{ - if (d->targetFile && !d->targetFile->isReadable() && - !d->targetFile->open(QIODevice::WriteOnly)) - { - qCWarning(JOBS) << "Couldn't open the file" - << d->targetFile->fileName() << "for writing"; - setStatus(FileError, "Could not open the target file for writing"); - return; - } - if (!d->tempFile->isReadable() && !d->tempFile->open(QIODevice::WriteOnly)) - { - qCWarning(JOBS) << "Couldn't open the temporary file" - << d->tempFile->fileName() << "for writing"; - setStatus(FileError, "Could not open the temporary download file"); - return; - } - qCDebug(JOBS) << "Downloading to" << d->tempFile->fileName(); -} - -void DownloadFileJob::afterStart(const ConnectionData*, QNetworkReply* reply) -{ - connect(reply, &QNetworkReply::metaDataChanged, this, [this,reply] { - auto sizeHeader = reply->header(QNetworkRequest::ContentLengthHeader); - if (sizeHeader.isValid()) - { - auto targetSize = sizeHeader.value<qint64>(); - if (targetSize != -1) - if (!d->tempFile->resize(targetSize)) - { - qCWarning(JOBS) << "Failed to allocate" << targetSize - << "bytes for" << d->tempFile->fileName(); - setStatus(FileError, - "Could not reserve disk space for download"); - } - } - }); - connect(reply, &QIODevice::readyRead, this, [this,reply] { - auto bytes = reply->read(reply->bytesAvailable()); - if (bytes.isEmpty()) - { - qCWarning(JOBS) - << "Unexpected empty chunk when downloading from" - << reply->url() << "to" << d->tempFile->fileName(); - } else { - d->tempFile->write(bytes); - } - }); -} - -void DownloadFileJob::beforeAbandon(QNetworkReply*) -{ - if (d->targetFile) - d->targetFile->remove(); - d->tempFile->remove(); -} - -BaseJob::Status DownloadFileJob::parseReply(QNetworkReply*) -{ - if (d->targetFile) - { - d->targetFile->close(); - if (!d->targetFile->remove()) - { - qCWarning(JOBS) << "Failed to remove the target file placeholder"; - return { FileError, "Couldn't finalise the download" }; - } - if (!d->tempFile->rename(d->targetFile->fileName())) - { - qCWarning(JOBS) << "Failed to rename" << d->tempFile->fileName() - << "to" << d->targetFile->fileName(); - return { FileError, "Couldn't finalise the download" }; - } - } - else - d->tempFile->close(); - qCDebug(JOBS) << "Saved a file as" << targetFileName(); - return Success; -} |