feat(core): implemented new SDK

This commit is contained in:
Observer KRypt0n_ 2023-03-15 23:11:32 +02:00
parent 991b9b337a
commit 4efa6abbb0
6 changed files with 41 additions and 53 deletions

45
Cargo.lock generated
View file

@ -76,7 +76,7 @@ dependencies = [
[[package]] [[package]]
name = "anime-launcher-sdk" name = "anime-launcher-sdk"
version = "0.5.0" version = "0.5.2"
dependencies = [ dependencies = [
"anime-game-core", "anime-game-core",
"anyhow", "anyhow",
@ -570,37 +570,6 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "derive_builder"
version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d67778784b508018359cbc8696edb3db78160bab2c2a28ba7f56ef6932997f8"
dependencies = [
"derive_builder_macro",
]
[[package]]
name = "derive_builder_core"
version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f"
dependencies = [
"darling",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "derive_builder_macro"
version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e"
dependencies = [
"derive_builder_core",
"syn",
]
[[package]] [[package]]
name = "digest" name = "digest"
version = "0.10.6" version = "0.10.6"
@ -1689,12 +1658,11 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
[[package]] [[package]]
name = "open" name = "open"
version = "3.2.0" version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8" checksum = "bd61e3bf9d78956c72ee864bba52431f7f43994b21a17e9e72596a81bd61075b"
dependencies = [ dependencies = [
"pathdiff", "pathdiff",
"windows-sys 0.42.0",
] ]
[[package]] [[package]]
@ -2918,12 +2886,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]] [[package]]
name = "wincompatlib" name = "wincompatlib"
version = "0.2.2" version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d14b77ccb1cd4ef8dd38f70833f922bf192bc6429a4f5f311647d15ba92d11a" checksum = "e62198d7aef27647807cde7c4c19ce293b4e331b1332825ce3c841bc0be1bd23"
dependencies = [
"derive_builder",
]
[[package]] [[package]]
name = "windows" name = "windows"

View file

@ -20,7 +20,7 @@ relm4 = { version = "0.5", features = ["macros", "libadwaita"] }
gtk = { package = "gtk4", version = "0.5", features = ["v4_8"] } gtk = { package = "gtk4", version = "0.5", features = ["v4_8"] }
adw = { package = "libadwaita", version = "0.2", features = ["v1_2"] } adw = { package = "libadwaita", version = "0.2", features = ["v1_2"] }
rfd = { version = "0.11", features = ["xdg-portal"], default-features = false } rfd = { version = "0.11", features = ["xdg-portal"], default-features = false }
open = "3.2.0" open = "4.0.0"
anime-launcher-sdk = { path = "anime-launcher-sdk" } anime-launcher-sdk = { path = "anime-launcher-sdk" }

@ -1 +1 @@
Subproject commit 7286ef8b1771b78292ccf58c39b621c790a2d3cc Subproject commit c5ca8d533c25ecd469caf46e2f8aeeb054a4bb2d

View file

@ -4,6 +4,7 @@ use relm4::component::*;
use adw::prelude::*; use adw::prelude::*;
use anime_launcher_sdk::components::*; use anime_launcher_sdk::components::*;
use anime_launcher_sdk::components::wine::WincompatlibWine;
use anime_launcher_sdk::anime_game_core::installer::prelude::*; use anime_launcher_sdk::anime_game_core::installer::prelude::*;
use anime_launcher_sdk::config; use anime_launcher_sdk::config;
use anime_launcher_sdk::wincompatlib::prelude::*; use anime_launcher_sdk::wincompatlib::prelude::*;
@ -434,12 +435,13 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
let wine = self.selected_wine.as_ref().unwrap(); let wine = self.selected_wine.as_ref().unwrap();
let wine = wine let wine = wine
.to_wine(Some(config.game.wine.builds.join(&wine.name))) .to_wine(config.components.path, Some(config.game.wine.builds.join(&wine.name)))
.with_prefix(&config.game.wine.prefix)
.with_loader(WineLoader::Current) .with_loader(WineLoader::Current)
.with_arch(WineArch::Win64); .with_arch(WineArch::Win64);
std::thread::spawn(move || { std::thread::spawn(move || {
match wine.update_prefix(config.game.wine.prefix) { match wine.update_prefix::<&str>(None) {
// Download DXVK // Download DXVK
Ok(_) => sender.input(DownloadComponentsAppMsg::DownloadDXVK), Ok(_) => sender.input(DownloadComponentsAppMsg::DownloadDXVK),
@ -547,9 +549,9 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
let group = wine.find_group(&config.components.path).unwrap().unwrap(); let group = wine.find_group(&config.components.path).unwrap().unwrap();
// Apply DXVK if we need it // Apply DXVK if we need it
if wine.features.as_ref().unwrap_or(&group.features).need_dxvk { if wine.features_in(&group).unwrap_or_default().need_dxvk {
let wine = wine let wine = wine
.to_wine(Some(config.game.wine.builds.join(&wine.name))) .to_wine(config.components.path, Some(config.game.wine.builds.join(&wine.name)))
.with_loader(WineLoader::Current) .with_loader(WineLoader::Current)
.with_arch(WineArch::Win64) .with_arch(WineArch::Win64)
.with_prefix(config.game.wine.prefix); .with_prefix(config.game.wine.prefix);
@ -562,6 +564,12 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
..InstallParams::default() ..InstallParams::default()
}; };
let WincompatlibWine::Default(wine) = wine else {
sender.input(DownloadComponentsAppMsg::Continue);
return;
};
match wine.install_dxvk(config.game.dxvk.builds.join(&dxvk.name), params) { match wine.install_dxvk(config.game.dxvk.builds.join(&dxvk.name), params) {
// Go to next page // Go to next page
Ok(_) => sender.input(DownloadComponentsAppMsg::Continue), Ok(_) => sender.input(DownloadComponentsAppMsg::Continue),

View file

@ -1187,11 +1187,12 @@ impl SimpleComponent for App {
std::thread::spawn(move || { std::thread::spawn(move || {
let wine = wine let wine = wine
.to_wine(Some(config.game.wine.builds.join(&wine.name))) .to_wine(config.components.path, Some(config.game.wine.builds.join(&wine.name)))
.with_prefix(&config.game.wine.prefix)
.with_loader(WineLoader::Current) .with_loader(WineLoader::Current)
.with_arch(WineArch::Win64); .with_arch(WineArch::Win64);
if let Err(err) = wine.update_prefix(&config.game.wine.prefix) { if let Err(err) = wine.update_prefix::<&str>(None) {
tracing::error!("Failed to create wine prefix"); tracing::error!("Failed to create wine prefix");
sender.input(AppMsg::Toast { sender.input(AppMsg::Toast {

View file

@ -13,6 +13,7 @@ use anime_launcher_sdk::config;
use anime_launcher_sdk::config::launcher::LauncherStyle; use anime_launcher_sdk::config::launcher::LauncherStyle;
use anime_launcher_sdk::anime_game_core::prelude::*; use anime_launcher_sdk::anime_game_core::prelude::*;
use anime_launcher_sdk::components::*; use anime_launcher_sdk::components::*;
use anime_launcher_sdk::components::wine::WincompatlibWine;
use anime_launcher_sdk::wincompatlib::prelude::*; use anime_launcher_sdk::wincompatlib::prelude::*;
use super::main::PreferencesAppMsg; use super::main::PreferencesAppMsg;
@ -624,7 +625,7 @@ impl SimpleAsyncComponent for GeneralApp {
allow_dxvk_selection: match &CONFIG.game.wine.selected { allow_dxvk_selection: match &CONFIG.game.wine.selected {
Some(version) => match wine::Group::find_in(&CONFIG.components.path, version) { Some(version) => match wine::Group::find_in(&CONFIG.components.path, version) {
Ok(Some(group)) => group.features.need_dxvk, Ok(Some(group)) => group.features.unwrap_or_default().need_dxvk,
_ => true _ => true
} }
@ -769,7 +770,9 @@ impl SimpleAsyncComponent for GeneralApp {
.into_iter() .into_iter()
.map(move |version| ( .map(move |version| (
version.clone(), version.clone(),
version.features.unwrap_or_else(|| group.features.clone())) version.features.unwrap_or_else(
|| group.features.to_owned().unwrap_or_default()
))
) )
) )
.collect(); .collect();
@ -826,11 +829,16 @@ impl SimpleAsyncComponent for GeneralApp {
self.selecting_wine_version = true; self.selecting_wine_version = true;
self.allow_dxvk_selection = features.need_dxvk; self.allow_dxvk_selection = features.need_dxvk;
let wine = version.to_wine(Some(config.game.wine.builds.join(&version.name))); let wine = version
.to_wine(&config.components.path, Some(&config.game.wine.builds.join(&version.name)))
.with_prefix(&config.game.wine.prefix)
.with_loader(WineLoader::Current)
.with_arch(WineArch::Win64);
let wine_name = version.name.to_string(); let wine_name = version.name.to_string();
std::thread::spawn(move || { std::thread::spawn(move || {
match wine.update_prefix(&config.game.wine.prefix) { match wine.update_prefix::<&str>(None) {
Ok(_) => { Ok(_) => {
config.game.wine.selected = Some(wine_name); config.game.wine.selected = Some(wine_name);
@ -865,7 +873,13 @@ impl SimpleAsyncComponent for GeneralApp {
self.selecting_dxvk_version = true; self.selecting_dxvk_version = true;
let mut wine = match config.get_selected_wine() { let mut wine = match config.get_selected_wine() {
Ok(Some(version)) => version.to_wine(Some(config.game.wine.builds.join(&version.name))), Ok(Some(version)) => {
match version.to_wine(config.components.path, Some(config.game.wine.builds.join(&version.name))) {
WincompatlibWine::Default(wine) => wine,
WincompatlibWine::Proton(_) => return
}
}
_ => Wine::default() _ => Wine::default()
}; };