From 05c49138339e52cd508812d2731d40d8c3d8adb8 Mon Sep 17 00:00:00 2001 From: Eddy Date: Tue, 21 Apr 2026 06:47:04 +0200 Subject: [PATCH] WebKitGTK Mikrofon-Permission: connect_permission_request Handler erlaubt getUserMedia [appimage] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WebKitGTK verweigert standardmäßig alle Permission-Requests (Mikrofon, Kamera). Jetzt wird in setup() ein permission-request Handler registriert der alles erlaubt. Co-Authored-By: Claude Opus 4.6 --- src-tauri/Cargo.toml | 3 +++ src-tauri/src/lib.rs | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 7c7f024..a2abb2e 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -28,6 +28,9 @@ tokio-tungstenite = "0.23" futures-util = "0.3" sha2 = "0.10" +[target.'cfg(target_os = "linux")'.dependencies] +webkit2gtk = "2.0" + [profile.release] panic = "abort" codegen-units = 1 diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 2248375..c53091f 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -8,6 +8,9 @@ use tauri::{ tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent}, }; +#[cfg(target_os = "linux")] +use webkit2gtk::WebViewExt; + mod audit; mod claude; mod commands; @@ -250,6 +253,24 @@ pub fn run() { // Lock-Datei erstellen (Instanz-Schutz + Update-Safety) update::create_lock_file(); + // WebKitGTK: Mikrofon-/Kamera-Permissions automatisch erlauben + #[cfg(target_os = "linux")] + { + if let Some(window) = app.get_webview_window("main") { + window.with_webview(|webview| { + use webkit2gtk::PermissionRequestExt; + + let wv: webkit2gtk::WebView = webview.inner().clone(); + wv.connect_permission_request(|_wv, request: &webkit2gtk::PermissionRequest| { + println!("🎤 WebKit Permission-Request → erlaubt"); + request.allow(); + true // Signal handled + }); + println!("🎤 WebKit Permission-Handler registriert"); + }).ok(); + } + } + // Phase 3: Bridge sofort beim App-Start starten (kein Cold-Start bei erster Nachricht) let bridge_handle = app.handle().clone(); tauri::async_runtime::spawn(async move {