about summary refs log tree commit diff stats
path: root/pkgs/by-name/ts/tskm/src/browser
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-07-06 10:45:16 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-07-06 10:45:16 +0200
commitdcf30151c73b0b2d4fd506868966bb4c7dd09a2e (patch)
tree268718935f1db6831fa52499b0d93dbc7b8163bd /pkgs/by-name/ts/tskm/src/browser
parentmodules/river/keymap: Support the common `<Super-l>` mapping (diff)
downloadnixos-config-dcf30151c73b0b2d4fd506868966bb4c7dd09a2e.zip
pkgs/tskm/browser/open: Don't fail on stale qutebrowser ipc sockets
Diffstat (limited to '')
-rw-r--r--pkgs/by-name/ts/tskm/src/browser/mod.rs32
1 files changed, 28 insertions, 4 deletions
diff --git a/pkgs/by-name/ts/tskm/src/browser/mod.rs b/pkgs/by-name/ts/tskm/src/browser/mod.rs
index 29abfcbd..d83bcbc4 100644
--- a/pkgs/by-name/ts/tskm/src/browser/mod.rs
+++ b/pkgs/by-name/ts/tskm/src/browser/mod.rs
@@ -1,5 +1,5 @@
 use std::{
-    env,
+    env, fs,
     io::Write,
     os::unix::net::UnixStream,
     path::PathBuf,
@@ -101,9 +101,33 @@ pub fn open_in_browser(
             )
         }));
 
-        if ipc_socket_path.exists() {
-            let mut stream = UnixStream::connect(ipc_socket_path)?;
+        let socket = if ipc_socket_path.exists() {
+            match UnixStream::connect(&ipc_socket_path) {
+                Ok(ok) => Some(ok),
+                Err(err) => match err.kind() {
+                    std::io::ErrorKind::ConnectionRefused => {
+                        // There is no qutebrowser listening to our connection.
+                        fs::remove_file(&ipc_socket_path).with_context(|| {
+                            format!(
+                                "Failed to remove orphaned qutebrowser socket: {}",
+                                ipc_socket_path.display()
+                            )
+                        })?;
+                        None
+                    }
+                    _ => Err(err).with_context(|| {
+                        format!(
+                            "Failed to connect to qutebrowser's ipc socket at: {}",
+                            ipc_socket_path.display()
+                        )
+                    })?,
+                },
+            }
+        } else {
+            None
+        };
 
+        if let Some(mut stream) = socket {
             let real_url = if let Some(urls) = urls {
                 urls.into_iter().map(|url| url.to_string()).collect()
             } else {
@@ -129,7 +153,7 @@ pub fn open_in_browser(
             ExitStatus::default()
         } else {
             let args = if let Some(urls) = urls {
-                urls.iter().map(|url| url.to_string()).collect()
+                urls.iter().map(ToString::to_string).collect()
             } else {
                 vec![]
             };