mirror of
https://github.com/an-anime-team/an-anime-game-launcher.git
synced 2024-11-29 10:28:47 +03:00
Fixed DXVK applying using system wine
This commit is contained in:
parent
8efd07c7fd
commit
afafd6bbd1
1 changed files with 49 additions and 47 deletions
|
@ -83,59 +83,61 @@ impl Version {
|
||||||
let apply_path = format!("{}/{}/setup_dxvk.sh", dxvks_folder.to_string(), self.name);
|
let apply_path = format!("{}/{}/setup_dxvk.sh", dxvks_folder.to_string(), self.name);
|
||||||
let config = config::get()?;
|
let config = config::get()?;
|
||||||
|
|
||||||
match config.try_get_selected_wine_info() {
|
let (wine_path, wineserver_path, wineboot_path) = match config.try_get_selected_wine_info() {
|
||||||
Some(wine) => {
|
Some(wine) => {
|
||||||
let wine_path = format!("{}/{}/{}", &config.game.wine.builds, wine.name, wine.files.wine64);
|
let wine_path = format!("{}/{}/{}", &config.game.wine.builds, wine.name, wine.files.wine64);
|
||||||
let wineserver_path = format!("{}/{}/{}", &config.game.wine.builds, wine.name, wine.files.wineserver);
|
let wineserver_path = format!("{}/{}/{}", &config.game.wine.builds, wine.name, wine.files.wineserver);
|
||||||
let wineboot_path = format!("{}/{}/{}", &config.game.wine.builds, wine.name, wine.files.wineboot);
|
let wineboot_path = format!("{}/{}/{}", &config.game.wine.builds, wine.name, wine.files.wineboot);
|
||||||
|
|
||||||
let mut apply_script = std::fs::read_to_string(&apply_path)?;
|
(wine_path, wineserver_path, wineboot_path)
|
||||||
|
|
||||||
lazy_static! {
|
|
||||||
static ref WINE: Regex = Regex::new("wine=\".*\"").unwrap();
|
|
||||||
static ref WINE64: Regex = Regex::new("wine64=\".*\"").unwrap();
|
|
||||||
static ref WINEBOOT: Regex = Regex::new("wineboot=\".*\"").unwrap();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update wine paths
|
|
||||||
apply_script = WINE.replace_all(&apply_script, &format!("wine=\"{}\"", &wine_path)).to_string();
|
|
||||||
apply_script = WINE64.replace_all(&apply_script, &format!("wine64=\"{}\"", &wine_path)).to_string();
|
|
||||||
apply_script = WINEBOOT.replace_all(&apply_script, &format!("wineboot=\"{}\"", &wineboot_path)).to_string();
|
|
||||||
|
|
||||||
// Use wine64 to update wine prefix instead of running wineboot
|
|
||||||
// so we can get rid of 32bit support
|
|
||||||
apply_script = apply_script.replace("$wineboot -u", "\"$wine64\" -u");
|
|
||||||
|
|
||||||
// Fix issues related to spaces in paths to the runners folder
|
|
||||||
apply_script = apply_script.replace("which $wineboot", "which \"$wineboot\"");
|
|
||||||
apply_script = apply_script.replace("$wine --version", "\"$wine\" --version");
|
|
||||||
apply_script = apply_script.replace("$wine64 winepath", "\"$wine64\" winepath");
|
|
||||||
apply_script = apply_script.replace("$wine winepath", "\"$wine\" winepath");
|
|
||||||
apply_script = apply_script.replace("$wine reg", "\"$wine\" reg");
|
|
||||||
|
|
||||||
// Old GE builds return specific --version output which can break
|
|
||||||
// DXVK installation script
|
|
||||||
apply_script = apply_script.replace("grep wine", "grep \"wine\\|GE\"");
|
|
||||||
|
|
||||||
std::fs::write(&apply_path, apply_script)?;
|
|
||||||
|
|
||||||
let output = Command::new("bash")
|
|
||||||
.arg(&apply_path)
|
|
||||||
.arg("install")
|
|
||||||
.env("WINEARCH", "win64")
|
|
||||||
.env("WINESERVER", wineserver_path)
|
|
||||||
.env("WINEPREFIX", prefix_path.to_string())
|
|
||||||
.output()?;
|
|
||||||
|
|
||||||
if output.status.success() {
|
|
||||||
Ok(output)
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
Err(Error::new(ErrorKind::Other, String::from_utf8_lossy(&output.stderr)))
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
None => Err(Error::new(ErrorKind::Other, "Wine is not selected"))
|
None => (String::from("wine64"), String::from("wineserver"), String::from("wineboot"))
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut apply_script = std::fs::read_to_string(&apply_path)?;
|
||||||
|
|
||||||
|
lazy_static! {
|
||||||
|
static ref WINE: Regex = Regex::new("wine=\".*\"").unwrap();
|
||||||
|
static ref WINE64: Regex = Regex::new("wine64=\".*\"").unwrap();
|
||||||
|
static ref WINEBOOT: Regex = Regex::new("wineboot=\".*\"").unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update wine paths
|
||||||
|
apply_script = WINE.replace_all(&apply_script, &format!("wine=\"{}\"", &wine_path)).to_string();
|
||||||
|
apply_script = WINE64.replace_all(&apply_script, &format!("wine64=\"{}\"", &wine_path)).to_string();
|
||||||
|
apply_script = WINEBOOT.replace_all(&apply_script, &format!("wineboot=\"{}\"", &wineboot_path)).to_string();
|
||||||
|
|
||||||
|
// Use wine64 to update wine prefix instead of running wineboot
|
||||||
|
// so we can get rid of 32bit support
|
||||||
|
apply_script = apply_script.replace("$wineboot -u", "\"$wine64\" -u");
|
||||||
|
|
||||||
|
// Fix issues related to spaces in paths to the runners folder
|
||||||
|
apply_script = apply_script.replace("which $wineboot", "which \"$wineboot\"");
|
||||||
|
apply_script = apply_script.replace("$wine --version", "\"$wine\" --version");
|
||||||
|
apply_script = apply_script.replace("$wine64 winepath", "\"$wine64\" winepath");
|
||||||
|
apply_script = apply_script.replace("$wine winepath", "\"$wine\" winepath");
|
||||||
|
apply_script = apply_script.replace("$wine reg", "\"$wine\" reg");
|
||||||
|
|
||||||
|
// Old GE builds return specific --version output which can break
|
||||||
|
// DXVK installation script
|
||||||
|
apply_script = apply_script.replace("grep wine", "grep \"wine\\|GE\"");
|
||||||
|
|
||||||
|
std::fs::write(&apply_path, apply_script)?;
|
||||||
|
|
||||||
|
let output = Command::new("bash")
|
||||||
|
.arg(&apply_path)
|
||||||
|
.arg("install")
|
||||||
|
.env("WINEARCH", "win64")
|
||||||
|
.env("WINESERVER", wineserver_path)
|
||||||
|
.env("WINEPREFIX", prefix_path.to_string())
|
||||||
|
.output()?;
|
||||||
|
|
||||||
|
if output.status.success() {
|
||||||
|
Ok(output)
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
Err(Error::new(ErrorKind::Other, String::from_utf8_lossy(&output.stderr)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue