updater.rs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. use crate::tauri::process::{ProcessExt, Signal, SystemExt};
  2. fn update() -> Result<(), String> {
  3. let target = tauri::platform::target_triple().map_err(|_| "Could not determine target")?;
  4. let github_release = tauri::updater::github::get_latest_release("jaemk", "self_update")
  5. .map_err(|_| "Could not fetch latest release")?;
  6. match github_release.asset_for(&target) {
  7. Some(github_release_asset) => {
  8. let release = tauri::updater::Release {
  9. version: github_release.tag.trim_start_matches('v').to_string(),
  10. download_url: github_release_asset.download_url,
  11. asset_name: github_release_asset.name,
  12. };
  13. let status = tauri::updater::Update::configure()
  14. .unwrap()
  15. .release(release)
  16. .bin_path_in_archive("github")
  17. .bin_name("app")
  18. .bin_install_path(&tauri::command::command_path("app".to_string()).unwrap())
  19. .show_download_progress(true)
  20. .current_version(env!("CARGO_PKG_VERSION"))
  21. .build()
  22. .unwrap()
  23. .update()
  24. .unwrap();
  25. println!("found release: {}", status.version());
  26. /*let tmp_dir = tauri::dir::with_temp_dir(|dir| {
  27. let file_path = dir.path().join("my-temporary-note.pdf");
  28. let mut tmp_archive = std::fs::File::create(file_path).unwrap();
  29. tauri::http::download(&"https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf".to_string(), &mut tmp_archive, true).unwrap();
  30. });*/
  31. Ok(())
  32. }
  33. None => Err(format!("Could not find release for target {}", target)),
  34. }
  35. }
  36. fn restart_app(app_command: String) -> Result<(), String> {
  37. let mut system = tauri::process::System::new();
  38. let parent_process = tauri::process::get_parent_process(&mut system)
  39. .map_err(|_| "Could not determine parent process")?;
  40. if parent_process.name() == "app" {
  41. parent_process.kill(Signal::Kill);
  42. std::thread::sleep(std::time::Duration::from_secs(1));
  43. std::process::Command::new(app_command)
  44. .spawn()
  45. .map_err(|_| "Could not start app")?;
  46. }
  47. Ok(())
  48. }
  49. fn run_updater() -> Result<(), String> {
  50. let app_command = tauri::command::relative_command("app".to_string())
  51. .map_err(|_| "Could not determine app path")?;
  52. update()?;
  53. restart_app(app_command)?;
  54. Ok(())
  55. }
  56. fn main() {
  57. match run_updater() {
  58. Ok(_) => {}
  59. Err(err) => panic!(err),
  60. };
  61. }