aboutsummaryrefslogtreecommitdiff
path: root/src-tauri/src/github/release_notes.rs
diff options
context:
space:
mode:
authorGeckoEidechse <40122905+GeckoEidechse@users.noreply.github.com>2023-01-04 19:12:53 +0100
committerGitHub <noreply@github.com>2023-01-04 19:12:53 +0100
commit6bfc6996e12ba201f52de586c67f3db4a97bc722 (patch)
tree172a6d6f69fc854723208de63f60a19a9ab87f94 /src-tauri/src/github/release_notes.rs
parent8d9dc830476170d01f94fe4dc6967b3d4ecdbab0 (diff)
downloadFlightCore-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.rs38
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);