diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index d68dcc9d..f96d2165 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -10,6 +10,7 @@ dependencies = [ "serde_json", "tauri", "tauri-build", + "tauri-plugin-deep-link", "tauri-plugin-sql", ] @@ -800,6 +801,15 @@ dependencies = [ "subtle", ] +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + [[package]] name = "dirs-next" version = "2.0.0" @@ -810,6 +820,18 @@ dependencies = [ "dirs-sys-next", ] +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + [[package]] name = "dirs-sys-next" version = "0.1.2" @@ -1786,6 +1808,19 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "interprocess" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81f2533f3be42fffe3b5e63b71aeca416c1c3bc33e4e27be018521e76b1f38fb" +dependencies = [ + "cfg-if", + "libc", + "rustc_version", + "to_method", + "winapi", +] + [[package]] name = "io-lifetimes" version = "1.0.11" @@ -2321,6 +2356,28 @@ dependencies = [ "objc_id", ] +[[package]] +name = "objc-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99e1d07c6eab1ce8b6382b8e3c7246fe117ff3f8b34be065f5ebace6749fe845" + +[[package]] +name = "objc2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d" +dependencies = [ + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-encode" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" + [[package]] name = "objc_exception" version = "0.1.2" @@ -2408,6 +2465,12 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "ordered-stream" version = "0.2.0" @@ -4081,6 +4144,22 @@ dependencies = [ "tauri-utils", ] +[[package]] +name = "tauri-plugin-deep-link" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4536f5f6602e8fdfaa7b3b185076c2a0704f8eb7015f4e58461eb483ec3ed1f8" +dependencies = [ + "dirs", + "interprocess", + "log", + "objc2", + "once_cell", + "tauri-utils", + "windows-sys 0.48.0", + "winreg 0.50.0", +] + [[package]] name = "tauri-plugin-sql" version = "0.0.0" @@ -4290,6 +4369,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "to_method" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c4ceeeca15c8384bbc3e011dbd8fccb7f068a440b752b7d9b32ceb0ca0e2e8" + [[package]] name = "tokio" version = "1.32.0" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index e4b11827..f562e15f 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -16,6 +16,7 @@ tauri-build = { version = "1.4", features = [] } tauri = { version = "1.4", features = ["api-all"] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" +tauri-plugin-deep-link="0.1.2" [dependencies.tauri-plugin-sql] git = "https://github.com/tauri-apps/plugins-workspace" diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index a3627daa..ab088030 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -3,7 +3,21 @@ use tauri::Manager; +#[tauri::command] +// todo 后续优化 +async fn register_deep_link(app_handle: tauri::AppHandle) { + tauri_plugin_deep_link::register( + "teyvatguide", + move |request| { + dbg!(&request); + app_handle.emit_all("test_deep_link", request).unwrap(); + }, + ) + .unwrap(); +} + fn main() { + tauri_plugin_deep_link::prepare("teyvatguide"); tauri::Builder::default() .plugin(tauri_plugin_sql::Builder::default().build()) .setup(|_app| { @@ -12,6 +26,7 @@ fn main() { _window.open_devtools(); // open the devtools on startup Ok(()) }) + .invoke_handler(tauri::generate_handler![register_deep_link]) .run(tauri::generate_context!()) .expect("error while running tauri application"); } diff --git a/src/App.vue b/src/App.vue index 1882cf5a..950be4a7 100644 --- a/src/App.vue +++ b/src/App.vue @@ -16,7 +16,7 @@ import { onBeforeMount, onMounted, ref } from "vue"; import TSidebar from "./components/app/t-sidebar.vue"; import TBackTop from "./components/app/t-backTop.vue"; // tauri -import { app, event, fs, window } from "@tauri-apps/api"; +import { app, event, fs, tauri, window } from "@tauri-apps/api"; // store import { useAppStore } from "./store/modules/app"; // utils @@ -43,7 +43,10 @@ onBeforeMount(async () => { onMounted(async () => { // 获取当前主题 document.documentElement.className = theme.value; + await tauri.invoke("register_deep_link"); + console.info("已注册深度链接!"); await listenOnTheme(); + await getDeepLink(); }); // 监听主题变化 @@ -92,12 +95,24 @@ async function createDataDir(): Promise { // 初始化数据库 async function initData(): Promise { + if (appStore.devEnv) { + console.info("开发环境,跳过数据库初始化!"); + return; + } await TGSqlite.reset(); showSnackbar({ text: "已成功初始化数据库!", }); console.info("已成功初始化数据库!"); } + +async function getDeepLink(): Promise { + console.info("正在监听深度链接!"); + await event.listen("test_deep_link", (e) => { + console.log("深度链接已触发!"); + console.log(e.payload); + }); +}