mirror of
https://github.com/tauri-apps/tauri.git
synced 2024-12-21 09:41:34 +03:00
70 lines
2.3 KiB
Rust
70 lines
2.3 KiB
Rust
use crate::tauri::process::{ProcessExt, Signal, SystemExt};
|
|
|
|
fn update() -> Result<(), String> {
|
|
let target = tauri::platform::target_triple().map_err(|_| "Could not determine target")?;
|
|
let github_release = tauri::updater::github::get_latest_release("jaemk", "self_update")
|
|
.map_err(|_| "Could not fetch latest release")?;
|
|
match github_release.asset_for(&target) {
|
|
Some(github_release_asset) => {
|
|
let release = tauri::updater::Release {
|
|
version: github_release.tag.trim_start_matches('v').to_string(),
|
|
download_url: github_release_asset.download_url,
|
|
asset_name: github_release_asset.name,
|
|
};
|
|
|
|
let status = tauri::updater::Update::configure()
|
|
.unwrap()
|
|
.release(release)
|
|
.bin_path_in_archive("github")
|
|
.bin_name("app")
|
|
.bin_install_path(&tauri::command::command_path("app".to_string()).unwrap())
|
|
.show_download_progress(true)
|
|
.current_version(env!("CARGO_PKG_VERSION"))
|
|
.build()
|
|
.unwrap()
|
|
.update()
|
|
.unwrap();
|
|
|
|
println!("found release: {}", status.version());
|
|
|
|
/*let tmp_dir = tauri::dir::with_temp_dir(|dir| {
|
|
let file_path = dir.path().join("my-temporary-note.pdf");
|
|
let mut tmp_archive = std::fs::File::create(file_path).unwrap();
|
|
tauri::http::download(&"https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf".to_string(), &mut tmp_archive, true).unwrap();
|
|
});*/
|
|
|
|
Ok(())
|
|
}
|
|
None => Err(format!("Could not find release for target {}", target)),
|
|
}
|
|
}
|
|
|
|
fn restart_app(app_command: String) -> Result<(), String> {
|
|
let mut system = tauri::process::System::new();
|
|
let parent_process = tauri::process::get_parent_process(&mut system)
|
|
.map_err(|_| "Could not determine parent process")?;
|
|
if parent_process.name() == "app" {
|
|
parent_process.kill(Signal::Kill);
|
|
std::thread::sleep(std::time::Duration::from_secs(1));
|
|
std::process::Command::new(app_command)
|
|
.spawn()
|
|
.map_err(|_| "Could not start app")?;
|
|
}
|
|
Ok(())
|
|
}
|
|
|
|
fn run_updater() -> Result<(), String> {
|
|
let app_command = tauri::command::relative_command("app".to_string())
|
|
.map_err(|_| "Could not determine app path")?;
|
|
update()?;
|
|
restart_app(app_command)?;
|
|
Ok(())
|
|
}
|
|
|
|
fn main() {
|
|
match run_updater() {
|
|
Ok(_) => {}
|
|
Err(err) => panic!(err),
|
|
};
|
|
}
|