aboutsummaryrefslogtreecommitdiff
path: root/jobs/downloadfilejob.cpp
diff options
context:
space:
mode:
authorKitsune Ral <Kitsune-Ral@users.sf.net>2018-03-31 13:16:02 +0900
committerKitsune Ral <Kitsune-Ral@users.sf.net>2018-03-31 14:23:55 +0900
commitefeb50a46ad824aa258472f6ac8da74810f05a55 (patch)
treea89c6f35d56986c60e73f870530c9d6ee0527e6d /jobs/downloadfilejob.cpp
parent29093379b707bfe620234c2968b37aa86666542a (diff)
downloadlibquotient-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.cpp120
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;
-}