aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src-tauri/src/github/release_notes.rs38
-rw-r--r--src-tauri/src/main.rs5
-rw-r--r--src-vue/src/plugins/store.ts4
-rw-r--r--src-vue/src/utils/FlightCoreVersion.d.ts5
4 files changed, 32 insertions, 20 deletions
diff --git a/src-tauri/src/github/release_notes.rs b/src-tauri/src/github/release_notes.rs
index 803132e2..a1d174fa 100644
--- a/src-tauri/src/github/release_notes.rs
+++ b/src-tauri/src/github/release_notes.rs
@@ -8,6 +8,12 @@ pub struct ReleaseInfo {
pub body: String,
}
+#[derive(Serialize, Deserialize, Debug, Clone)]
+pub struct FlightCoreVersion {
+ tag_name: String,
+ published_at: String,
+}
+
// Fetches repo release API and returns response as string
async fn fetch_github_releases_api(url: &str) -> Result<String, String> {
println!("Fetching releases notes from GitHub API");
@@ -27,24 +33,26 @@ async fn fetch_github_releases_api(url: &str) -> Result<String, String> {
Ok(res)
}
-/// Checks if installed FlightCore version is up-to-date
-/// false -> FlightCore install is up-to-date
-/// true -> FlightCore install is outdated
-pub async fn check_is_flightcore_outdated() -> Result<bool, String> {
+/// Gets newest FlighCore version from GitHub
+#[tauri::command]
+pub async fn get_newest_flightcore_version() -> Result<FlightCoreVersion, String> {
// Get newest version number from GitHub API
println!("Checking GitHub API");
let url = "https://api.github.com/repos/R2NorthstarTools/FlightCore/releases/latest";
let res = fetch_github_releases_api(url).await?;
- let json_response: serde_json::Value =
+ let flightcore_version: FlightCoreVersion =
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();
+ Ok(flightcore_version)
+}
+
+/// Checks if installed FlightCore version is up-to-date
+/// false -> FlightCore install is up-to-date
+/// true -> FlightCore install is outdated
+pub async fn check_is_flightcore_outdated() -> Result<bool, String> {
+ let newest_flightcore_release = get_newest_flightcore_version().await?;
// Get version of installed FlightCore...
let version = env!("CARGO_PKG_VERSION");
@@ -52,16 +60,10 @@ pub async fn check_is_flightcore_outdated() -> Result<bool, String> {
let version = format!("v{}", version);
// TODO: This shouldn't be a string compare but promper semver compare
- let is_outdated = version != newest_release_version;
+ let is_outdated = version != newest_flightcore_release.tag_name;
// If outdated, check how new the update is
if is_outdated {
- // Extract release date from JSON
- let release_date = json_response
- .get("published_at")
- .and_then(|value| value.as_str())
- .unwrap();
-
// Time to wait (2h) h * m * s
let threshold_seconds = 2 * 60 * 60;
@@ -69,7 +71,7 @@ pub async fn check_is_flightcore_outdated() -> Result<bool, String> {
let current_time = chrono::Utc::now();
// Get latest release time from GitHub API response
- let result = chrono::DateTime::parse_from_rfc3339(release_date)
+ let result = chrono::DateTime::parse_from_rfc3339(&newest_flightcore_release.published_at)
.unwrap()
.with_timezone(&chrono::Utc);
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index e8912d60..7d08e72e 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -12,7 +12,9 @@ use std::{
use app::*;
mod github;
-use github::release_notes::{check_is_flightcore_outdated, get_northstar_release_notes};
+use github::release_notes::{
+ check_is_flightcore_outdated, get_newest_flightcore_version, get_northstar_release_notes,
+};
mod repair_and_verify;
use repair_and_verify::{
@@ -101,6 +103,7 @@ fn main() {
get_installed_mods_caller,
install_mod_caller,
clean_up_download_folder_caller,
+ get_newest_flightcore_version,
])
.run(tauri::generate_context!())
.expect("error while running tauri application");
diff --git a/src-vue/src/plugins/store.ts b/src-vue/src/plugins/store.ts
index c22479e0..3db85e64 100644
--- a/src-vue/src/plugins/store.ts
+++ b/src-vue/src/plugins/store.ts
@@ -5,6 +5,7 @@ import { InstallType } from "../utils/InstallType";
import { invoke } from "@tauri-apps/api";
import { GameInstall } from "../utils/GameInstall";
import { ReleaseCanal } from "../utils/ReleaseCanal";
+import { FlightCoreVersion } from "../utils/FlightCoreVersion";
import { ElNotification, NotificationHandle } from 'element-plus';
import { NorthstarState } from '../utils/NorthstarState';
import { appDir } from '@tauri-apps/api/path';
@@ -377,9 +378,10 @@ async function _checkForFlightCoreUpdates(state: FlightCoreStore) {
let flightcore_is_outdated = await invoke("check_is_flightcore_outdated_caller") as boolean;
if (flightcore_is_outdated) {
+ let newest_flightcore_version = await invoke("get_newest_flightcore_version") as FlightCoreVersion;
ElNotification({
title: 'FlightCore outdated!',
- message: `Please update FlightCore. Running outdated version ${state.flightcore_version}`,
+ message: `Please update FlightCore.\nRunning outdated version ${state.flightcore_version}.\nNewest is ${newest_flightcore_version.tag_name}!`,
type: 'warning',
position: 'bottom-right',
duration: 0 // Duration `0` means the notification will not auto-vanish
diff --git a/src-vue/src/utils/FlightCoreVersion.d.ts b/src-vue/src/utils/FlightCoreVersion.d.ts
new file mode 100644
index 00000000..2516bf25
--- /dev/null
+++ b/src-vue/src/utils/FlightCoreVersion.d.ts
@@ -0,0 +1,5 @@
+// derived from release_notes.rs
+export interface FlightCoreVersion {
+ tag_name: string,
+ published_at: string,
+}