use crate::{
libs::{daemon, messages::Message, update::Updater},
msg_info, msg_success,
};
use anyhow::Result;
pub async fn cmd() -> Result<()> {
let watcher_was_running = daemon::is_running();
if watcher_was_running {
msg_info!(Message::WatcherStoppingForUpdate);
daemon::stop()?;
}
let mut updater = Updater::new()?;
let needs_update = updater.check_for_latest_release().await?;
if !needs_update {
msg_info!(Message::NoUpdateRequired);
if watcher_was_running {
msg_info!(Message::WatcherRestartingAfterUpdate);
daemon::spawn()?;
}
return Ok(());
}
updater.perform_update().await?;
if watcher_was_running {
msg_info!(Message::WatcherRestartingAfterUpdate);
daemon::spawn()?;
}
msg_success!(Message::UpdateCompleted {
app_name: updater.name,
version: updater.latest_version.as_deref().unwrap_or("unknown").to_string()
});
Ok(())
}