blocking_dialog/linux/
pick_files.rs1use crate::{BlockingDialogError, BlockingPickFilesDialog};
5use std::path::PathBuf;
6use std::process::Command;
7
8fn parse_multi_select(raw: &str) -> Vec<PathBuf> {
9 raw.split('|').map(PathBuf::from).collect()
10}
11
12impl<'a> BlockingPickFilesDialog<'a> {
13 pub fn show(&self) -> Result<Vec<PathBuf>, BlockingDialogError> {
14 let mut args = vec!["--file-selection", "--title", self.title];
15
16 if self.multiple {
17 args.push("--multiple");
18 }
19
20 let output = Command::new("zenity").args(args).output()?;
21 let stdout = String::from_utf8_lossy(&output.stdout);
22 let trimmed = stdout.trim();
23
24 if trimmed.is_empty() {
25 Ok(Vec::new())
26 } else {
27 Ok(parse_multi_select(trimmed))
28 }
29 }
30}