浏览代码

fix: Open File (#56)

Pylogmon 1 年之前
父节点
当前提交
a241b04d99
共有 2 个文件被更改,包括 15 次插入9 次删除
  1. 2 2
      src-tauri/src/cmds.rs
  2. 13 7
      src-tauri/src/utils/help.rs

+ 2 - 2
src-tauri/src/cmds.rs

@@ -85,7 +85,7 @@ pub fn patch_profile(index: String, profile: PrfItem) -> CmdResult {
 }
 
 #[tauri::command]
-pub fn view_profile(index: String) -> CmdResult {
+pub fn view_profile(app_handle: tauri::AppHandle, index: String) -> CmdResult {
     let file = {
         wrap_err!(Config::profiles().latest().get_item(&index))?
             .file
@@ -98,7 +98,7 @@ pub fn view_profile(index: String) -> CmdResult {
         ret_err!("the file not found");
     }
 
-    wrap_err!(help::open_file(path))
+    wrap_err!(help::open_file(app_handle, path))
 }
 
 #[tauri::command]

+ 13 - 7
src-tauri/src/utils/help.rs

@@ -3,6 +3,10 @@ use nanoid::nanoid;
 use serde::{de::DeserializeOwned, Serialize};
 use serde_yaml::{Mapping, Value};
 use std::{fs, path::PathBuf, str::FromStr};
+use tauri::{
+    api::shell::{open, Program},
+    Manager,
+};
 
 /// read data from yaml as struct T
 pub fn read_yaml<T: DeserializeOwned>(path: &PathBuf) -> Result<T> {
@@ -81,18 +85,20 @@ pub fn parse_str<T: FromStr>(target: &str, key: &str) -> Option<T> {
 
 /// open file
 /// use vscode by default
-pub fn open_file(path: PathBuf) -> Result<()> {
+pub fn open_file(app: tauri::AppHandle, path: PathBuf) -> Result<()> {
     #[cfg(target_os = "macos")]
     let code = "Visual Studio Code";
     #[cfg(not(target_os = "macos"))]
     let code = "code";
 
-    // use vscode first
-    if let Err(err) = open::with(&path, code) {
-        log::error!(target: "app", "failed to open file with VScode `{err}`");
-        // default open
-        open::that(path)?;
-    }
+    let _ = match Program::from_str(code) {
+        Ok(code) => open(&app.shell_scope(), &path.to_string_lossy(), Some(code)),
+        Err(err) => {
+            log::error!(target: "app", "Can't find VScode `{err}`");
+            // default open
+            open(&app.shell_scope(), &path.to_string_lossy(), None)
+        }
+    };
 
     Ok(())
 }