diff options
-rw-r--r-- | src-tauri/Cargo.lock | 1 | ||||
-rw-r--r-- | src-tauri/Cargo.toml | 2 | ||||
-rw-r--r-- | src-tauri/src/lib.rs | 36 | ||||
-rw-r--r-- | src-tauri/src/main.rs | 17 | ||||
-rw-r--r-- | src-ui/src/main.ts | 5 |
5 files changed, 56 insertions, 5 deletions
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index b6face73..5fa5731d 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -82,6 +82,7 @@ dependencies = [ "libthermite", "powershell_script", "regex", + "reqwest", "sentry", "serde", "serde_json", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index d2fb7171..39fd946f 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -34,6 +34,8 @@ powershell_script = "1.0.4" regex = "1.6.0" # Read out running application process names sysinfo = "0.26.2" +# HTTP requests +reqwest = { version = "0.11", features = ["blocking"] } [features] # by default Tauri runs in production mode diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index c74579d7..6428ce2e 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -342,3 +342,39 @@ pub fn convert_release_candidate_number(version_number: String) -> String { // Doesn't work for larger numbers, e.g. `v1.9.2-rc11` -> `v1.9.2011` (should be `v1.9.211`) version_number.replace("-rc", "0") } + +/// Checks if installed FlightCore version is up-to-date +/// false -> FlightCore install is up-to-date +/// true -> FlightCore install is outdated +pub fn check_is_flightcore_outdated() -> Result<bool, String> { + // Get newest version number from GitHub API + println!("Checking GitHub API"); + let url = "https://api.github.com/repos/GeckoEidechse/FlightCore/releases/latest"; + let user_agent = "GeckoEidechse/FlightCore"; + let client = reqwest::blocking::Client::new(); + let res = client + .get(url) + .header(reqwest::header::USER_AGENT, user_agent) + .send() + .unwrap() + .text() + .unwrap(); + + let json_response: serde_json::Value = + serde_json::from_str(&res).expect("JSON was not well-formatted"); + println!("Done checking GitHub API"); + + // Extract version number from JSON + let newest_release_version = json_response + .get("tag_name") + .and_then(|value| value.as_str()) + .unwrap(); + + // Get version of installed FlightCore... + let version = env!("CARGO_PKG_VERSION"); + // ...and format it + let version = format!("v{}", version); + + // TODO: This shouldn't be a string compare but promper semver compare + Ok(version != newest_release_version) +} diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index a59e24e0..20ad4716 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -10,9 +10,9 @@ use std::{ }; use app::{ - check_is_valid_game_path, check_origin_running, convert_release_candidate_number, - find_game_install_location, get_host_os, get_northstar_version_number, install_northstar, - launch_northstar, GameInstall, + check_is_flightcore_outdated, check_is_valid_game_path, check_origin_running, + convert_release_candidate_number, find_game_install_location, get_host_os, + get_northstar_version_number, install_northstar, launch_northstar, GameInstall, }; use tauri::{Manager, State}; use tokio::time::sleep; @@ -66,7 +66,8 @@ fn main() { get_host_os_caller, install_northstar_caller, update_northstar_caller, - launch_northstar_caller + launch_northstar_caller, + check_is_flightcore_outdated_caller ]) .run(tauri::generate_context!()) .expect("error while running tauri application"); @@ -171,6 +172,14 @@ async fn check_is_northstar_outdated( } #[tauri::command] +/// Checks if installed FlightCore version is up-to-date +/// false -> FlightCore install is up-to-date +/// true -> FlightCore install is outdated +fn check_is_flightcore_outdated_caller() -> Result<bool, String> { + check_is_flightcore_outdated() +} + +#[tauri::command] /// Checks if is valid Titanfall2 install based on certain conditions fn verify_install_location(game_path: String) -> bool { match check_is_valid_game_path(&game_path) { diff --git a/src-ui/src/main.ts b/src-ui/src/main.ts index ba45b20c..3841d3a0 100644 --- a/src-ui/src/main.ts +++ b/src-ui/src/main.ts @@ -232,9 +232,12 @@ document.addEventListener("DOMContentLoaded", async function () { // Run the following on initial page load // Get version number let version_number_string = await invoke("get_version_number") as string; + // Check if up-to-date + let flightcore_is_outdated = await invoke("check_is_flightcore_outdated_caller") as boolean; + let outdated_string = flightcore_is_outdated ? " (outdated, please update FlightCore)" : ""; // Get host OS let host_os_string = await invoke("get_host_os_caller") as string; - versionNumberHolderEl.textContent = `${version_number_string} (${host_os_string})`; + versionNumberHolderEl.textContent = `${version_number_string} (${host_os_string})${outdated_string}`; // Get install location await invoke("find_game_install_location_caller", { gamePath: globalState.gamepath }) |