From a075f8eb9165af9ae101f8f36037a94a2fdcb65d Mon Sep 17 00:00:00 2001 From: Neptune Date: Mon, 27 Jan 2025 20:52:10 -0500 Subject: [PATCH 1/5] Add function to kill processes properly --- screenpipe-server/src/pipe_manager.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/screenpipe-server/src/pipe_manager.rs b/screenpipe-server/src/pipe_manager.rs index 90d59897a..9a44b46db 100644 --- a/screenpipe-server/src/pipe_manager.rs +++ b/screenpipe-server/src/pipe_manager.rs @@ -298,6 +298,21 @@ impl PipeManager { } } + #[cfg(windows)] + use windows::Win32::Foundation::HANDLE; + #[cfg(windows)] + fn terminate_process(process: &mut HANDLE, exit_code: u32) { + use windows::Win32::System::Threading::{ + INFINITE, TerminateProcess, WaitForSingleObject, + }; + use windows::Win32::Foundation::CloseHandle; + unsafe { + let _ = TerminateProcess(process, exit_code); + WaitForSingleObject(process, INFINITE); + CloseHandle(process); + } + } + pub async fn stop_pipe(&self, id: &str) -> Result<()> { let mut pipes = self.running_pipes.write().await; if let Some(handle) = pipes.remove(id) { @@ -359,7 +374,7 @@ impl PipeManager { false, pid as u32, ) { - let _ = TerminateProcess(h_process, 1); + let _ = terminate_process(h_process, 1); } } } From 38f58882d415c041311670de47874ebd065362bf Mon Sep 17 00:00:00 2001 From: Neptune Date: Mon, 27 Jan 2025 21:22:04 -0500 Subject: [PATCH 2/5] Fix function name --- screenpipe-app-tauri/app/page.tsx | 4 ++-- screenpipe-app-tauri/components/dev-mode-settings.tsx | 2 +- .../components/onboarding/pipe-store.tsx | 2 +- screenpipe-app-tauri/components/onboarding/status.tsx | 2 +- screenpipe-app-tauri/components/recording-settings.tsx | 2 +- screenpipe-app-tauri/components/settings.tsx | 2 +- screenpipe-app-tauri/components/updater.tsx | 2 +- screenpipe-app-tauri/src-tauri/src/main.rs | 10 +++++----- screenpipe-app-tauri/src-tauri/src/sidecar.rs | 2 +- screenpipe-app-tauri/src-tauri/src/updates.rs | 6 +++--- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/screenpipe-app-tauri/app/page.tsx b/screenpipe-app-tauri/app/page.tsx index b34a504a0..8b4a2e070 100644 --- a/screenpipe-app-tauri/app/page.tsx +++ b/screenpipe-app-tauri/app/page.tsx @@ -73,7 +73,7 @@ export default function Home() { }), listen("shortcut-stop-recording", async () => { - await invoke("kill_all_sreenpipes"); + await invoke("kill_all_screenpipes"); toast({ title: "recording stopped", @@ -90,7 +90,7 @@ export default function Home() { description: `switched to ${profile} profile, restarting screenpipe now`, }); - await invoke("kill_all_sreenpipes"); + await invoke("kill_all_screenpipes"); await new Promise((resolve) => setTimeout(resolve, 1000)); diff --git a/screenpipe-app-tauri/components/dev-mode-settings.tsx b/screenpipe-app-tauri/components/dev-mode-settings.tsx index f932d1036..7955602ed 100644 --- a/screenpipe-app-tauri/components/dev-mode-settings.tsx +++ b/screenpipe-app-tauri/components/dev-mode-settings.tsx @@ -152,7 +152,7 @@ export const DevModeSettings = ({ localDataDir }: { localDataDir: string }) => { duration: Infinity, }); try { - await invoke("kill_all_sreenpipes"); + await invoke("kill_all_screenpipes"); await new Promise((resolve) => setTimeout(resolve, 2000)); toastId.update({ id: toastId.id, diff --git a/screenpipe-app-tauri/components/onboarding/pipe-store.tsx b/screenpipe-app-tauri/components/onboarding/pipe-store.tsx index 5ae8784df..7a8faa009 100644 --- a/screenpipe-app-tauri/components/onboarding/pipe-store.tsx +++ b/screenpipe-app-tauri/components/onboarding/pipe-store.tsx @@ -36,7 +36,7 @@ const OnboardingPipeStore: React.FC = ({ await fetch("http://localhost:3030/health"); } catch (error) { // Screenpipe not running, try to spawn it - await invoke("kill_all_sreenpipes"); + await invoke("kill_all_screenpipes"); await new Promise((resolve) => setTimeout(resolve, 1_000)); await invoke("spawn_screenpipe"); await new Promise((resolve) => setTimeout(resolve, 5_000)); diff --git a/screenpipe-app-tauri/components/onboarding/status.tsx b/screenpipe-app-tauri/components/onboarding/status.tsx index a5e970ab3..f4828c42f 100644 --- a/screenpipe-app-tauri/components/onboarding/status.tsx +++ b/screenpipe-app-tauri/components/onboarding/status.tsx @@ -219,7 +219,7 @@ const OnboardingStatus: React.FC = ({ duration: Infinity, }); try { - await invoke("kill_all_sreenpipes"); + await invoke("kill_all_screenpipes"); await new Promise((resolve) => setTimeout(resolve, 1_000)); await invoke("spawn_screenpipe"); diff --git a/screenpipe-app-tauri/components/recording-settings.tsx b/screenpipe-app-tauri/components/recording-settings.tsx index da80fbe50..f3b0343db 100644 --- a/screenpipe-app-tauri/components/recording-settings.tsx +++ b/screenpipe-app-tauri/components/recording-settings.tsx @@ -314,7 +314,7 @@ export function RecordingSettings() { } } - await invoke("kill_all_sreenpipes"); + await invoke("kill_all_screenpipes"); await new Promise((resolve) => setTimeout(resolve, 1000)); // Start a new instance with updated settings diff --git a/screenpipe-app-tauri/components/settings.tsx b/screenpipe-app-tauri/components/settings.tsx index 7e160ec9e..7249b6002 100644 --- a/screenpipe-app-tauri/components/settings.tsx +++ b/screenpipe-app-tauri/components/settings.tsx @@ -64,7 +64,7 @@ export function Settings() { title: "Restarting Screenpipe", description: "Please wait while we restart Screenpipe", }); - await invoke("kill_all_sreenpipes"); + await invoke("kill_all_screenpipes"); await new Promise((resolve) => setTimeout(resolve, 1000)); diff --git a/screenpipe-app-tauri/components/updater.tsx b/screenpipe-app-tauri/components/updater.tsx index c946c87fb..003104cb7 100644 --- a/screenpipe-app-tauri/components/updater.tsx +++ b/screenpipe-app-tauri/components/updater.tsx @@ -25,7 +25,7 @@ Release notes: ${update.body} // on windows only - TODO shouldnt be necessary const os = platform(); if (os === "windows") { - await invoke("kill_all_sreenpipes"); + await invoke("kill_all_screenpipes"); } const toastId = toast({ diff --git a/screenpipe-app-tauri/src-tauri/src/main.rs b/screenpipe-app-tauri/src-tauri/src/main.rs index 3f69763aa..b0d95b6c7 100755 --- a/screenpipe-app-tauri/src-tauri/src/main.rs +++ b/screenpipe-app-tauri/src-tauri/src/main.rs @@ -51,7 +51,7 @@ pub use commands::reset_all_pipes; pub use commands::set_tray_health_icon; pub use commands::set_tray_unhealth_icon; pub use server::spawn_server; -pub use sidecar::kill_all_sreenpipes; +pub use sidecar::kill_all_screenpipes; pub use sidecar::spawn_screenpipe; pub use store::get_profiles_store; pub use store::get_store; @@ -660,7 +660,7 @@ async fn main() { .manage(sidecar_state) .invoke_handler(tauri::generate_handler![ spawn_screenpipe, - kill_all_sreenpipes, + kill_all_screenpipes, permissions::open_permission_settings, permissions::request_permission, permissions::do_permissions_check, @@ -811,7 +811,7 @@ async fn main() { // Stop any running recordings let state = app_handle_clone.state::(); if let Err(e) = - kill_all_sreenpipes(state, app_handle_clone.clone()).await + kill_all_screenpipes(state, app_handle_clone.clone()).await { error!("Error stopping recordings during quit: {}", e); } @@ -839,7 +839,7 @@ async fn main() { let app_handle = app_handle.clone(); tauri::async_runtime::spawn(async move { let state = app_handle.state::(); - if let Err(err) = kill_all_sreenpipes(state, app_handle.clone()).await { + if let Err(err) = kill_all_screenpipes(state, app_handle.clone()).await { error!("Failed to stop recording: {}", err); let _ = app_handle .notification() @@ -872,7 +872,7 @@ async fn main() { tokio::task::block_in_place(move || { Handle::current().block_on(async move { - if let Err(err) = sidecar::kill_all_sreenpipes( + if let Err(err) = sidecar::kill_all_screenpipes( app_handle.state::(), app_handle.clone(), ) diff --git a/screenpipe-app-tauri/src-tauri/src/sidecar.rs b/screenpipe-app-tauri/src-tauri/src/sidecar.rs index 9024645f4..a824dd525 100644 --- a/screenpipe-app-tauri/src-tauri/src/sidecar.rs +++ b/screenpipe-app-tauri/src-tauri/src/sidecar.rs @@ -80,7 +80,7 @@ impl User { } #[tauri::command] -pub async fn kill_all_sreenpipes( +pub async fn kill_all_screenpipes( state: State<'_, SidecarState>, _app: tauri::AppHandle, ) -> Result<(), String> { diff --git a/screenpipe-app-tauri/src-tauri/src/updates.rs b/screenpipe-app-tauri/src-tauri/src/updates.rs index b2cc73a94..07a04363d 100644 --- a/screenpipe-app-tauri/src-tauri/src/updates.rs +++ b/screenpipe-app-tauri/src-tauri/src/updates.rs @@ -1,4 +1,4 @@ -use crate::kill_all_sreenpipes; +use crate::kill_all_screenpipes; use crate::SidecarState; use anyhow::Error; use log::{error, info}; @@ -107,7 +107,7 @@ impl UpdatesManager { .set_text("downloading latest version of screenpipe")?; if let Err(err) = - kill_all_sreenpipes(self.app.state::(), self.app.clone()) + kill_all_screenpipes(self.app.state::(), self.app.clone()) .await { error!("Failed to kill sidecar: {}", err); @@ -131,7 +131,7 @@ impl UpdatesManager { #[cfg(not(target_os = "windows"))] { if let Err(err) = - kill_all_sreenpipes(self.app.state::(), self.app.clone()) + kill_all_screenpipes(self.app.state::(), self.app.clone()) .await { error!("Failed to kill sidecar: {}", err); From 0f75d00fcf61d517df26343f5a399707d12fa385 Mon Sep 17 00:00:00 2001 From: Neptune Date: Tue, 28 Jan 2025 00:46:24 -0500 Subject: [PATCH 3/5] Fix compilation --- screenpipe-server/src/pipe_manager.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/screenpipe-server/src/pipe_manager.rs b/screenpipe-server/src/pipe_manager.rs index 9a44b46db..3bf9fcb86 100644 --- a/screenpipe-server/src/pipe_manager.rs +++ b/screenpipe-server/src/pipe_manager.rs @@ -15,6 +15,9 @@ use tokio::sync::mpsc::{self, Sender}; use tokio::sync::RwLock; use tracing::{debug, info, warn}; +#[cfg(windows)] +use windows::Win32::Foundation::HANDLE; + #[derive(Clone, Serialize, Deserialize, Debug)] pub struct PipeInfo { pub id: String, @@ -298,8 +301,6 @@ impl PipeManager { } } - #[cfg(windows)] - use windows::Win32::Foundation::HANDLE; #[cfg(windows)] fn terminate_process(process: &mut HANDLE, exit_code: u32) { use windows::Win32::System::Threading::{ From bff2b77601ac4179b96b60c6842090b240b32384 Mon Sep 17 00:00:00 2001 From: Neptune Date: Tue, 28 Jan 2025 05:02:05 -0500 Subject: [PATCH 4/5] fix compilation again --- screenpipe-server/src/pipe_manager.rs | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/screenpipe-server/src/pipe_manager.rs b/screenpipe-server/src/pipe_manager.rs index 3bf9fcb86..ad6dbf1a2 100644 --- a/screenpipe-server/src/pipe_manager.rs +++ b/screenpipe-server/src/pipe_manager.rs @@ -15,9 +15,6 @@ use tokio::sync::mpsc::{self, Sender}; use tokio::sync::RwLock; use tracing::{debug, info, warn}; -#[cfg(windows)] -use windows::Win32::Foundation::HANDLE; - #[derive(Clone, Serialize, Deserialize, Debug)] pub struct PipeInfo { pub id: String, @@ -303,14 +300,9 @@ impl PipeManager { #[cfg(windows)] fn terminate_process(process: &mut HANDLE, exit_code: u32) { - use windows::Win32::System::Threading::{ - INFINITE, TerminateProcess, WaitForSingleObject, - }; - use windows::Win32::Foundation::CloseHandle; + unsafe { - let _ = TerminateProcess(process, exit_code); - WaitForSingleObject(process, INFINITE); - CloseHandle(process); + } } @@ -366,8 +358,10 @@ impl PipeManager { } #[cfg(windows)] { + use windows::Win32::Foundation::CloseHandle; use windows::Win32::System::Threading::{ OpenProcess, TerminateProcess, PROCESS_ACCESS_RIGHTS, + INFINITE, WaitForSingleObject }; unsafe { if let Ok(h_process) = OpenProcess( @@ -375,8 +369,10 @@ impl PipeManager { false, pid as u32, ) { - let _ = terminate_process(h_process, 1); - } + let _ = TerminateProcess(h_process, 1); + WaitForSingleObject(h_process, INFINITE); + CloseHandle(h_process); + } } } } From 5e7d692ab8d066dab2d43a96737825c7541908be Mon Sep 17 00:00:00 2001 From: Neptune Date: Tue, 28 Jan 2025 05:04:34 -0500 Subject: [PATCH 5/5] Get rid of empty function --- screenpipe-server/src/pipe_manager.rs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/screenpipe-server/src/pipe_manager.rs b/screenpipe-server/src/pipe_manager.rs index ad6dbf1a2..de805ad55 100644 --- a/screenpipe-server/src/pipe_manager.rs +++ b/screenpipe-server/src/pipe_manager.rs @@ -298,14 +298,6 @@ impl PipeManager { } } - #[cfg(windows)] - fn terminate_process(process: &mut HANDLE, exit_code: u32) { - - unsafe { - - } - } - pub async fn stop_pipe(&self, id: &str) -> Result<()> { let mut pipes = self.running_pipes.write().await; if let Some(handle) = pipes.remove(id) {