aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src-tauri/Cargo.lock1
-rw-r--r--src-tauri/Cargo.toml2
-rw-r--r--src-tauri/src/lib.rs36
-rw-r--r--src-tauri/src/main.rs17
-rw-r--r--src-ui/src/main.ts5
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 })