Skip to content

Commit 69224fb

Browse files
authored
Merge pull request #891 from aguacero7/improve-versionning
Improve update check with semver
2 parents c8595f3 + fbd9fd8 commit 69224fb

6 files changed

Lines changed: 29 additions & 25 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
All Sniffnet releases with the relative changes are documented in this file.
44

55
## [UNRELEASED]
6+
- Improve update checks using `semver` ([#891](https://github.com/GyulyVGC/sniffnet/pull/891))
67
- Fix AppImage error with `libpcap` dependency ([#971](https://github.com/GyulyVGC/sniffnet/pull/971))
78

89
## [1.4.1] - 2025-09-13

Cargo.lock

Lines changed: 3 additions & 2 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.47", features = ["derive"] }
5858
tokio = { version = "1.47.1", features = ["macros"] }
5959
async-channel = "2.5.0"
60+
semver = "1.0.27"
6061

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

src/gui/components/footer.rs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,21 @@ pub fn footer<'a>(
2727
font: Font,
2828
font_footer: Font,
2929
newer_release_available: Option<bool>,
30-
pulse: u8,
30+
dots_pulse: &(String, u8),
3131
) -> Container<'a, Message, StyleType> {
3232
if thumbnail {
3333
return thumbnail_footer();
3434
}
3535

36-
let release_details_row =
37-
get_release_details(language, font, font_footer, newer_release_available);
36+
let release_details_row = get_release_details(
37+
language,
38+
font,
39+
font_footer,
40+
newer_release_available,
41+
&dots_pulse.0,
42+
);
3843

39-
let heart_size = match pulse {
44+
let heart_size = match dots_pulse.1 {
4045
1 => 17.0,
4146
2 => 20.0,
4247
_ => 14.0,
@@ -203,6 +208,7 @@ fn get_release_details<'a>(
203208
font: Font,
204209
font_footer: Font,
205210
newer_release_available: Option<bool>,
211+
dots: &str,
206212
) -> Row<'a, Message, StyleType> {
207213
let mut ret_val = Row::new()
208214
.align_y(Alignment::Center)
@@ -216,11 +222,15 @@ fn get_release_details<'a>(
216222
if let Some(boolean_response) = newer_release_available {
217223
if boolean_response {
218224
// a newer release is available on GitHub
225+
let icon_size = match dots.len() {
226+
2 => 16.0,
227+
3 => 18.0,
228+
_ => 14.0,
229+
};
219230
let button = button(
220231
Icon::Update
221232
.to_text()
222-
.class(TextType::Danger)
223-
.size(18)
233+
.size(icon_size)
224234
.align_x(Alignment::Center)
225235
.align_y(Alignment::Center)
226236
.line_height(LineHeight::Relative(0.8)),

src/gui/sniffer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,7 @@ impl Sniffer {
583583
font,
584584
font_headers,
585585
self.newer_release_available,
586-
self.dots_pulse.1,
586+
&self.dots_pulse,
587587
);
588588

589589
let content: Element<Message, StyleType> =

src/utils/check_updates.rs

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

@@ -48,23 +49,13 @@ 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()
52+
// release name sample: v1.2.3
53+
let stripped = latest_version.trim_start_matches('v');
54+
55+
if let (Ok(latest_semver), Ok(current_semver)) =
56+
(Version::parse(stripped), Version::parse(APP_VERSION))
6157
{
62-
latest_version.remove(0);
63-
return if latest_version.gt(&APP_VERSION.to_string()) {
64-
Some(true)
65-
} else {
66-
Some(false)
67-
};
58+
return Some(latest_semver > current_semver);
6859
}
6960
}
7061
let retries_left = max_retries - 1;

0 commit comments

Comments
 (0)