|
1 | | -use crate::SNIFFNET_LOWERCASE; |
2 | 1 | use crate::utils::formatted_strings::APP_VERSION; |
| 2 | +use crate::SNIFFNET_LOWERCASE; |
| 3 | +use semver::Version; |
3 | 4 | use serde::Deserialize; |
4 | 5 | use std::time::Duration; |
5 | 6 |
|
@@ -48,23 +49,18 @@ async fn is_newer_release_available(max_retries: u8, seconds_between_retries: u8 |
48 | 49 | .name; |
49 | 50 | latest_version = latest_version.trim().to_string(); |
50 | 51 |
|
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 | + } |
68 | 64 | } |
69 | 65 | } |
70 | 66 | let retries_left = max_retries - 1; |
|
0 commit comments