diff --git a/src-tauri/src/sidecar/mod.rs b/src-tauri/src/sidecar/mod.rs index ded7ca4..f892ce0 100644 --- a/src-tauri/src/sidecar/mod.rs +++ b/src-tauri/src/sidecar/mod.rs @@ -98,6 +98,9 @@ impl SidecarManager { // Already extracted — use it directly if binary_path.exists() { + // Ensure all binaries are executable (fixes previously extracted dirs) + #[cfg(unix)] + Self::set_executable_permissions(&extract_dir); Self::cleanup_old_sidecars(data_dir, ¤t_version); return Ok(binary_path); } @@ -113,23 +116,8 @@ impl SidecarManager { )); } - // Make all binaries executable on Unix (sidecar, ffmpeg, ffprobe, etc.) #[cfg(unix)] - { - use std::os::unix::fs::PermissionsExt; - if let Ok(entries) = std::fs::read_dir(&extract_dir) { - for entry in entries.flatten() { - let path = entry.path(); - if path.is_file() { - if let Ok(meta) = std::fs::metadata(&path) { - let mut perms = meta.permissions(); - perms.set_mode(0o755); - let _ = std::fs::set_permissions(&path, perms); - } - } - } - } - } + Self::set_executable_permissions(&extract_dir); Self::cleanup_old_sidecars(data_dir, ¤t_version); Ok(binary_path) @@ -214,6 +202,24 @@ impl SidecarManager { /// Remove old sidecar-* directories that don't match the current version. /// Called after the current version's sidecar is confirmed ready. + /// Set execute permissions on all files in a directory (Unix only). + #[cfg(unix)] + fn set_executable_permissions(dir: &Path) { + use std::os::unix::fs::PermissionsExt; + if let Ok(entries) = std::fs::read_dir(dir) { + for entry in entries.flatten() { + let path = entry.path(); + if path.is_file() { + if let Ok(meta) = std::fs::metadata(&path) { + let mut perms = meta.permissions(); + perms.set_mode(0o755); + let _ = std::fs::set_permissions(&path, perms); + } + } + } + } + } + pub(crate) fn cleanup_old_sidecars(data_dir: &Path, current_version: &str) { let current_dir_name = format!("sidecar-{}", current_version);