about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-06-11 18:19:39 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-06-11 18:19:39 +0200
commit286b742230cf2c1a0ac944ae2d01c3e0782d0017 (patch)
tree04cf477add9c9584ae428c08e40b611889a31988
parentmodules/qutebrowser: Use the shell wrapper (diff)
downloadnixos-config-286b742230cf2c1a0ac944ae2d01c3e0782d0017.zip
pkgs/tskm/open: Allow opening multiple URLs at a time
-rw-r--r--pkgs/by-name/ts/tskm/src/browser/mod.rs16
-rw-r--r--pkgs/by-name/ts/tskm/src/cli.rs8
-rw-r--r--pkgs/by-name/ts/tskm/src/interface/input/handle.rs9
-rw-r--r--pkgs/by-name/ts/tskm/src/interface/open/handle.rs10
4 files changed, 23 insertions, 20 deletions
diff --git a/pkgs/by-name/ts/tskm/src/browser/mod.rs b/pkgs/by-name/ts/tskm/src/browser/mod.rs
index 8dd52663..29abfcbd 100644
--- a/pkgs/by-name/ts/tskm/src/browser/mod.rs
+++ b/pkgs/by-name/ts/tskm/src/browser/mod.rs
@@ -17,7 +17,7 @@ use crate::{state::State, task};
 pub fn open_in_browser(
     selected_project: &task::Project,
     state: &mut State,
-    url: Option<Url>,
+    urls: Option<Vec<Url>>,
 ) -> Result<()> {
     let old_project: Option<task::Project> =
         task::Project::get_current().context("Failed to get currently active project")?;
@@ -104,17 +104,17 @@ pub fn open_in_browser(
         if ipc_socket_path.exists() {
             let mut stream = UnixStream::connect(ipc_socket_path)?;
 
-            let real_url = if let Some(url) = url {
-                url.to_string()
+            let real_url = if let Some(urls) = urls {
+                urls.into_iter().map(|url| url.to_string()).collect()
             } else {
                 // Always add a new tab, so that qutebrowser is marked as “urgent”.
-                "qute://start".to_owned()
+                vec!["qute://start".to_owned()]
             };
 
             stream.write_all(
                 json! {
                     {
-                        "args": [real_url],
+                        "args": real_url,
                         "target_arg": null,
                         "version": "1.0.4",
                         "protocol_version": 1,
@@ -128,10 +128,10 @@ pub fn open_in_browser(
 
             ExitStatus::default()
         } else {
-            let args = if let Some(url) = url {
-                &[url.to_string()][..]
+            let args = if let Some(urls) = urls {
+                urls.iter().map(|url| url.to_string()).collect()
             } else {
-                &[][..]
+                vec![]
             };
 
             process::Command::new(format!(
diff --git a/pkgs/by-name/ts/tskm/src/cli.rs b/pkgs/by-name/ts/tskm/src/cli.rs
index 90d6023b..23d9545f 100644
--- a/pkgs/by-name/ts/tskm/src/cli.rs
+++ b/pkgs/by-name/ts/tskm/src/cli.rs
@@ -126,8 +126,8 @@ pub enum OpenCommand {
         #[arg(value_parser = task::Project::from_project_string, add = ArgValueCompleter::new(complete_project))]
         project: task::Project,
 
-        /// The URL to open.
-        url: Option<Url>,
+        /// The URLs to open.
+        urls: Option<Vec<Url>>,
     },
 
     /// Open a selected project in it's Qutebrowser profile.
@@ -135,8 +135,8 @@ pub enum OpenCommand {
     /// This will use rofi's dmenu mode to select one project from the list of all registered
     /// projects.
     Select {
-        /// The URL to open.
-        url: Option<Url>,
+        /// The URLs to open.
+        urls: Option<Vec<Url>>,
     },
 
     /// List all open tabs in the project.
diff --git a/pkgs/by-name/ts/tskm/src/interface/input/handle.rs b/pkgs/by-name/ts/tskm/src/interface/input/handle.rs
index 11304633..76eea6dc 100644
--- a/pkgs/by-name/ts/tskm/src/interface/input/handle.rs
+++ b/pkgs/by-name/ts/tskm/src/interface/input/handle.rs
@@ -69,10 +69,11 @@ pub fn handle(command: InputCommand, state: &mut State) -> Result<()> {
             'outer: for all in Input::all()?.chunks(100) {
                 info!("Starting review for the first hundred URLs.");
 
-                for input in all {
-                    info!("-> '{input}'");
-                    open_in_browser(&project, state, Some(input.url.clone()))?;
-                }
+                open_in_browser(
+                    &project,
+                    state,
+                    Some(all.iter().map(|f| f.url.clone()).collect()),
+                )?;
 
                 {
                     use std::io::{stdin, stdout, Write};
diff --git a/pkgs/by-name/ts/tskm/src/interface/open/handle.rs b/pkgs/by-name/ts/tskm/src/interface/open/handle.rs
index ca54b422..6243fd32 100644
--- a/pkgs/by-name/ts/tskm/src/interface/open/handle.rs
+++ b/pkgs/by-name/ts/tskm/src/interface/open/handle.rs
@@ -8,6 +8,8 @@
 // You should have received a copy of the License along with this program.
 // If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
 
+use std::str::FromStr;
+
 use anyhow::{bail, Context, Result};
 use log::{error, info};
 use url::Url;
@@ -51,13 +53,13 @@ pub fn handle(command: OpenCommand, state: &mut State) -> Result<()> {
                 }
             }
         }
-        OpenCommand::Project { project, url } => {
+        OpenCommand::Project { project, urls } => {
             project.touch().context("Failed to touch project")?;
-            open_in_browser(&project, state, url).with_context(|| {
+            open_in_browser(&project, state, urls).with_context(|| {
                 format!("Failed to open project: {}", project.to_project_display())
             })?;
         }
-        OpenCommand::Select { url } => {
+        OpenCommand::Select { urls } => {
             let selected_project: task::Project = task::Project::from_project_string(
                 &rofi::select(
                     task::Project::all()
@@ -75,7 +77,7 @@ pub fn handle(command: OpenCommand, state: &mut State) -> Result<()> {
                 .touch()
                 .context("Failed to touch project")?;
 
-            open_in_browser(&selected_project, state, url).context("Failed to open project")?;
+            open_in_browser(&selected_project, state, urls).context("Failed to open project")?;
         }
         OpenCommand::ListTabs { projects, mode } => {
             let projects = {