| 159 | } |
| 160 | |
| 161 | void AutoInstallJava::downloadJava(Meta::Version::Ptr version, QString javaName) |
| 162 | { |
| 163 | auto runtimes = version->data()->runtimes; |
| 164 | for (auto java : runtimes) { |
| 165 | if (java->runtimeOS == m_supported_arch && java->name() == javaName) { |
| 166 | QDir javaDir(APPLICATION->javaPath()); |
| 167 | auto final_path = javaDir.absoluteFilePath(java->m_name); |
| 168 | switch (java->downloadType) { |
| 169 | case Java::DownloadType::Manifest: |
| 170 | m_current_task = makeShared<Java::ManifestDownloadTask>(java->url, final_path, java->checksumType, java->checksumHash); |
| 171 | break; |
| 172 | case Java::DownloadType::Archive: |
| 173 | m_current_task = makeShared<Java::ArchiveDownloadTask>(java->url, final_path, java->checksumType, java->checksumHash); |
| 174 | break; |
| 175 | case Java::DownloadType::Unknown: |
| 176 | emitFailed(tr("Could not determine Java download type!")); |
| 177 | return; |
| 178 | } |
| 179 | #if defined(Q_OS_MACOS) |
| 180 | auto seq = makeShared<SequentialTask>(tr("Install Java")); |
| 181 | seq->addTask(m_current_task); |
| 182 | seq->addTask(makeShared<Java::SymlinkTask>(final_path)); |
| 183 | m_current_task = seq; |
| 184 | #endif |
| 185 | auto deletePath = [final_path] { FS::deletePath(final_path); }; |
| 186 | connect(m_current_task.get(), &Task::failed, this, [this, deletePath](QString reason) { |
| 187 | deletePath(); |
| 188 | emitFailed(reason); |
| 189 | }); |
| 190 | connect(m_current_task.get(), &Task::aborted, this, [deletePath] { deletePath(); }); |
| 191 | connect(m_current_task.get(), &Task::succeeded, this, &AutoInstallJava::setJavaPathFromPartial); |
| 192 | connect(m_current_task.get(), &Task::failed, this, &AutoInstallJava::tryNextMajorJava); |
| 193 | connect(m_current_task.get(), &Task::progress, this, &AutoInstallJava::setProgress); |
| 194 | connect(m_current_task.get(), &Task::stepProgress, this, &AutoInstallJava::propagateStepProgress); |
| 195 | connect(m_current_task.get(), &Task::status, this, &AutoInstallJava::setStatus); |
| 196 | connect(m_current_task.get(), &Task::details, this, &AutoInstallJava::setDetails); |
| 197 | m_current_task->start(); |
| 198 | return; |
| 199 | } |
| 200 | } |
| 201 | tryNextMajorJava(); |
| 202 | } |
| 203 | |
| 204 | void AutoInstallJava::tryNextMajorJava() |
| 205 | { |