1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use crate::errors::XmasterError;
pub async fn execute(check: bool) -> Result<(), XmasterError> {
let current = env!("CARGO_PKG_VERSION");
let status = self_update::backends::github::Update::configure()
.repo_owner("199-biotechnologies")
.repo_name("xmaster")
.bin_name("xmaster")
.current_version(current)
.build()
.map_err(|e| XmasterError::Config(format!("Update check failed: {e}")))?;
if check {
let latest = status
.get_latest_release()
.map_err(|e| XmasterError::Config(format!("Failed to check for updates: {e}")))?;
let latest_ver = latest.version.trim_start_matches('v');
if latest_ver == current {
println!("Already up to date (v{current})");
} else {
println!("Update available: v{current} -> v{latest_ver}");
println!("Run `xmaster update` to install");
}
} else {
let result = status
.update()
.map_err(|e| XmasterError::Config(format!("Update failed: {e}")))?;
let new_ver = result.version().trim_start_matches('v');
if new_ver == current {
println!("Already up to date (v{current})");
} else {
println!("Updated: v{current} -> v{new_ver}");
}
}
Ok(())
}