diff options
author | GeckoEidechse <40122905+GeckoEidechse@users.noreply.github.com> | 2023-01-04 19:12:53 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-04 19:12:53 +0100 |
commit | 6bfc6996e12ba201f52de586c67f3db4a97bc722 (patch) | |
tree | 172a6d6f69fc854723208de63f60a19a9ab87f94 /src-tauri/src/github/release_notes.rs | |
parent | 8d9dc830476170d01f94fe4dc6967b3d4ecdbab0 (diff) | |
download | FlightCore-6bfc6996e12ba201f52de586c67f3db4a97bc722.tar.gz FlightCore-6bfc6996e12ba201f52de586c67f3db4a97bc722.zip |
feat: Show newest version number (#124)
* refactor: Move getting new FC version to own func
* refactor: Deserialize into object
* refactor: Return whole object instead of 2 strings
More readable
* refactor: Rename variable
* refactor: Use fields of object directly
instead of assigning to variables first
* feat: Expose backend func to get newest FC version
and then call it to get newest version number if current is outdated.
This way we can display to the user how far behind their currently
installed version is.
Diffstat (limited to 'src-tauri/src/github/release_notes.rs')
-rw-r--r-- | src-tauri/src/github/release_notes.rs | 38 |
1 files changed, 20 insertions, 18 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); |