| 30 | #include "net/ChecksumValidator.h" |
| 31 | |
| 32 | ResourceDownloadTask::ResourceDownloadTask(ModPlatform::IndexedPack::Ptr pack, |
| 33 | ModPlatform::IndexedVersion version, |
| 34 | ResourceFolderModel* packs, |
| 35 | bool is_indexed) |
| 36 | : m_pack(std::move(pack)), m_pack_version(std::move(version)), m_pack_model(packs) |
| 37 | { |
| 38 | if (is_indexed) { |
| 39 | m_update_task.reset(new LocalResourceUpdateTask(m_pack_model->indexDir(), *m_pack, m_pack_version)); |
| 40 | connect(m_update_task.get(), &LocalResourceUpdateTask::hasOldResource, this, &ResourceDownloadTask::hasOldResource); |
| 41 | |
| 42 | addTask(m_update_task); |
| 43 | } |
| 44 | |
| 45 | m_filesNetJob.reset(new NetJob(tr("Resource download"), APPLICATION->network())); |
| 46 | m_filesNetJob->setStatus(tr("Downloading resource:\n%1").arg(m_pack_version.downloadUrl)); |
| 47 | |
| 48 | auto action = Net::ApiDownload::makeFile(m_pack_version.downloadUrl, m_pack_model->dir().absoluteFilePath(getFilename())); |
| 49 | if (!m_pack_version.hash_type.isEmpty() && !m_pack_version.hash.isEmpty()) { |
| 50 | switch (Hashing::algorithmFromString(m_pack_version.hash_type)) { |
| 51 | case Hashing::Algorithm::Md4: |
| 52 | action->addValidator(new Net::ChecksumValidator(QCryptographicHash::Algorithm::Md4, m_pack_version.hash)); |
| 53 | break; |
| 54 | case Hashing::Algorithm::Md5: |
| 55 | action->addValidator(new Net::ChecksumValidator(QCryptographicHash::Algorithm::Md5, m_pack_version.hash)); |
| 56 | break; |
| 57 | case Hashing::Algorithm::Sha1: |
| 58 | action->addValidator(new Net::ChecksumValidator(QCryptographicHash::Algorithm::Sha1, m_pack_version.hash)); |
| 59 | break; |
| 60 | case Hashing::Algorithm::Sha256: |
| 61 | action->addValidator(new Net::ChecksumValidator(QCryptographicHash::Algorithm::Sha256, m_pack_version.hash)); |
| 62 | break; |
| 63 | case Hashing::Algorithm::Sha512: |
| 64 | action->addValidator(new Net::ChecksumValidator(QCryptographicHash::Algorithm::Sha512, m_pack_version.hash)); |
| 65 | break; |
| 66 | default: |
| 67 | break; |
| 68 | } |
| 69 | } |
| 70 | m_filesNetJob->addNetAction(action); |
| 71 | connect(m_filesNetJob.get(), &NetJob::succeeded, this, &ResourceDownloadTask::downloadSucceeded); |
| 72 | connect(m_filesNetJob.get(), &NetJob::progress, this, &ResourceDownloadTask::downloadProgressChanged); |
| 73 | connect(m_filesNetJob.get(), &NetJob::stepProgress, this, &ResourceDownloadTask::propagateStepProgress); |
| 74 | connect(m_filesNetJob.get(), &NetJob::failed, this, &ResourceDownloadTask::downloadFailed); |
| 75 | |
| 76 | addTask(m_filesNetJob); |
| 77 | } |
| 78 | |
| 79 | void ResourceDownloadTask::downloadSucceeded() |
| 80 | { |
nothing calls this directly
no test coverage detected