diff options
author | Petr Mrázek <peterix@gmail.com> | 2013-12-10 07:12:52 +0100 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2013-12-10 07:12:52 +0100 |
commit | 3f5c46a1c4b27e82976e0067e4ec2d6abfffd9ba (patch) | |
tree | 9231f1304db15e966e1fe57c1b5b41ba26267b21 /logic/net/FileDownload.cpp | |
parent | 8db2e5db81c91cca9291ca35ed74e632278563e6 (diff) | |
download | MultiMC-3f5c46a1c4b27e82976e0067e4ec2d6abfffd9ba.tar MultiMC-3f5c46a1c4b27e82976e0067e4ec2d6abfffd9ba.tar.gz MultiMC-3f5c46a1c4b27e82976e0067e4ec2d6abfffd9ba.tar.lz MultiMC-3f5c46a1c4b27e82976e0067e4ec2d6abfffd9ba.tar.xz MultiMC-3f5c46a1c4b27e82976e0067e4ec2d6abfffd9ba.zip |
Finish assets update for 1.7.3
Diffstat (limited to 'logic/net/FileDownload.cpp')
-rw-r--r-- | logic/net/FileDownload.cpp | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/logic/net/FileDownload.cpp b/logic/net/FileDownload.cpp deleted file mode 100644 index 239af351..00000000 --- a/logic/net/FileDownload.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/* Copyright 2013 MultiMC Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "MultiMC.h" -#include "FileDownload.h" -#include <pathutils.h> -#include <QCryptographicHash> -#include "logger/QsLog.h" - -FileDownload::FileDownload(QUrl url, QString target_path) : NetAction() -{ - m_url = url; - m_target_path = target_path; - m_check_md5 = false; - m_status = Job_NotStarted; -} - -void FileDownload::start() -{ - QString filename = m_target_path; - m_output_file.setFileName(filename); - // if there already is a file and md5 checking is in effect and it can be opened - if (m_output_file.exists() && m_output_file.open(QIODevice::ReadOnly)) - { - // check the md5 against the expected one - QString hash = - QCryptographicHash::hash(m_output_file.readAll(), QCryptographicHash::Md5) - .toHex() - .constData(); - m_output_file.close(); - // skip this file if they match - if (m_check_md5 && hash == m_expected_md5) - { - QLOG_INFO() << "Skipping " << m_url.toString() << ": md5 match."; - emit succeeded(index_within_job); - return; - } - else - { - m_expected_md5 = hash; - } - } - if (!ensureFilePathExists(filename)) - { - emit failed(index_within_job); - return; - } - - QLOG_INFO() << "Downloading " << m_url.toString(); - QNetworkRequest request(m_url); - request.setRawHeader(QString("If-None-Match").toLatin1(), m_expected_md5.toLatin1()); - request.setHeader(QNetworkRequest::UserAgentHeader, "MultiMC/5.0 (Uncached)"); - - auto worker = MMC->qnam(); - QNetworkReply *rep = worker->get(request); - - m_reply = std::shared_ptr<QNetworkReply>(rep); - connect(rep, SIGNAL(downloadProgress(qint64, qint64)), - SLOT(downloadProgress(qint64, qint64))); - connect(rep, SIGNAL(finished()), SLOT(downloadFinished())); - connect(rep, SIGNAL(error(QNetworkReply::NetworkError)), - SLOT(downloadError(QNetworkReply::NetworkError))); - connect(rep, SIGNAL(readyRead()), SLOT(downloadReadyRead())); -} - -void FileDownload::downloadProgress(qint64 bytesReceived, qint64 bytesTotal) -{ - emit progress(index_within_job, bytesReceived, bytesTotal); -} - -void FileDownload::downloadError(QNetworkReply::NetworkError error) -{ - // error happened during download. - // TODO: log the reason why - m_status = Job_Failed; -} - -void FileDownload::downloadFinished() -{ - // if the download succeeded - if (m_status != Job_Failed) - { - // nothing went wrong... - m_status = Job_Finished; - m_output_file.close(); - - m_reply.reset(); - emit succeeded(index_within_job); - return; - } - // else the download failed - else - { - m_output_file.close(); - m_reply.reset(); - emit failed(index_within_job); - return; - } -} - -void FileDownload::downloadReadyRead() -{ - if (!m_output_file.isOpen()) - { - if (!m_output_file.open(QIODevice::WriteOnly)) - { - /* - * Can't open the file... the job failed - */ - m_reply->abort(); - emit failed(index_within_job); - return; - } - } - m_output_file.write(m_reply->readAll()); -} |