aboutsummaryrefslogtreecommitdiff
path: root/src-tauri/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src-tauri/src/main.rs')
-rw-r--r--src-tauri/src/main.rs148
1 files changed, 9 insertions, 139 deletions
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index 3b1504bf..4fcb4b63 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -355,7 +355,14 @@ async fn install_northstar_caller(
})
.unwrap_or("Northstar".to_string());
- match install_northstar(window, &game_path, northstar_package_name, version_number).await {
+ match northstar::install::install_northstar(
+ window,
+ &game_path,
+ northstar_package_name,
+ version_number,
+ )
+ .await
+ {
Ok(_) => Ok(true),
Err(err) => {
log::error!("{}", err);
@@ -535,7 +542,7 @@ async fn get_available_northstar_versions() -> Result<Vec<NorthstarThunderstoreR
// The remaining below was originally in `lib.rs`.
// As this was causing issues it was moved into `main.rs` until being later moved into dedicated modules
-use std::{cell::RefCell, fs, path::Path, time::Instant};
+use std::{fs, path::Path};
use anyhow::{Context, Result};
@@ -582,22 +589,6 @@ pub struct NorthstarServer {
pub player_count: i32,
}
-#[derive(Serialize, Deserialize, Debug, Clone, TS)]
-#[ts(export)]
-pub enum InstallState {
- DOWNLOADING,
- EXTRACTING,
- DONE,
-}
-
-#[derive(Serialize, Deserialize, Debug, Clone, TS)]
-#[ts(export)]
-struct InstallProgress {
- current_downloaded: u64,
- total_size: u64,
- state: InstallState,
-}
-
// I intend to add more linux related stuff to check here, so making a func
// for now tho it only checks `ldd --version`
// - salmon
@@ -713,127 +704,6 @@ fn extract(zip_file: std::fs::File, target: &std::path::Path) -> Result<()> {
Ok(())
}
-/// Copied from `papa` source code and modified
-///Install N* from the provided mod
-///
-///Checks cache, else downloads the latest version
-async fn do_install(
- window: tauri::Window,
- nmod: &thermite::model::ModVersion,
- game_path: &std::path::Path,
-) -> Result<()> {
- let filename = format!("northstar-{}.zip", nmod.version);
- let download_directory = format!("{}/___flightcore-temp-download-dir/", game_path.display());
-
- std::fs::create_dir_all(download_directory.clone())?;
-
- let download_path = format!("{}/{}", download_directory, filename);
- log::info!("Download path: {download_path}");
-
- let last_emit = RefCell::new(Instant::now()); // Keep track of the last time a signal was emitted
- let nfile = thermite::core::manage::download_file_with_progress(
- &nmod.url,
- download_path,
- |delta, current, total| {
- if delta != 0 {
- // Only emit a signal once every 100ms
- // This way we don't bombard the frontend with events on fast download speeds
- let time_since_last_emit = Instant::now().duration_since(*last_emit.borrow());
- if time_since_last_emit >= Duration::from_millis(100) {
- window
- .emit(
- "northstar-install-download-progress",
- InstallProgress {
- current_downloaded: current,
- total_size: total,
- state: InstallState::DOWNLOADING,
- },
- )
- .unwrap();
- *last_emit.borrow_mut() = Instant::now();
- }
- }
- },
- )
- .unwrap();
-
- window
- .emit(
- "northstar-install-download-progress",
- InstallProgress {
- current_downloaded: 0,
- total_size: 0,
- state: InstallState::EXTRACTING,
- },
- )
- .unwrap();
-
- log::info!("Extracting Northstar...");
- extract(nfile, game_path)?;
-
- // Delete old copy
- log::info!("Delete temp folder again");
- std::fs::remove_dir_all(download_directory).unwrap();
-
- log::info!("Done installing Northstar!");
- window
- .emit(
- "northstar-install-download-progress",
- InstallProgress {
- current_downloaded: 0,
- total_size: 0,
- state: InstallState::DONE,
- },
- )
- .unwrap();
-
- Ok(())
-}
-
-pub async fn install_northstar(
- window: tauri::Window,
- game_path: &str,
- northstar_package_name: String,
- version_number: Option<String>,
-) -> Result<String, String> {
- let index = thermite::api::get_package_index().unwrap().to_vec();
- let nmod = index
- .iter()
- .find(|f| f.name.to_lowercase() == northstar_package_name.to_lowercase())
- .ok_or_else(|| panic!("Couldn't find Northstar on thunderstore???"))
- .unwrap();
-
- // Use passed version or latest if no version was passed
- let version = version_number.as_ref().unwrap_or(&nmod.latest);
-
- log::info!("Install path \"{}\"", game_path);
-
- match do_install(
- window,
- nmod.versions.get(version).unwrap(),
- std::path::Path::new(game_path),
- )
- .await
- {
- Ok(_) => (),
- Err(err) => {
- if game_path
- .to_lowercase()
- .contains(&r#"C:\Program Files\"#.to_lowercase())
- // default is `C:\Program Files\EA Games\Titanfall2`
- {
- return Err(
- "Cannot install to default EA App install path, please move Titanfall2 to a different install location.".to_string(),
- );
- } else {
- return Err(err.to_string());
- }
- }
- }
-
- Ok(nmod.latest.clone())
-}
-
/// Returns identifier of host OS FlightCore is running on
pub fn get_host_os() -> String {
env::consts::OS.to_string()