gpui: Don't panic when failing to exec system opener (#21674)

This commit is contained in:
Cole Miller 2024-12-06 22:11:40 -05:00 committed by GitHub
parent 4d22a07a1e
commit fa7dddd6b5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 10 additions and 8 deletions

View file

@ -18,7 +18,7 @@ use std::{
time::Duration, time::Duration,
}; };
use anyhow::anyhow; use anyhow::{anyhow, Context as _};
use async_task::Runnable; use async_task::Runnable;
use calloop::channel::Channel; use calloop::channel::Channel;
use calloop::{EventLoop, LoopHandle, LoopSignal}; use calloop::{EventLoop, LoopHandle, LoopSignal};
@ -382,14 +382,14 @@ impl<P: LinuxClient + 'static> Platform for P {
} }
fn open_with_system(&self, path: &Path) { fn open_with_system(&self, path: &Path) {
let executor = self.background_executor().clone();
let path = path.to_owned(); let path = path.to_owned();
executor self.background_executor()
.spawn(async move { .spawn(async move {
let _ = std::process::Command::new("xdg-open") let _ = std::process::Command::new("xdg-open")
.arg(path) .arg(path)
.spawn() .spawn()
.expect("Failed to open file with xdg-open"); .context("invoking xdg-open")
.log_err();
}) })
.detach(); .detach();
} }

View file

@ -10,7 +10,7 @@ use crate::{
PlatformTextSystem, PlatformWindow, Result, ScreenCaptureSource, SemanticVersion, Task, PlatformTextSystem, PlatformWindow, Result, ScreenCaptureSource, SemanticVersion, Task,
WindowAppearance, WindowParams, WindowAppearance, WindowParams,
}; };
use anyhow::anyhow; use anyhow::{anyhow, Context as _};
use block::ConcreteBlock; use block::ConcreteBlock;
use cocoa::{ use cocoa::{
appkit::{ appkit::{
@ -57,6 +57,7 @@ use std::{
sync::Arc, sync::Arc,
}; };
use strum::IntoEnumIterator; use strum::IntoEnumIterator;
use util::ResultExt;
#[allow(non_upper_case_globals)] #[allow(non_upper_case_globals)]
const NSUTF8StringEncoding: NSUInteger = 4; const NSUTF8StringEncoding: NSUInteger = 4;
@ -779,15 +780,16 @@ impl Platform for MacPlatform {
} }
fn open_with_system(&self, path: &Path) { fn open_with_system(&self, path: &Path) {
let path = path.to_path_buf(); let path = path.to_owned();
self.0 self.0
.lock() .lock()
.background_executor .background_executor
.spawn(async move { .spawn(async move {
std::process::Command::new("open") let _ = std::process::Command::new("open")
.arg(path) .arg(path)
.spawn() .spawn()
.expect("Failed to open file"); .context("invoking open command")
.log_err();
}) })
.detach(); .detach();
} }