mirror of
https://github.com/an-anime-team/an-anime-game-launcher.git
synced 2024-11-29 02:18:46 +03:00
feat(core): implemented new SDK
This commit is contained in:
parent
991b9b337a
commit
4efa6abbb0
6 changed files with 41 additions and 53 deletions
45
Cargo.lock
generated
45
Cargo.lock
generated
|
@ -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"
|
||||||
|
|
|
@ -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
|
|
@ -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),
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue