Merge pull request #891 from aguacero7/improve-versionning

Improve update check with semver
This commit is contained in:
Giuliano Bellini
2025-09-18 15:00:39 +02:00
committed by GitHub
6 changed files with 29 additions and 25 deletions

View File

@@ -3,6 +3,7 @@ # Changelog
All Sniffnet releases with the relative changes are documented in this file.
## [UNRELEASED]
- Improve update checks using `semver` ([#891](https://github.com/GyulyVGC/sniffnet/pull/891))
- Fix AppImage error with `libpcap` dependency ([#971](https://github.com/GyulyVGC/sniffnet/pull/971))
## [1.4.1] - 2025-09-13

5
Cargo.lock generated
View File

@@ -4488,9 +4488,9 @@ checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749"
[[package]]
name = "semver"
version = "1.0.26"
version = "1.0.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
[[package]]
name = "serde"
@@ -4745,6 +4745,7 @@ dependencies = [
"rodio",
"rstest",
"rustrict",
"semver",
"serde",
"serde_test",
"serial_test",

View File

@@ -57,6 +57,7 @@ splines = "5.0.0"
clap = { version = "4.5.47", features = ["derive"] }
tokio = { version = "1.47.1", features = ["macros"] }
async-channel = "2.5.0"
semver = "1.0.27"
[target.'cfg(windows)'.dependencies]
gag = "1.0.0"

View File

@@ -27,16 +27,21 @@ pub fn footer<'a>(
font: Font,
font_footer: Font,
newer_release_available: Option<bool>,
pulse: u8,
dots_pulse: &(String, u8),
) -> Container<'a, Message, StyleType> {
if thumbnail {
return thumbnail_footer();
}
let release_details_row =
get_release_details(language, font, font_footer, newer_release_available);
let release_details_row = get_release_details(
language,
font,
font_footer,
newer_release_available,
&dots_pulse.0,
);
let heart_size = match pulse {
let heart_size = match dots_pulse.1 {
1 => 17.0,
2 => 20.0,
_ => 14.0,
@@ -203,6 +208,7 @@ fn get_release_details<'a>(
font: Font,
font_footer: Font,
newer_release_available: Option<bool>,
dots: &str,
) -> Row<'a, Message, StyleType> {
let mut ret_val = Row::new()
.align_y(Alignment::Center)
@@ -216,11 +222,15 @@ fn get_release_details<'a>(
if let Some(boolean_response) = newer_release_available {
if boolean_response {
// a newer release is available on GitHub
let icon_size = match dots.len() {
2 => 16.0,
3 => 18.0,
_ => 14.0,
};
let button = button(
Icon::Update
.to_text()
.class(TextType::Danger)
.size(18)
.size(icon_size)
.align_x(Alignment::Center)
.align_y(Alignment::Center)
.line_height(LineHeight::Relative(0.8)),

View File

@@ -583,7 +583,7 @@ pub fn view(&self) -> Element<'_, Message, StyleType> {
font,
font_headers,
self.newer_release_available,
self.dots_pulse.1,
&self.dots_pulse,
);
let content: Element<Message, StyleType> =

View File

@@ -1,5 +1,6 @@
use crate::SNIFFNET_LOWERCASE;
use crate::utils::formatted_strings::APP_VERSION;
use semver::Version;
use serde::Deserialize;
use std::time::Duration;
@@ -48,23 +49,13 @@ async fn is_newer_release_available(max_retries: u8, seconds_between_retries: u8
.name;
latest_version = latest_version.trim().to_string();
// release name sample: v1.1.2
// TODO: support versions with numbers of more than 1 digit
let latest_version_as_bytes = latest_version.as_bytes();
if latest_version.len() == 6
&& latest_version.starts_with('v')
&& char::from(latest_version_as_bytes[1]).is_numeric()
&& char::from(latest_version_as_bytes[2]).eq(&'.')
&& char::from(latest_version_as_bytes[3]).is_numeric()
&& char::from(latest_version_as_bytes[4]).eq(&'.')
&& char::from(latest_version_as_bytes[5]).is_numeric()
// release name sample: v1.2.3
let stripped = latest_version.trim_start_matches('v');
if let (Ok(latest_semver), Ok(current_semver)) =
(Version::parse(stripped), Version::parse(APP_VERSION))
{
latest_version.remove(0);
return if latest_version.gt(&APP_VERSION.to_string()) {
Some(true)
} else {
Some(false)
};
return Some(latest_semver > current_semver);
}
}
let retries_left = max_retries - 1;