Skip to main content

tnnl/
update.rs

1use std::time::Duration;
2
3const CURRENT: &str = env!("CARGO_PKG_VERSION");
4const API_URL: &str = "https://api.github.com/repos/jbingen/tnnl/releases/latest";
5
6pub fn check_in_background() {
7    tokio::spawn(async {
8        if let Some(latest) = fetch_latest().await {
9            let latest = latest.trim_start_matches('v');
10            if latest != CURRENT {
11                crate::log::update_available(latest);
12            }
13        }
14    });
15}
16
17async fn fetch_latest() -> Option<String> {
18    let client = reqwest::Client::builder()
19        .timeout(Duration::from_secs(4))
20        .user_agent(format!("tnnl/{CURRENT}"))
21        .build()
22        .ok()?;
23
24    let resp: serde_json::Value = client.get(API_URL).send().await.ok()?.json().await.ok()?;
25
26    resp["tag_name"].as_str().map(|s| s.to_owned())
27}