Skip to content

Commit 22c084b

Browse files
committed
Improve update check with semver
1 parent 98ce733 commit 22c084b

3 files changed

Lines changed: 16 additions & 18 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ splines = "5.0.0"
5757
clap = { version = "4.5.39", features = ["derive"] }
5858
tokio = { version = "1.45.1", features = ["macros"] }
5959
async-channel = "2.3.1"
60+
semver = "1.0"
6061

6162
[target.'cfg(windows)'.dependencies]
6263
gag = "1.0.0"

src/utils/check_updates.rs

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
use crate::SNIFFNET_LOWERCASE;
21
use crate::utils::formatted_strings::APP_VERSION;
2+
use crate::SNIFFNET_LOWERCASE;
3+
use semver::Version;
34
use serde::Deserialize;
45
use std::time::Duration;
56

@@ -48,23 +49,18 @@ async fn is_newer_release_available(max_retries: u8, seconds_between_retries: u8
4849
.name;
4950
latest_version = latest_version.trim().to_string();
5051

51-
// release name sample: v1.1.2
52-
// TODO: support versions with numbers of more than 1 digit
53-
let latest_version_as_bytes = latest_version.as_bytes();
54-
if latest_version.len() == 6
55-
&& latest_version.starts_with('v')
56-
&& char::from(latest_version_as_bytes[1]).is_numeric()
57-
&& char::from(latest_version_as_bytes[2]).eq(&'.')
58-
&& char::from(latest_version_as_bytes[3]).is_numeric()
59-
&& char::from(latest_version_as_bytes[4]).eq(&'.')
60-
&& char::from(latest_version_as_bytes[5]).is_numeric()
61-
{
62-
latest_version.remove(0);
63-
return if latest_version.gt(&APP_VERSION.to_string()) {
64-
Some(true)
65-
} else {
66-
Some(false)
67-
};
52+
// release name sample: v1.2.3
53+
if let Some(stripped) = latest_version.strip_prefix('v') {
54+
if let (Ok(latest_semver), Ok(current_semver)) = (
55+
Version::parse(stripped),
56+
Version::parse(APP_VERSION),
57+
) {
58+
return if latest_semver > current_semver {
59+
Some(true)
60+
} else {
61+
Some(false)
62+
};
63+
}
6864
}
6965
}
7066
let retries_left = max_retries - 1;

0 commit comments

Comments
 (0)