feat(core): changed wine related structures for better compatibility

Before `wine::Files` couldn't work with builds which
don't have `wineboot` script inside which broke
ge-proton compatibility. This change will fix it
(in combination with wincompatlib 0.2.2)
This commit is contained in:
Observer KRypt0n_ 2023-03-07 17:58:22 +02:00
parent 219d0f7704
commit e448f7672d
No known key found for this signature in database
GPG key ID: 844DA47BA25FE1E2
3 changed files with 18 additions and 10 deletions

@ -1 +1 @@
Subproject commit 45894e77c9ec1fcfe264c80f6a39774876413386 Subproject commit 9b787856c4ca297023b1eab0aca0188278cea7a4

View file

@ -23,10 +23,10 @@ pub struct Version {
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct Files { pub struct Files {
pub wine: String, pub wine: String,
pub wine64: String, pub wine64: Option<String>,
pub wineserver: String, pub wineserver: Option<String>,
pub wineboot: String, pub wineboot: Option<String>,
pub winecfg: String pub winecfg: Option<String>
} }
impl Version { impl Version {
@ -48,12 +48,20 @@ impl Version {
pub fn to_wine<T: Into<PathBuf>>(&self, wine_folder: Option<T>) -> Wine { pub fn to_wine<T: Into<PathBuf>>(&self, wine_folder: Option<T>) -> Wine {
let wine_folder = wine_folder.map(|folder| folder.into()).unwrap_or_default(); let wine_folder = wine_folder.map(|folder| folder.into()).unwrap_or_default();
let (wine, arch) = match self.files.wine64.as_ref() {
Some(wine) => (wine, WineArch::Win64),
None => (&self.files.wine, WineArch::Win32)
};
let wineboot = self.files.wineboot.as_ref().map(|wineboot| wine_folder.join(wineboot));
let wineserver = self.files.wineserver.as_ref().map(|wineserver| wine_folder.join(wineserver));
Wine::new( Wine::new(
wine_folder.join(&self.files.wine64), wine_folder.join(wine),
None, None,
Some(WineArch::Win64), Some(arch),
Some(wine_folder.join(&self.files.wineboot)), wineboot,
Some(wine_folder.join(&self.files.wineserver)), wineserver,
WineLoader::Current WineLoader::Current
) )
} }

View file

@ -86,7 +86,7 @@ pub fn run() -> anyhow::Result<()> {
bash_chain += "gamemoderun "; bash_chain += "gamemoderun ";
} }
bash_chain += &format!("'{}' ", config.game.wine.builds.join(wine.name).join(wine.files.wine64).to_string_lossy()); bash_chain += &format!("'{}' ", config.game.wine.builds.join(wine.name).join(wine.files.wine64.unwrap_or(wine.files.wine)).to_string_lossy());
if let Some(virtual_desktop) = config.game.wine.virtual_desktop.get_command() { if let Some(virtual_desktop) = config.game.wine.virtual_desktop.get_command() {
bash_chain += &format!("{virtual_desktop} "); bash_chain += &format!("{virtual_desktop} ");