From f2e2011e9f7d8bef7b25479dd9a51180790c62f0 Mon Sep 17 00:00:00 2001 From: Jai A Date: Fri, 30 Aug 2024 09:59:50 -0700 Subject: [PATCH] fix remaining bugs --- Cargo.lock | 57 ++++++++--- apps/app-frontend/package.json | 1 - apps/app-frontend/src/App.vue | 8 +- .../src/components/ui/AddContentButton.vue | 2 +- .../components/ui/InstanceCreationModal.vue | 6 +- .../src/components/ui/JavaSelector.vue | 6 +- .../src/components/ui/PromotionWrapper.vue | 12 +-- .../ui/install_flow/ModInstallModal.vue | 3 +- apps/app-frontend/src/helpers/ads.js | 2 +- apps/app-frontend/src/helpers/utils.js | 4 + apps/app-frontend/src/pages/Browse.vue | 5 +- .../src/pages/instance/Options.vue | 2 +- apps/app/Cargo.toml | 2 +- apps/app/capabilities/updater.json | 3 +- apps/app/gen/schemas/capabilities.json | 2 +- apps/app/src/api/ads.rs | 96 +++++++++---------- apps/app/src/main.rs | 15 ++- packages/app-lib/src/state/fs_watcher.rs | 2 +- pnpm-lock.yaml | 10 -- 19 files changed, 138 insertions(+), 100 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7fc843c2b..321453b4b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -166,6 +166,30 @@ dependencies = [ "zstd-safe 7.2.1", ] +[[package]] +name = "async-executor" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7ebdfa2ebdab6b1760375fa7d6f382b9f486eac35fc994625a00e89280bdbb7" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +dependencies = [ + "async-lock", + "blocking", + "futures-lite", +] + [[package]] name = "async-io" version = "2.3.4" @@ -5432,16 +5456,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "tauri-plugin-process" -version = "2.0.0-rc.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9eb80b601682dcbd45dc5ed5f7cc214f1d994aeea730d500899cc616784559" -dependencies = [ - "tauri", - "tauri-plugin", -] - [[package]] name = "tauri-plugin-shell" version = "2.0.0-rc.2" @@ -5463,6 +5477,21 @@ dependencies = [ "tokio", ] +[[package]] +name = "tauri-plugin-single-instance" +version = "2.0.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d73c92c98d44d4daba0118d905f45243dfcd6eaac82216c3382a02d17cb74cf2" +dependencies = [ + "log", + "serde", + "serde_json", + "tauri", + "thiserror", + "windows-sys 0.59.0", + "zbus", +] + [[package]] name = "tauri-plugin-updater" version = "2.0.0-rc.1" @@ -5695,8 +5724,8 @@ dependencies = [ "tauri-plugin-deep-link", "tauri-plugin-dialog", "tauri-plugin-os", - "tauri-plugin-process", "tauri-plugin-shell", + "tauri-plugin-single-instance", "tauri-plugin-updater", "tauri-plugin-window-state", "theseus", @@ -7125,9 +7154,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" dependencies = [ "async-broadcast", + "async-executor", + "async-fs", + "async-io", + "async-lock", "async-process", "async-recursion", + "async-task", "async-trait", + "blocking", "enumflags2", "event-listener", "futures-core", diff --git a/apps/app-frontend/package.json b/apps/app-frontend/package.json index e7c12dc63..5fbc35e92 100644 --- a/apps/app-frontend/package.json +++ b/apps/app-frontend/package.json @@ -19,7 +19,6 @@ "@tauri-apps/plugin-window-state": "^2.0.0-rc.0", "@tauri-apps/plugin-shell": "^2.0.0-rc.0", "@tauri-apps/plugin-updater": "^2.0.0-rc.0", - "@tauri-apps/plugin-process": "^2.0.0-rc.0", "@vintl/vintl": "^4.4.1", "dayjs": "^1.11.10", "floating-vue": "^5.2.2", diff --git a/apps/app-frontend/src/App.vue b/apps/app-frontend/src/App.vue index 38c4180a6..f5cd667b8 100644 --- a/apps/app-frontend/src/App.vue +++ b/apps/app-frontend/src/App.vue @@ -24,7 +24,7 @@ import { handleError, useNotifications } from '@/store/notifications.js' import { command_listener, warning_listener } from '@/helpers/events.js' import { MinimizeIcon, MaximizeIcon } from '@/assets/icons' import { type } from '@tauri-apps/plugin-os' -import { isDev, getOS } from '@/helpers/utils.js' +import { isDev, getOS, restartApp } from '@/helpers/utils.js' import { initAnalytics, debugAnalytics, optOutAnalytics, trackEvent } from '@/helpers/analytics' import { getCurrentWindow } from '@tauri-apps/api/window' import { getVersion } from '@tauri-apps/api/app' @@ -43,7 +43,6 @@ import { saveWindowState, StateFlags } from '@tauri-apps/plugin-window-state' import { renderString } from '@modrinth/utils' import { useFetch } from '@/helpers/fetch.js' import { check } from '@tauri-apps/plugin-updater' -import { relaunch } from '@tauri-apps/plugin-process' const themeStore = useTheming() @@ -246,7 +245,8 @@ async function handleCommand(e) { const updateAvailable = ref(false) async function checkUpdates() { - const update = await check().catch(() => {}) + const update = await check() + console.log(update) updateAvailable.value = !!update setTimeout( @@ -293,7 +293,7 @@ async function checkUpdates() { v-if="updateAvailable" v-tooltip="'Install update'" class="btn btn-outline btn-primary icon-only collapsed-button" - @click="relaunch()" + @click="restartApp()" > diff --git a/apps/app-frontend/src/components/ui/AddContentButton.vue b/apps/app-frontend/src/components/ui/AddContentButton.vue index bbf6b62de..2b54711e6 100644 --- a/apps/app-frontend/src/components/ui/AddContentButton.vue +++ b/apps/app-frontend/src/components/ui/AddContentButton.vue @@ -20,7 +20,7 @@ const handleAddContentFromFile = async () => { if (!newProject) return for (const project of newProject) { - await add_project_from_path(props.instance.path, project).catch(handleError) + await add_project_from_path(props.instance.path, project.path).catch(handleError) } } diff --git a/apps/app-frontend/src/components/ui/InstanceCreationModal.vue b/apps/app-frontend/src/components/ui/InstanceCreationModal.vue index c8c78db25..9333a75af 100644 --- a/apps/app-frontend/src/components/ui/InstanceCreationModal.vue +++ b/apps/app-frontend/src/components/ui/InstanceCreationModal.vue @@ -369,7 +369,7 @@ const create_instance = async () => { } const upload_icon = async () => { - icon.value = await open({ + const res = await open({ multiple: false, filters: [ { @@ -379,6 +379,8 @@ const upload_icon = async () => { ], }) + icon.value = res ? res.path : null + if (!icon.value) return display_icon.value = convertFileSrc(icon.value) } @@ -415,7 +417,7 @@ const openFile = async () => { const newProject = await open({ multiple: false }) if (!newProject) return hide() - await install_from_file(newProject).catch(handleError) + await install_from_file(newProject.path).catch(handleError) trackEvent('InstanceCreate', { source: 'CreationModalFileOpen', diff --git a/apps/app-frontend/src/components/ui/JavaSelector.vue b/apps/app-frontend/src/components/ui/JavaSelector.vue index aeb292fdd..f321f814c 100644 --- a/apps/app-frontend/src/components/ui/JavaSelector.vue +++ b/apps/app-frontend/src/components/ui/JavaSelector.vue @@ -127,17 +127,17 @@ async function handleJavaFileInput() { let filePath = await open() if (filePath) { - let result = await get_jre(filePath) + let result = await get_jre(filePath.path) if (!result) { result = { - path: filePath, + path: filePath.path, version: props.version.toString(), architecture: 'x86', } } trackEvent('JavaManualSelect', { - path: filePath, + path: filePath.path, version: props.version, }) diff --git a/apps/app-frontend/src/components/ui/PromotionWrapper.vue b/apps/app-frontend/src/components/ui/PromotionWrapper.vue index 3481a307b..87a6d621d 100644 --- a/apps/app-frontend/src/components/ui/PromotionWrapper.vue +++ b/apps/app-frontend/src/components/ui/PromotionWrapper.vue @@ -34,24 +34,24 @@ onMounted(() => { if (showAd.value) { updateAdPosition(true) - resizeObserver = new ResizeObserver(updateAdPosition) + resizeObserver = new ResizeObserver(() => updateAdPosition()) resizeObserver.observe(adsWrapper.value) - intersectionObserver = new IntersectionObserver(updateAdPosition) + intersectionObserver = new IntersectionObserver(() => updateAdPosition()) intersectionObserver.observe(adsWrapper.value) - mutationObserver = new MutationObserver(updateAdPosition) + mutationObserver = new MutationObserver(() => updateAdPosition()) mutationObserver.observe(adsWrapper.value, { attributes: true, childList: true, subtree: true }) // Add scroll event listener scrollHandler = () => { - requestAnimationFrame(updateAdPosition) + requestAnimationFrame(() => updateAdPosition()) } window.addEventListener('scroll', scrollHandler, { passive: true }) } }) -function updateAdPosition(override = false) { +function updateAdPosition(overrideShown = false) { if (adsWrapper.value) { const rect = adsWrapper.value.getBoundingClientRect() @@ -69,7 +69,7 @@ function updateAdPosition(override = false) { } } - init_ads_window(rect.left + window.scrollX, y, rect.right - rect.left, height, override) + init_ads_window(rect.left + window.scrollX, y, rect.right - rect.left, height, overrideShown) } } diff --git a/apps/app-frontend/src/components/ui/install_flow/ModInstallModal.vue b/apps/app-frontend/src/components/ui/install_flow/ModInstallModal.vue index 8d53a0708..e4e342dc9 100644 --- a/apps/app-frontend/src/components/ui/install_flow/ModInstallModal.vue +++ b/apps/app-frontend/src/components/ui/install_flow/ModInstallModal.vue @@ -141,7 +141,7 @@ const toggleCreation = () => { } const upload_icon = async () => { - icon.value = await open({ + const res = await open({ multiple: false, filters: [ { @@ -150,6 +150,7 @@ const upload_icon = async () => { }, ], }) + icon.value = res ? res.path : null if (!icon.value) return display_icon.value = convertFileSrc(icon.value) diff --git a/apps/app-frontend/src/helpers/ads.js b/apps/app-frontend/src/helpers/ads.js index 75871b02b..df9375f64 100644 --- a/apps/app-frontend/src/helpers/ads.js +++ b/apps/app-frontend/src/helpers/ads.js @@ -1,6 +1,6 @@ import { invoke } from '@tauri-apps/api/core' -export async function init_ads_window(x, y, width, height, overrideShown) { +export async function init_ads_window(x, y, width, height, overrideShown = false) { return await invoke('plugin:ads|init_ads_window', { x, y, width, height, overrideShown }) } diff --git a/apps/app-frontend/src/helpers/utils.js b/apps/app-frontend/src/helpers/utils.js index bcae12e45..55dd8b646 100644 --- a/apps/app-frontend/src/helpers/utils.js +++ b/apps/app-frontend/src/helpers/utils.js @@ -33,6 +33,10 @@ export async function highlightModInProfile(profilePath, projectPath) { return await highlightInFolder(fullPath) } +export async function restartApp() { + return await invoke('restart_app') +} + export const releaseColor = (releaseType) => { switch (releaseType) { case 'release': diff --git a/apps/app-frontend/src/pages/Browse.vue b/apps/app-frontend/src/pages/Browse.vue index ec4ff566d..6b9e9f6a4 100644 --- a/apps/app-frontend/src/pages/Browse.vue +++ b/apps/app-frontend/src/pages/Browse.vue @@ -884,6 +884,7 @@ const isModProject = computed(() => ['modpack', 'mod'].includes(projectType.valu height: fit-content; min-height: calc(100vh - 3.25rem); max-height: calc(100vh - 3.25rem); + width: 20rem; overflow-y: auto; -ms-overflow-style: none; scrollbar-width: none; @@ -902,8 +903,8 @@ const isModProject = computed(() => ['modpack', 'mod'].includes(projectType.valu } .search { - margin: 0 1rem 0.5rem calc(300px + 2.5rem); - width: calc(100% - calc(300px + 2.5rem)); + margin: 0 1rem 0.5rem calc(20rem + 1rem); + width: calc(100% - calc(20rem + 1rem)); .offline { margin: 1rem; diff --git a/apps/app-frontend/src/pages/instance/Options.vue b/apps/app-frontend/src/pages/instance/Options.vue index 9ca84390a..e4166eab6 100644 --- a/apps/app-frontend/src/pages/instance/Options.vue +++ b/apps/app-frontend/src/pages/instance/Options.vue @@ -581,7 +581,7 @@ async function setIcon() { if (!value) return - icon.value = value + icon.value = value.path await edit_icon(props.instance.path, icon.value).catch(handleError) trackEvent('InstanceSetIcon') diff --git a/apps/app/Cargo.toml b/apps/app/Cargo.toml index d109794b7..de70d4b9c 100644 --- a/apps/app/Cargo.toml +++ b/apps/app/Cargo.toml @@ -23,7 +23,7 @@ tauri-plugin-os = "2.0.0-rc" tauri-plugin-shell = "2.0.0-rc" tauri-plugin-dialog = "2.0.0-rc" tauri-plugin-updater = { version = "2.0.0-rc" } -tauri-plugin-process = { version = "2.0.0-rc" } +tauri-plugin-single-instance = { version = "2.0.0-rc" } tokio = { version = "1", features = ["full"] } thiserror = "1.0" diff --git a/apps/app/capabilities/updater.json b/apps/app/capabilities/updater.json index 90d6566fc..e3a21c3bd 100644 --- a/apps/app/capabilities/updater.json +++ b/apps/app/capabilities/updater.json @@ -6,7 +6,6 @@ "main" ], "permissions": [ - "updater:default", - "process:default" + "updater:default" ] } diff --git a/apps/app/gen/schemas/capabilities.json b/apps/app/gen/schemas/capabilities.json index a4d1ec208..f041cba2f 100644 --- a/apps/app/gen/schemas/capabilities.json +++ b/apps/app/gen/schemas/capabilities.json @@ -1 +1 @@ -{"ads":{"identifier":"ads","description":"","remote":{"urls":["https://modrinth.com/*","http://localhost:3000/*"]},"local":false,"webviews":["ads-window"],"permissions":["shell:allow-open","ads:default"]},"core":{"identifier":"core","description":"","local":true,"windows":["main"],"permissions":["core:default","core:path:default","core:event:default","core:window:default","core:app:default","core:resources:default","core:menu:default","core:tray:default","core:window:allow-create","core:window:allow-maximize","core:window:allow-toggle-maximize","core:window:allow-unmaximize","core:window:allow-minimize","core:window:allow-unminimize","core:window:allow-show","core:window:allow-hide","core:window:allow-close","core:window:allow-set-decorations","core:window:allow-start-dragging","core:webview:allow-set-webview-zoom"]},"plugins":{"identifier":"plugins","description":"","local":true,"windows":["main"],"permissions":["dialog:allow-open","dialog:allow-confirm","shell:allow-open","os:allow-platform","os:allow-version","os:allow-os-type","os:allow-family","os:allow-arch","os:allow-exe-extension","os:allow-locale","os:allow-hostname","deep-link:default","window-state:default","window-state:allow-restore-state","window-state:allow-save-window-state","auth:default","import:default","jre:default","logs:default","metadata:default","mr-auth:default","profile-create:default","pack:default","process:default","profile:default","cache:default","settings:default","tags:default","utils:default","ads:default"]},"updater":{"identifier":"updater","description":"","local":true,"windows":["main"],"permissions":["updater:default","process:default"]}} \ No newline at end of file +{"ads":{"identifier":"ads","description":"","remote":{"urls":["https://modrinth.com/*","http://localhost:3000/*"]},"local":false,"webviews":["ads-window"],"permissions":["shell:allow-open","ads:default"]},"core":{"identifier":"core","description":"","local":true,"windows":["main"],"permissions":["core:default","core:path:default","core:event:default","core:window:default","core:app:default","core:resources:default","core:menu:default","core:tray:default","core:window:allow-create","core:window:allow-maximize","core:window:allow-toggle-maximize","core:window:allow-unmaximize","core:window:allow-minimize","core:window:allow-unminimize","core:window:allow-show","core:window:allow-hide","core:window:allow-close","core:window:allow-set-decorations","core:window:allow-start-dragging","core:webview:allow-set-webview-zoom"]},"plugins":{"identifier":"plugins","description":"","local":true,"windows":["main"],"permissions":["dialog:allow-open","dialog:allow-confirm","shell:allow-open","os:allow-platform","os:allow-version","os:allow-os-type","os:allow-family","os:allow-arch","os:allow-exe-extension","os:allow-locale","os:allow-hostname","deep-link:default","window-state:default","window-state:allow-restore-state","window-state:allow-save-window-state","auth:default","import:default","jre:default","logs:default","metadata:default","mr-auth:default","profile-create:default","pack:default","process:default","profile:default","cache:default","settings:default","tags:default","utils:default","ads:default"]},"updater":{"identifier":"updater","description":"","local":true,"windows":["main"],"permissions":["updater:default"]}} \ No newline at end of file diff --git a/apps/app/src/api/ads.rs b/apps/app/src/api/ads.rs index 2b334b1a3..3deac413c 100644 --- a/apps/app/src/api/ads.rs +++ b/apps/app/src/api/ads.rs @@ -33,9 +33,8 @@ pub fn init() -> TauriPlugin { const LINK_SCRIPT: &str = include_str!("ads-init.js"); -// TODO: make ads work on linux - #[tauri::command] +#[cfg(not(target_os = "linux"))] pub async fn init_ads_window( app: tauri::AppHandle, x: f32, @@ -44,65 +43,64 @@ pub async fn init_ads_window( height: f32, override_shown: bool, ) -> crate::api::Result<()> { - #[cfg(not(target_os = "linux"))] - { - let state = app.state::>(); - let mut state = state.write().await; - state.size = Some(LogicalSize::new(width, height)); - state.position = Some(LogicalPosition::new(x, y)); + let state = app.state::>(); + let mut state = state.write().await; + state.size = Some(LogicalSize::new(width, height)); + state.position = Some(LogicalPosition::new(x, y)); - if override_shown { - state.shown = true; - } + if override_shown { + state.shown = true; + } - if let Some(webview) = app.webviews().get("ads-window") { - if state.shown { - let _ = webview.set_position(LogicalPosition::new(x, y)); - let _ = webview.set_size(LogicalSize::new(width, height)); - } - } else if let Some(window) = app.get_window("main") { - let _ = window.add_child( - tauri::webview::WebviewBuilder::new( - "ads-window", - WebviewUrl::External( - "https://modrinth.com/wrapper/app-ads".parse().unwrap(), - ), - ) - .initialization_script(LINK_SCRIPT) - .user_agent("ModrinthApp Ads Webview") - .zoom_hotkeys_enabled(false) - .transparent(false), - if state.shown { - LogicalPosition::new(x, y) - } else { - LogicalPosition::new(-1000.0, -1000.0) - }, - LogicalSize::new(width, height), - ); + if let Some(webview) = app.webviews().get("ads-window") { + if state.shown { + let _ = webview.set_position(LogicalPosition::new(x, y)); + let _ = webview.set_size(LogicalSize::new(width, height)); } + } else if let Some(window) = app.get_window("main") { + let _ = window.add_child( + tauri::webview::WebviewBuilder::new( + "ads-window", + WebviewUrl::External( + "https://modrinth.com/wrapper/app-ads".parse().unwrap(), + ), + ) + .initialization_script(LINK_SCRIPT) + .user_agent("ModrinthApp Ads Webview") + .zoom_hotkeys_enabled(false) + .transparent(true), + if state.shown { + LogicalPosition::new(x, y) + } else { + LogicalPosition::new(-1000.0, -1000.0) + }, + LogicalSize::new(width, height), + ); } Ok(()) } +// TODO: make ads work on linux +#[tauri::command] +#[cfg(target_os = "linux")] +pub async fn init_ads_window() {} + #[tauri::command] pub async fn show_ads_window( app: tauri::AppHandle, ) -> crate::api::Result<()> { - #[cfg(not(target_os = "linux"))] - { - if let Some(webview) = app.webviews().get("ads-window") { - let state = app.state::>(); - let mut state = state.write().await; - - state.shown = true; - if let Some(size) = state.size { - let _ = webview.set_size(size); - } - - if let Some(position) = state.position { - let _ = webview.set_position(position); - } + if let Some(webview) = app.webviews().get("ads-window") { + let state = app.state::>(); + let mut state = state.write().await; + + state.shown = true; + if let Some(size) = state.size { + let _ = webview.set_size(size); + } + + if let Some(position) = state.position { + let _ = webview.set_position(position); } } diff --git a/apps/app/src/main.rs b/apps/app/src/main.rs index b1fa9e9e8..603f73e97 100644 --- a/apps/app/src/main.rs +++ b/apps/app/src/main.rs @@ -135,6 +135,11 @@ async fn toggle_decorations(b: bool, window: tauri::Window) -> api::Result<()> { Ok(()) } +#[tauri::command] +fn restart_app(app: tauri::AppHandle) { + app.restart(); +} + // if Tauri app is called with arguments, then those arguments will be treated as commands // ie: deep links or filepaths for .mrpacks fn main() { @@ -160,12 +165,15 @@ fn main() { #[cfg(feature = "updater")] { - builder = builder - .plugin(tauri_plugin_updater::Builder::new().build()) - .plugin(tauri_plugin_process::init()); + builder = builder.plugin(tauri_plugin_updater::Builder::new().build()); } builder = builder + .plugin(tauri_plugin_single_instance::init(|app, _args, _cwd| { + if let Some(win) = app.get_window("main") { + let _ = win.set_focus(); + } + })) .plugin(tauri_plugin_os::init()) .plugin(tauri_plugin_dialog::init()) .plugin(tauri_plugin_deep_link::init()) @@ -250,6 +258,7 @@ fn main() { toggle_decorations, api::mr_auth::modrinth_auth_login, show_window, + restart_app, ]); #[cfg(target_os = "macos")] diff --git a/packages/app-lib/src/state/fs_watcher.rs b/packages/app-lib/src/state/fs_watcher.rs index dbd87202b..e144c264e 100644 --- a/packages/app-lib/src/state/fs_watcher.rs +++ b/packages/app-lib/src/state/fs_watcher.rs @@ -119,7 +119,7 @@ pub(crate) async fn watch_profile( { let path = profile_path.join(folder); - if !path.exists() { + if !path.exists() && !path.is_symlink() { crate::util::io::create_dir_all(&path).await?; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 15df5f969..92d9040b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -59,9 +59,6 @@ importers: '@tauri-apps/plugin-os': specifier: ^2.0.0-rc.0 version: 2.0.0-rc.0 - '@tauri-apps/plugin-process': - specifier: ^2.0.0-rc.0 - version: 2.0.0-rc.1 '@tauri-apps/plugin-shell': specifier: ^2.0.0-rc.0 version: 2.0.0-rc.0 @@ -2093,9 +2090,6 @@ packages: '@tauri-apps/plugin-os@2.0.0-rc.0': resolution: {integrity: sha512-OWAl8mooKnGykSD4iog8WRqcnOSx0gGmTJBlEExHdFeIuOHg0Ezvd+WiVLhT9LBg7go3ibNWRWpe/ZG7YEp4Vw==} - '@tauri-apps/plugin-process@2.0.0-rc.1': - resolution: {integrity: sha512-Bl22xdoiu+AqEP6rzjb7DUJwdLDnejuRFukpkdrqF1/VEWJK5PuE903l+8mIOsd17zZ1Ua8y8WaBWnOXx4QHmw==} - '@tauri-apps/plugin-shell@2.0.0-rc.0': resolution: {integrity: sha512-bhUcQcrqZoK8H1DFXapr5r1Z75oh6Kd5Tltz97XpZFLREEqp+KhN2Fvyh8r/fKAyenYsTYUIsDsyGdjdueuF9g==} @@ -7894,10 +7888,6 @@ snapshots: dependencies: '@tauri-apps/api': 2.0.0-rc.3 - '@tauri-apps/plugin-process@2.0.0-rc.1': - dependencies: - '@tauri-apps/api': 2.0.0-rc.4 - '@tauri-apps/plugin-shell@2.0.0-rc.0': dependencies: '@tauri-apps/api': 2.0.0-rc.3