feat: added wine/dxvk downloading skipping in initial setup
This can cause some issues and in general is a good idea to avoid downloading what is already downloaded
This commit is contained in:
parent
b4f205b885
commit
942abd8474
1 changed files with 129 additions and 111 deletions
|
@ -345,71 +345,81 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
||||||
let wine = self.selected_wine.clone().unwrap();
|
let wine = self.selected_wine.clone().unwrap();
|
||||||
let progress_bar_input = self.progress_bar.sender().clone();
|
let progress_bar_input = self.progress_bar.sender().clone();
|
||||||
|
|
||||||
std::thread::spawn(move || {
|
// Skip wine downloading if it was already done
|
||||||
tracing::info!("Installing wine");
|
if wine.is_downloaded_in(&config.game.wine.builds) {
|
||||||
|
tracing::info!("Wine already installed: {}", wine.name);
|
||||||
|
|
||||||
// Install wine
|
sender.input(DownloadComponentsAppMsg::CreatePrefix);
|
||||||
match get_installer(&wine.uri, config.launcher.temp.as_ref(), config.launcher.speed_limit) {
|
}
|
||||||
Ok(mut installer) => {
|
|
||||||
// Create wine builds folder
|
|
||||||
if config.game.wine.builds.exists() {
|
|
||||||
std::fs::create_dir_all(&config.game.wine.builds)
|
|
||||||
.expect("Failed to create wine builds directory");
|
|
||||||
}
|
|
||||||
|
|
||||||
installer.install(&config.game.wine.builds, move |update| {
|
// Otherwise download wine
|
||||||
match &update {
|
else {
|
||||||
InstallerUpdate::DownloadingError(err) => {
|
std::thread::spawn(move || {
|
||||||
tracing::error!("Failed to download wine: {err}");
|
tracing::info!("Installing wine: {}", wine.name);
|
||||||
|
|
||||||
sender.output(Self::Output::Toast {
|
// Install wine
|
||||||
title: tr("wine-download-error"),
|
match get_installer(&wine.uri, config.launcher.temp.as_ref(), config.launcher.speed_limit) {
|
||||||
description: Some(err.to_string())
|
Ok(mut installer) => {
|
||||||
});
|
// Create wine builds folder
|
||||||
}
|
if config.game.wine.builds.exists() {
|
||||||
|
std::fs::create_dir_all(&config.game.wine.builds)
|
||||||
InstallerUpdate::UnpackingError(err) => {
|
.expect("Failed to create wine builds directory");
|
||||||
tracing::error!("Failed to unpack wine: {err}");
|
}
|
||||||
|
|
||||||
sender.output(Self::Output::Toast {
|
installer.install(&config.game.wine.builds, move |update| {
|
||||||
title: tr("wine-unpack-errror"),
|
match &update {
|
||||||
description: Some(err.clone())
|
InstallerUpdate::DownloadingError(err) => {
|
||||||
});
|
tracing::error!("Failed to download wine: {err}");
|
||||||
}
|
|
||||||
|
|
||||||
// Create prefix
|
|
||||||
InstallerUpdate::UnpackingFinished => {
|
|
||||||
let mut config = config::get().unwrap_or_default();
|
|
||||||
|
|
||||||
config.game.wine.selected = Some(wine.name.clone());
|
|
||||||
|
|
||||||
if let Err(err) = config::update_raw(config) {
|
|
||||||
sender.output(Self::Output::Toast {
|
sender.output(Self::Output::Toast {
|
||||||
title: tr("config-update-error"),
|
title: tr("wine-download-error"),
|
||||||
description: Some(err.to_string())
|
description: Some(err.to_string())
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
sender.input(DownloadComponentsAppMsg::CreatePrefix);
|
InstallerUpdate::UnpackingError(err) => {
|
||||||
},
|
tracing::error!("Failed to unpack wine: {err}");
|
||||||
|
|
||||||
_ => ()
|
sender.output(Self::Output::Toast {
|
||||||
}
|
title: tr("wine-unpack-errror"),
|
||||||
|
description: Some(err.clone())
|
||||||
progress_bar_input.send(ProgressBarMsg::UpdateFromState(update));
|
});
|
||||||
});
|
}
|
||||||
|
|
||||||
|
// Create prefix
|
||||||
|
InstallerUpdate::UnpackingFinished => {
|
||||||
|
let mut config = config::get().unwrap_or_default();
|
||||||
|
|
||||||
|
config.game.wine.selected = Some(wine.name.clone());
|
||||||
|
|
||||||
|
if let Err(err) = config::update_raw(config) {
|
||||||
|
sender.output(Self::Output::Toast {
|
||||||
|
title: tr("config-update-error"),
|
||||||
|
description: Some(err.to_string())
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
sender.input(DownloadComponentsAppMsg::CreatePrefix);
|
||||||
|
},
|
||||||
|
|
||||||
|
_ => ()
|
||||||
|
}
|
||||||
|
|
||||||
|
progress_bar_input.send(ProgressBarMsg::UpdateFromState(update));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Err(err) => {
|
||||||
|
tracing::error!("Failed to initialize wine installer: {err}");
|
||||||
|
|
||||||
|
sender.output(Self::Output::Toast {
|
||||||
|
title: tr("wine-install-failed"),
|
||||||
|
description: Some(err.to_string())
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
});
|
||||||
Err(err) => {
|
}
|
||||||
tracing::error!("Failed to initialize wine installer: {err}");
|
|
||||||
|
|
||||||
sender.output(Self::Output::Toast {
|
|
||||||
title: tr("wine-install-failed"),
|
|
||||||
description: Some(err.to_string())
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unused_must_use)]
|
#[allow(unused_must_use)]
|
||||||
|
@ -455,63 +465,71 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
||||||
let dxvk = self.selected_dxvk.clone().unwrap();
|
let dxvk = self.selected_dxvk.clone().unwrap();
|
||||||
let progress_bar_input = self.progress_bar.sender().clone();
|
let progress_bar_input = self.progress_bar.sender().clone();
|
||||||
|
|
||||||
std::thread::spawn(move || {
|
if dxvk.is_downloaded_in(&config.game.dxvk.builds) {
|
||||||
// Install DXVK
|
tracing::info!("DXVK is already downloaded: {}", dxvk.name);
|
||||||
tracing::info!("Installing DXVK");
|
|
||||||
|
|
||||||
match get_installer(&dxvk.uri, config.launcher.temp.as_ref(), config.launcher.speed_limit) {
|
sender.input(DownloadComponentsAppMsg::ApplyDXVK);
|
||||||
Ok(mut installer) => {
|
}
|
||||||
let progress_bar_input = progress_bar_input.clone();
|
|
||||||
let sender = sender.clone();
|
|
||||||
|
|
||||||
// Create DXVK builds folder
|
else {
|
||||||
if config.game.dxvk.builds.exists() {
|
std::thread::spawn(move || {
|
||||||
std::fs::create_dir_all(&config.game.dxvk.builds)
|
// Install DXVK
|
||||||
.expect("Failed to create DXVK builds directory");
|
tracing::info!("Installing DXVK: {}", dxvk.name);
|
||||||
}
|
|
||||||
|
match get_installer(&dxvk.uri, config.launcher.temp.as_ref(), config.launcher.speed_limit) {
|
||||||
installer.install(&config.game.dxvk.builds, move |update| {
|
Ok(mut installer) => {
|
||||||
match &update {
|
let progress_bar_input = progress_bar_input.clone();
|
||||||
InstallerUpdate::DownloadingError(err) => {
|
let sender = sender.clone();
|
||||||
tracing::error!("Failed to download dxvk: {err}");
|
|
||||||
|
// Create DXVK builds folder
|
||||||
sender.output(Self::Output::Toast {
|
if config.game.dxvk.builds.exists() {
|
||||||
title: tr("dxvk-download-error"),
|
std::fs::create_dir_all(&config.game.dxvk.builds)
|
||||||
description: Some(err.to_string())
|
.expect("Failed to create DXVK builds directory");
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
InstallerUpdate::UnpackingError(err) => {
|
|
||||||
tracing::error!("Failed to unpack dxvk: {err}");
|
|
||||||
|
|
||||||
sender.output(Self::Output::Toast {
|
|
||||||
title: tr("dxvk-unpack-error"),
|
|
||||||
description: Some(err.clone())
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Apply DXVK
|
|
||||||
InstallerUpdate::UnpackingFinished => {
|
|
||||||
sender.input(DownloadComponentsAppMsg::ApplyDXVK);
|
|
||||||
}
|
|
||||||
|
|
||||||
_ => ()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
progress_bar_input.send(ProgressBarMsg::UpdateFromState(update));
|
installer.install(&config.game.dxvk.builds, move |update| {
|
||||||
});
|
match &update {
|
||||||
|
InstallerUpdate::DownloadingError(err) => {
|
||||||
|
tracing::error!("Failed to download dxvk: {err}");
|
||||||
|
|
||||||
|
sender.output(Self::Output::Toast {
|
||||||
|
title: tr("dxvk-download-error"),
|
||||||
|
description: Some(err.to_string())
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
InstallerUpdate::UnpackingError(err) => {
|
||||||
|
tracing::error!("Failed to unpack dxvk: {err}");
|
||||||
|
|
||||||
|
sender.output(Self::Output::Toast {
|
||||||
|
title: tr("dxvk-unpack-error"),
|
||||||
|
description: Some(err.clone())
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply DXVK
|
||||||
|
InstallerUpdate::UnpackingFinished => {
|
||||||
|
sender.input(DownloadComponentsAppMsg::ApplyDXVK);
|
||||||
|
}
|
||||||
|
|
||||||
|
_ => ()
|
||||||
|
}
|
||||||
|
|
||||||
|
progress_bar_input.send(ProgressBarMsg::UpdateFromState(update));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Err(err) => {
|
||||||
|
tracing::error!("Failed to initialize dxvk installer: {err}");
|
||||||
|
|
||||||
|
sender.output(Self::Output::Toast {
|
||||||
|
title: tr("dxvk-install-failed"),
|
||||||
|
description: Some(err.to_string())
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
});
|
||||||
Err(err) => {
|
}
|
||||||
tracing::error!("Failed to initialize dxvk installer: {err}");
|
|
||||||
|
|
||||||
sender.output(Self::Output::Toast {
|
|
||||||
title: tr("dxvk-install-failed"),
|
|
||||||
description: Some(err.to_string())
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unused_must_use)]
|
#[allow(unused_must_use)]
|
||||||
|
|
Loading…
Reference in a new issue