From cee31c1e2c473a5fc983719218c39bc999cbf50b Mon Sep 17 00:00:00 2001 From: Philip Peterson <1326208+philip-peterson@users.noreply.github.com> Date: Tue, 25 Aug 2026 13:54:27 -0800 Subject: [PATCH] try fix build --- .github/workflows/desktop.yml | 5 +++- desktop/src-tauri/Cargo.lock | 2 -- desktop/src-tauri/Cargo.toml | 3 +-- desktop/src-tauri/src/lib.rs | 49 +++++------------------------------ 4 files changed, 12 insertions(+), 47 deletions(-) diff --git a/.github/workflows/desktop.yml b/.github/workflows/desktop.yml index 900c88dd..6e7c6f24 100644 --- a/.github/workflows/desktop.yml +++ b/.github/workflows/desktop.yml @@ -71,7 +71,10 @@ jobs: shell: bash run: | cd ui - npm ci + # --ignore-scripts skips the workbox postinstall (bin/update-workbox.sh), + # a bash script that fails under cmd.exe on Windows. It's only needed + # for the PWA service worker, which the desktop app doesn't use. + npm ci --ignore-scripts npm run build - name: Build Navidrome server binary diff --git a/desktop/src-tauri/Cargo.lock b/desktop/src-tauri/Cargo.lock index 16ffcaf5..ed905df0 100644 --- a/desktop/src-tauri/Cargo.lock +++ b/desktop/src-tauri/Cargo.lock @@ -2302,7 +2302,6 @@ checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ "bitflags 2.13.1", "block2", - "libc", "objc2", "objc2-core-foundation", ] @@ -2745,7 +2744,6 @@ dependencies = [ "libc", "objc2", "objc2-app-kit", - "objc2-foundation", "objc2-web-kit", "serde_json", "tauri", diff --git a/desktop/src-tauri/Cargo.toml b/desktop/src-tauri/Cargo.toml index 287a279c..dd64b1e0 100644 --- a/desktop/src-tauri/Cargo.toml +++ b/desktop/src-tauri/Cargo.toml @@ -24,9 +24,8 @@ libc = "0.2" [target.'cfg(target_os = "macos")'.dependencies] objc2 = "0.6" -objc2-app-kit = { version = "0.3", features = ["NSApplication", "NSEvent", "NSWindow", "NSView"] } +objc2-app-kit = { version = "0.3", features = ["NSApplication", "NSEvent"] } objc2-web-kit = { version = "0.3", features = ["WKWebView"] } -objc2-foundation = { version = "0.3", features = ["NSString", "NSArray"] } block2 = "0.6" [features] diff --git a/desktop/src-tauri/src/lib.rs b/desktop/src-tauri/src/lib.rs index 163fcefa..864a8473 100644 --- a/desktop/src-tauri/src/lib.rs +++ b/desktop/src-tauri/src/lib.rs @@ -135,44 +135,6 @@ fn layout(app: &tauri::AppHandle) { } } -/// Evaluates `js` on every WKWebView in the key window's view hierarchy. This -/// reaches the Web Inspector (devtools) webview too — which is not a -/// Tauri-managed webview — so select-all/undo/redo work in the console. -#[cfg(target_os = "macos")] -fn eval_js_on_focused_webviews(js: &str) { - use objc2::MainThreadMarker; - use objc2_app_kit::NSApplication; - use objc2_foundation::NSString; - - let Some(mtm) = MainThreadMarker::new() else { - return; - }; - let app = NSApplication::sharedApplication(mtm); - let Some(window) = app.keyWindow() else { - return; - }; - let Some(content) = window.contentView() else { - return; - }; - - let js = NSString::from_str(js); - walk_and_eval(&content, &js); -} - -#[cfg(target_os = "macos")] -fn walk_and_eval(view: &objc2_app_kit::NSView, js: &objc2_foundation::NSString) { - use objc2_web_kit::WKWebView; - - if let Some(webview) = view.downcast_ref::() { - unsafe { - webview.evaluateJavaScript_completionHandler(js, None); - } - } - for subview in view.subviews().iter() { - walk_and_eval(&subview, js); - } -} - /// Installs a local NSEvent monitor that intercepts Cmd+X/C/V/A/Z and /// dispatches the matching native editing selector to the first responder. /// @@ -181,7 +143,7 @@ fn walk_and_eval(view: &objc2_app_kit::NSView, js: &objc2_foundation::NSString) /// this is the only reliable way to make cut/copy/paste work in the devtools /// console. #[cfg(target_os = "macos")] -fn install_edit_shortcut_monitor() { +fn install_edit_shortcut_monitor(handle: &tauri::AppHandle) { use objc2::runtime::{AnyObject, Sel}; use objc2::MainThreadMarker; use objc2_app_kit::{NSApplication, NSEvent, NSEventMask, NSEventModifierFlags}; @@ -191,6 +153,7 @@ fn install_edit_shortcut_monitor() { return; }; let app = NSApplication::sharedApplication(mtm); + let handle = handle.clone(); let block = block2::RcBlock::new(move |event: NonNull| -> *mut NSEvent { let event = unsafe { event.as_ref() }; @@ -232,7 +195,7 @@ fn install_edit_shortcut_monitor() { } // selectAll:/undo:/redo: don't dispatch through the responder chain in - // WKWebView, so drive the focused webview(s) via execCommand too — but + // WKWebView, so drive the content webview via execCommand too — but // only when an editable element is actually focused, otherwise we'd // select the whole document. let js = match key.as_str() { @@ -246,7 +209,9 @@ fn install_edit_shortcut_monitor() { _ => None, }; if let Some(js) = js { - eval_js_on_focused_webviews(js); + if let Some(content) = handle.get_webview("content") { + let _ = content.eval(js); + } } std::ptr::null_mut() @@ -321,7 +286,7 @@ pub fn run() { enable_swipe_navigation(app.handle()); #[cfg(target_os = "macos")] - install_edit_shortcut_monitor(); + install_edit_shortcut_monitor(app.handle()); if let Some(toolbar) = app.get_webview("main") { let _ = toolbar.emit("url-changed", mask.mask(&navidrome_url));