mirror of
https://github.com/modrinth/code.git
synced 2026-09-05 06:19:11 +00:00
feat: install flow improvements (#6669)
* feat: better error handling + copy details btn for info * refactor: clean up error handling into diagnostics * feat: extra info for failure states + queuing properly * fix: cleanup * fix: lint * fix: fmt * fix: cleanup * fix: cleanup * fix: lint * feat: use bon builder
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
//! Authentication flow interface
|
||||
use crate::event::emit::{emit_loading, init_loading};
|
||||
use crate::install::{
|
||||
InstallJavaStep, InstallPhaseDetails, InstallPhaseId, InstallProgress,
|
||||
InstallProgressReporter,
|
||||
InstallErrorContext, InstallJavaStep, InstallPhaseDetails, InstallPhaseId,
|
||||
InstallProgress, InstallProgressReporter,
|
||||
};
|
||||
use crate::state::JavaVersion;
|
||||
use crate::util::fetch::{
|
||||
@@ -148,23 +148,52 @@ async fn auto_install_java_inner(
|
||||
Some(java_step_progress(1)),
|
||||
)
|
||||
.await?;
|
||||
let metadata_url = format!(
|
||||
"https://api.azul.com/metadata/v1/zulu/packages?arch={}&java_version={}&os={}&archive_type=zip&javafx_bundled=false&java_package_type=jre&page_size=1",
|
||||
std::env::consts::ARCH,
|
||||
java_version,
|
||||
std::env::consts::OS
|
||||
);
|
||||
if let Some(reporter) = &reporter {
|
||||
reporter
|
||||
.set_context(
|
||||
InstallErrorContext::new("fetch Java package metadata")
|
||||
.urls(vec![metadata_url.clone()])
|
||||
.java_version(java_version)
|
||||
.os(std::env::consts::OS)
|
||||
.arch(std::env::consts::ARCH)
|
||||
.build(),
|
||||
)
|
||||
.await?;
|
||||
}
|
||||
let packages = fetch_json::<Vec<Package>>(
|
||||
Method::GET,
|
||||
&format!(
|
||||
"https://api.azul.com/metadata/v1/zulu/packages?arch={}&java_version={}&os={}&archive_type=zip&javafx_bundled=false&java_package_type=jre&page_size=1",
|
||||
std::env::consts::ARCH, java_version, std::env::consts::OS
|
||||
),
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
&state.fetch_semaphore,
|
||||
&state.pool,
|
||||
).await?;
|
||||
Method::GET,
|
||||
&metadata_url,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
&state.fetch_semaphore,
|
||||
&state.pool,
|
||||
)
|
||||
.await?;
|
||||
if let Some(loading_bar) = &loading_bar {
|
||||
emit_loading(loading_bar, 10.0, Some("Downloading java version"))?;
|
||||
}
|
||||
|
||||
if let Some(download) = packages.first() {
|
||||
if let Some(reporter) = &reporter {
|
||||
reporter
|
||||
.set_context(
|
||||
InstallErrorContext::new("download Java archive")
|
||||
.urls(vec![download.download_url.clone()])
|
||||
.file_path(download.name.display().to_string())
|
||||
.java_version(java_version)
|
||||
.os(std::env::consts::OS)
|
||||
.arch(std::env::consts::ARCH)
|
||||
.build(),
|
||||
)
|
||||
.await?;
|
||||
}
|
||||
update_java_install_progress(
|
||||
reporter.as_ref(),
|
||||
java_version,
|
||||
@@ -237,6 +266,20 @@ async fn auto_install_java_inner(
|
||||
|
||||
let path = state.directories.java_versions_dir();
|
||||
|
||||
if let Some(reporter) = &reporter {
|
||||
reporter
|
||||
.set_context(
|
||||
InstallErrorContext::new("read Java archive")
|
||||
.urls(vec![download.download_url.clone()])
|
||||
.file_path(download.name.display().to_string())
|
||||
.target_path(path.display().to_string())
|
||||
.java_version(java_version)
|
||||
.os(std::env::consts::OS)
|
||||
.arch(std::env::consts::ARCH)
|
||||
.build(),
|
||||
)
|
||||
.await?;
|
||||
}
|
||||
let mut archive = zip::ZipArchive::new(std::io::Cursor::new(file))
|
||||
.map_err(|_| {
|
||||
crate::Error::from(crate::ErrorKind::InputError(
|
||||
@@ -265,6 +308,20 @@ async fn auto_install_java_inner(
|
||||
Some(java_step_progress(3)),
|
||||
)
|
||||
.await?;
|
||||
if let Some(reporter) = &reporter {
|
||||
reporter
|
||||
.set_context(
|
||||
InstallErrorContext::new("extract Java archive")
|
||||
.urls(vec![download.download_url.clone()])
|
||||
.file_path(download.name.display().to_string())
|
||||
.target_path(path.display().to_string())
|
||||
.java_version(java_version)
|
||||
.os(std::env::consts::OS)
|
||||
.arch(std::env::consts::ARCH)
|
||||
.build(),
|
||||
)
|
||||
.await?;
|
||||
}
|
||||
archive.extract(&path).map_err(|_| {
|
||||
crate::Error::from(crate::ErrorKind::InputError(
|
||||
"Failed to extract java zip".to_string(),
|
||||
|
||||
Reference in New Issue
Block a user