From 2bbcc3e5afb98953f02759d1f9a72d0a3d3abd53 Mon Sep 17 00:00:00 2001 From: ALEZ-DEV Date: Sun, 25 Aug 2024 17:39:17 +0200 Subject: [PATCH] update rust backend on the flutter side --- babylonia_terminal_launcher/lib/main.dart | 2 - .../native/hub/src/config.rs | 6 +- .../native/hub/src/dependencies.rs | 6 +- .../native/hub/src/dxvk.rs | 11 ++-- .../native/hub/src/fonts.rs | 6 +- .../native/hub/src/game.rs | 56 ++++++++++--------- .../native/hub/src/game_state.rs | 2 +- .../native/hub/src/github.rs | 4 +- .../native/hub/src/proton.rs | 14 ++--- 9 files changed, 50 insertions(+), 57 deletions(-) diff --git a/babylonia_terminal_launcher/lib/main.dart b/babylonia_terminal_launcher/lib/main.dart index e0bb457..549b950 100644 --- a/babylonia_terminal_launcher/lib/main.dart +++ b/babylonia_terminal_launcher/lib/main.dart @@ -12,8 +12,6 @@ void main() async { WidgetsFlutterBinding.ensureInitialized(); MediaKit.ensureInitialized(); - - final SettingsProvider settings = SettingsProvider(); await settings.init(); diff --git a/babylonia_terminal_launcher/native/hub/src/config.rs b/babylonia_terminal_launcher/native/hub/src/config.rs index 9ee76dc..056940a 100644 --- a/babylonia_terminal_launcher/native/hub/src/config.rs +++ b/babylonia_terminal_launcher/native/hub/src/config.rs @@ -1,11 +1,11 @@ -use babylonia_terminal_sdk::game_state::GameState; +use babylonia_terminal_sdk::game_config::GameConfig; use crate::messages::config::{ConfigInput, ConfigOutput}; pub async fn listen_config() { - let mut receiver = ConfigInput::get_dart_signal_receiver(); + let mut receiver = ConfigInput::get_dart_signal_receiver().unwrap(); while let Some(_) = receiver.recv().await { - let config = GameState::get_config().await; + let config = GameConfig::get_config().await; ConfigOutput { config_path: config.config_dir.to_str().unwrap().to_string(), } diff --git a/babylonia_terminal_launcher/native/hub/src/dependencies.rs b/babylonia_terminal_launcher/native/hub/src/dependencies.rs index 897a480..ce51de8 100644 --- a/babylonia_terminal_launcher/native/hub/src/dependencies.rs +++ b/babylonia_terminal_launcher/native/hub/src/dependencies.rs @@ -1,8 +1,6 @@ use std::thread; -use babylonia_terminal_sdk::{ - components::proton_component::ProtonComponent, game_manager::GameManager, game_state::GameState, -}; +use babylonia_terminal_sdk::game_manager::GameManager; use tokio_with_wasm::tokio; use crate::{ @@ -16,7 +14,7 @@ use crate::{ }; pub async fn listen_dependecies_installation() { - let mut receiver = StartDependenciesInstallation::get_dart_signal_receiver(); + let mut receiver = StartDependenciesInstallation::get_dart_signal_receiver().unwrap(); while let Some(_) = receiver.recv().await { let proton = get_proton().await; diff --git a/babylonia_terminal_launcher/native/hub/src/dxvk.rs b/babylonia_terminal_launcher/native/hub/src/dxvk.rs index e082a50..9773cd4 100644 --- a/babylonia_terminal_launcher/native/hub/src/dxvk.rs +++ b/babylonia_terminal_launcher/native/hub/src/dxvk.rs @@ -1,12 +1,9 @@ use std::thread; use babylonia_terminal_sdk::{ - components::{ - dxvk_component::{DXVK_DEV, DXVK_REPO}, - proton_component::ProtonComponent, - }, + components::dxvk_component::{DXVK_DEV, DXVK_REPO}, + game_config::GameConfig, game_manager::GameManager, - game_state::GameState, utils::github_requester::{GithubRelease, GithubRequester}, }; use tokio_with_wasm::tokio; @@ -24,7 +21,7 @@ use crate::{ }; pub async fn listen_dxvk_installation() { - let mut receiver = StartDxvkInstallation::get_dart_signal_receiver(); + let mut receiver = StartDxvkInstallation::get_dart_signal_receiver().unwrap(); while let Some(info) = receiver.recv().await { let releases: Result, _> = GithubInfo::get_github_releases(DXVK_DEV, DXVK_REPO).await; @@ -59,7 +56,7 @@ pub async fn listen_dxvk_installation() { .block_on(async { match GameManager::install_dxvk( &proton, - GameState::get_config().await.config_dir, + GameConfig::get_config().await.config_dir, release_index.unwrap(), Some(DownloadReporter::create()), ) diff --git a/babylonia_terminal_launcher/native/hub/src/fonts.rs b/babylonia_terminal_launcher/native/hub/src/fonts.rs index 6248ce8..20101d3 100644 --- a/babylonia_terminal_launcher/native/hub/src/fonts.rs +++ b/babylonia_terminal_launcher/native/hub/src/fonts.rs @@ -1,8 +1,6 @@ use std::thread; -use babylonia_terminal_sdk::{ - components::proton_component::ProtonComponent, game_manager::GameManager, game_state::GameState, -}; +use babylonia_terminal_sdk::game_manager::GameManager; use tokio_with_wasm::tokio; use crate::{ @@ -16,7 +14,7 @@ use crate::{ }; pub async fn listen_fonts_installation() { - let mut receiver = StartFontsInstallation::get_dart_signal_receiver(); + let mut receiver = StartFontsInstallation::get_dart_signal_receiver().unwrap(); while let Some(_) = receiver.recv().await { let proton = get_proton().await; diff --git a/babylonia_terminal_launcher/native/hub/src/game.rs b/babylonia_terminal_launcher/native/hub/src/game.rs index ce53786..bbce106 100644 --- a/babylonia_terminal_launcher/native/hub/src/game.rs +++ b/babylonia_terminal_launcher/native/hub/src/game.rs @@ -1,8 +1,6 @@ use std::thread; -use babylonia_terminal_sdk::{ - components::proton_component::ProtonComponent, game_manager::GameManager, game_state::GameState, -}; +use babylonia_terminal_sdk::{game_config::GameConfig, game_manager::GameManager}; use rinf::debug_print; use tokio_with_wasm::tokio; @@ -10,36 +8,44 @@ use crate::{ messages::{ error::ReportError, steps::game::{ - GameInstallationProgress, GameStopped, NotifyGameStartDownloading, - NotifyGameStartPatching, NotifyGameSuccessfullyInstalled, RunGame, - StartGameInstallation, + GameInstallationProgress, GameStopped, NotifyGameStartPatching, + NotifyGameSuccessfullyInstalled, RunGame, StartGameInstallation, }, }, proton::get_proton, }; pub async fn listen_game_running() { - let mut receiver = RunGame::get_dart_signal_receiver(); - while let Some(_) = receiver.recv().await { - let proton = get_proton().await; - let game_dir = GameState::get_game_dir().await; - if game_dir.is_none() { - ReportError { - error_message: "Failed to start game, the game directory was not found".to_string(), - } - .send_signal_to_dart(); - GameStopped {}.send_signal_to_dart(); - continue; - } + let mut receiver = RunGame::get_dart_signal_receiver().unwrap(); + thread::spawn(move || { + tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .unwrap() + .block_on(async { + while let Some(_) = receiver.recv().await { + let proton = get_proton().await; + let game_dir = GameConfig::get_game_dir().await; + if game_dir.is_none() { + ReportError { + error_message: "Failed to start game, the game directory was not found" + .to_string(), + } + .send_signal_to_dart(); + GameStopped {}.send_signal_to_dart(); + continue; + } - GameManager::start_game(&proton, game_dir.unwrap()).await; + GameManager::start_game(&proton, game_dir.unwrap(), None, false).await; - GameStopped {}.send_signal_to_dart(); - } + GameStopped {}.send_signal_to_dart(); + } + }) + }); } pub async fn listen_game_installation() { - let mut receiver = StartGameInstallation::get_dart_signal_receiver(); + let mut receiver = StartGameInstallation::get_dart_signal_receiver().unwrap(); while let Some(info) = receiver.recv().await { thread::spawn(move || { debug_print!("start downloading game..."); @@ -48,9 +54,9 @@ pub async fn listen_game_installation() { .build() .unwrap() .block_on(async { - if GameState::get_game_dir().await.is_none() { + if GameConfig::get_game_dir().await.is_none() { if let Err(e) = - GameState::set_game_dir(Some(GameState::get_config_directory().await)) + GameConfig::set_game_dir(Some(GameConfig::get_config_directory().await)) .await { ReportError { @@ -69,7 +75,7 @@ pub async fn listen_game_installation() { } } - let game_dir = GameState::get_game_dir().await; + let game_dir = GameConfig::get_game_dir().await; if game_dir.is_none() { ReportError { error_message: "Failed to get the game directory".to_string(), diff --git a/babylonia_terminal_launcher/native/hub/src/game_state.rs b/babylonia_terminal_launcher/native/hub/src/game_state.rs index ecd7268..94a6852 100644 --- a/babylonia_terminal_launcher/native/hub/src/game_state.rs +++ b/babylonia_terminal_launcher/native/hub/src/game_state.rs @@ -24,7 +24,7 @@ impl GameStateMessage { } pub async fn listen_game_state() { - let mut receiver = AskGameState::get_dart_signal_receiver(); + let mut receiver = AskGameState::get_dart_signal_receiver().unwrap(); while let Some(_) = receiver.recv().await { let result_state = GameState::get_current_state().await; match result_state { diff --git a/babylonia_terminal_launcher/native/hub/src/github.rs b/babylonia_terminal_launcher/native/hub/src/github.rs index 22aa81a..d4fad5e 100644 --- a/babylonia_terminal_launcher/native/hub/src/github.rs +++ b/babylonia_terminal_launcher/native/hub/src/github.rs @@ -21,7 +21,7 @@ impl GithubRequester for GithubInfo { } pub async fn listen_proton_version() { - let mut receiver = AskProtonVersions::get_dart_signal_receiver(); + let mut receiver = AskProtonVersions::get_dart_signal_receiver().unwrap(); while let Some(_) = receiver.recv().await { let releases: Result, _> = GithubInfo::get_github_releases(PROTON_DEV, PROTON_REPO).await; @@ -39,7 +39,7 @@ pub async fn listen_proton_version() { } pub async fn listen_dxvk_version() { - let mut receiver = AskDxvkVersions::get_dart_signal_receiver(); + let mut receiver = AskDxvkVersions::get_dart_signal_receiver().unwrap(); while let Some(_) = receiver.recv().await { let releases: Result, _> = GithubInfo::get_github_releases(DXVK_DEV, DXVK_REPO).await; diff --git a/babylonia_terminal_launcher/native/hub/src/proton.rs b/babylonia_terminal_launcher/native/hub/src/proton.rs index e135e3f..debedfa 100644 --- a/babylonia_terminal_launcher/native/hub/src/proton.rs +++ b/babylonia_terminal_launcher/native/hub/src/proton.rs @@ -1,15 +1,11 @@ use std::thread; use babylonia_terminal_sdk::{ - components::{ - component_downloader::ComponentDownloader, - proton_component::{ProtonComponent, PROTON_DEV, PROTON_REPO}, - }, + components::proton_component::{ProtonComponent, PROTON_DEV, PROTON_REPO}, + game_config::GameConfig, game_manager::GameManager, - game_state::GameState, utils::github_requester::{GithubRelease, GithubRequester}, }; -use rinf::debug_print; use tokio_with_wasm::tokio::{self, sync::OnceCell}; use wincompatlib::wine::bundle::proton::Proton; @@ -29,7 +25,7 @@ static PROTON: OnceCell = OnceCell::const_new(); pub async fn get_proton() -> Proton { PROTON .get_or_init(|| async { - let proton_component = ProtonComponent::new(GameState::get_config().await.config_dir); + let proton_component = ProtonComponent::new(GameConfig::get_config().await.config_dir); let proton = proton_component.init_proton(); if let Err(ref e) = proton { ReportError { @@ -44,7 +40,7 @@ pub async fn get_proton() -> Proton { } pub async fn listen_proton_installation() { - let mut receiver = StartProtonInstallation::get_dart_signal_receiver(); + let mut receiver = StartProtonInstallation::get_dart_signal_receiver().unwrap(); while let Some(info) = receiver.recv().await { let releases: Result, _> = GithubInfo::get_github_releases(PROTON_DEV, PROTON_REPO).await; @@ -76,7 +72,7 @@ pub async fn listen_proton_installation() { .unwrap() .block_on(async { match GameManager::install_wine( - GameState::get_config().await.config_dir, + GameConfig::get_config().await.config_dir, release_index.unwrap(), Some(DownloadReporter::create()), )