MCPcopy Create free account
hub / github.com/FreesmTeam/FreesmLauncher / ResourceDownloadTask

Method ResourceDownloadTask

launcher/ResourceDownloadTask.cpp:31–87  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

29#include "net/ChecksumValidator.h"
30
31ResourceDownloadTask::ResourceDownloadTask(ModPlatform::IndexedPack::Ptr pack,
32 ModPlatform::IndexedVersion version,
33 const std::shared_ptr<ResourceFolderModel> packs,
34 bool is_indexed,
35 QString custom_target_folder)
36 : m_pack(std::move(pack)), m_pack_version(std::move(version)), m_pack_model(packs), m_custom_target_folder(custom_target_folder)
37{
38 if (auto model = dynamic_cast<ModFolderModel*>(m_pack_model.get()); model && is_indexed) {
39 m_update_task.reset(new LocalModUpdateTask(model->indexDir(), *m_pack, m_pack_version));
40 connect(m_update_task.get(), &LocalModUpdateTask::hasOldMod, 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 QDir dir{ m_pack_model->dir() };
49 {
50 // FIXME: Make this more generic. May require adding additional info to IndexedVersion,
51 // or adquiring a reference to the base instance.
52 if (!m_custom_target_folder.isEmpty()) {
53 dir.cdUp();
54 dir.cd(m_custom_target_folder);
55 }
56 }
57
58 auto action = Net::ApiDownload::makeFile(m_pack_version.downloadUrl, dir.absoluteFilePath(getFilename()));
59 if (!m_pack_version.hash_type.isEmpty() && !m_pack_version.hash.isEmpty()) {
60 switch (Hashing::algorithmFromString(m_pack_version.hash_type)) {
61 case Hashing::Algorithm::Md4:
62 action->addValidator(new Net::ChecksumValidator(QCryptographicHash::Algorithm::Md4, m_pack_version.hash));
63 break;
64 case Hashing::Algorithm::Md5:
65 action->addValidator(new Net::ChecksumValidator(QCryptographicHash::Algorithm::Md5, m_pack_version.hash));
66 break;
67 case Hashing::Algorithm::Sha1:
68 action->addValidator(new Net::ChecksumValidator(QCryptographicHash::Algorithm::Sha1, m_pack_version.hash));
69 break;
70 case Hashing::Algorithm::Sha256:
71 action->addValidator(new Net::ChecksumValidator(QCryptographicHash::Algorithm::Sha256, m_pack_version.hash));
72 break;
73 case Hashing::Algorithm::Sha512:
74 action->addValidator(new Net::ChecksumValidator(QCryptographicHash::Algorithm::Sha512, m_pack_version.hash));
75 break;
76 default:
77 break;
78 }
79 }
80 m_filesNetJob->addNetAction(action);
81 connect(m_filesNetJob.get(), &NetJob::succeeded, this, &ResourceDownloadTask::downloadSucceeded);
82 connect(m_filesNetJob.get(), &NetJob::progress, this, &ResourceDownloadTask::downloadProgressChanged);
83 connect(m_filesNetJob.get(), &NetJob::stepProgress, this, &ResourceDownloadTask::propagateStepProgress);
84 connect(m_filesNetJob.get(), &NetJob::failed, this, &ResourceDownloadTask::downloadFailed);
85
86 addTask(m_filesNetJob);
87}
88

Callers

nothing calls this directly

Calls 11

moveFunction · 0.85
algorithmFromStringFunction · 0.85
networkMethod · 0.80
dirMethod · 0.80
addNetActionMethod · 0.80
getMethod · 0.45
resetMethod · 0.45
indexDirMethod · 0.45
setStatusMethod · 0.45
isEmptyMethod · 0.45
addValidatorMethod · 0.45

Tested by

no test coverage detected