Add support for native file picker

This commit is contained in:
cediackermann 2025-01-13 15:11:21 +01:00
parent 58f18e5cfd
commit 29c4cacbbb
3 changed files with 210 additions and 28 deletions

224
Cargo.lock generated
View file

@ -35,7 +35,7 @@ dependencies = [
"atspi-common", "atspi-common",
"serde", "serde",
"thiserror", "thiserror",
"zvariant", "zvariant 4.2.0",
] ]
[[package]] [[package]]
@ -78,7 +78,7 @@ dependencies = [
"futures-lite", "futures-lite",
"futures-util", "futures-util",
"serde", "serde",
"zbus", "zbus 4.4.0",
] ]
[[package]] [[package]]
@ -249,6 +249,28 @@ dependencies = [
"libloading", "libloading",
] ]
[[package]]
name = "ashpd"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e9c39d707614dbcc6bed00015539f488d8e3fe3e66ed60961efc0c90f4b380b3"
dependencies = [
"async-fs",
"async-net",
"enumflags2",
"futures-channel",
"futures-util",
"rand",
"raw-window-handle",
"serde",
"serde_repr",
"url",
"wayland-backend",
"wayland-client",
"wayland-protocols",
"zbus 5.3.0",
]
[[package]] [[package]]
name = "async-broadcast" name = "async-broadcast"
version = "0.7.2" version = "0.7.2"
@ -327,6 +349,17 @@ dependencies = [
"pin-project-lite", "pin-project-lite",
] ]
[[package]]
name = "async-net"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7"
dependencies = [
"async-io",
"blocking",
"futures-lite",
]
[[package]] [[package]]
name = "async-process" name = "async-process"
version = "2.3.0" version = "2.3.0"
@ -424,11 +457,11 @@ dependencies = [
"enumflags2", "enumflags2",
"serde", "serde",
"static_assertions", "static_assertions",
"zbus", "zbus 4.4.0",
"zbus-lockstep", "zbus-lockstep",
"zbus-lockstep-macros", "zbus-lockstep-macros",
"zbus_names", "zbus_names 3.0.0",
"zvariant", "zvariant 4.2.0",
] ]
[[package]] [[package]]
@ -440,7 +473,7 @@ dependencies = [
"atspi-common", "atspi-common",
"atspi-proxies", "atspi-proxies",
"futures-lite", "futures-lite",
"zbus", "zbus 4.4.0",
] ]
[[package]] [[package]]
@ -451,8 +484,8 @@ checksum = "a5e6c5de3e524cf967569722446bcd458d5032348554d9a17d7d72b041ab7496"
dependencies = [ dependencies = [
"atspi-common", "atspi-common",
"serde", "serde",
"zbus", "zbus 4.4.0",
"zvariant", "zvariant 4.2.0",
] ]
[[package]] [[package]]
@ -1379,6 +1412,15 @@ dependencies = [
"percent-encoding", "percent-encoding",
] ]
[[package]]
name = "futures-channel"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
dependencies = [
"futures-core",
]
[[package]] [[package]]
name = "futures-core" name = "futures-core"
version = "0.3.31" version = "0.3.31"
@ -2655,6 +2697,12 @@ dependencies = [
"windows-sys 0.59.0", "windows-sys 0.59.0",
] ]
[[package]]
name = "pollster"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3"
[[package]] [[package]]
name = "ppv-lite86" name = "ppv-lite86"
version = "0.2.20" version = "0.2.20"
@ -2836,6 +2884,30 @@ dependencies = [
"usvg", "usvg",
] ]
[[package]]
name = "rfd"
version = "0.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a24763657bff09769a8ccf12c8b8a50416fb035fe199263b4c5071e4e3f006f"
dependencies = [
"ashpd",
"block2",
"core-foundation 0.10.0",
"core-foundation-sys",
"js-sys",
"log",
"objc2",
"objc2-app-kit",
"objc2-foundation",
"pollster",
"raw-window-handle",
"urlencoding",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
"windows-sys 0.59.0",
]
[[package]] [[package]]
name = "rgb" name = "rgb"
version = "0.8.50" version = "0.8.50"
@ -3232,6 +3304,7 @@ dependencies = [
"egui 0.14.2", "egui 0.14.2",
"egui-file-dialog", "egui-file-dialog",
"egui_extras", "egui_extras",
"rfd",
"rodio", "rodio",
"serde", "serde",
] ]
@ -3493,8 +3566,15 @@ dependencies = [
"form_urlencoded", "form_urlencoded",
"idna", "idna",
"percent-encoding", "percent-encoding",
"serde",
] ]
[[package]]
name = "urlencoding"
version = "2.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
[[package]] [[package]]
name = "usvg" name = "usvg"
version = "0.37.0" version = "0.37.0"
@ -4449,9 +4529,45 @@ dependencies = [
"uds_windows", "uds_windows",
"windows-sys 0.52.0", "windows-sys 0.52.0",
"xdg-home", "xdg-home",
"zbus_macros", "zbus_macros 4.4.0",
"zbus_names", "zbus_names 3.0.0",
"zvariant", "zvariant 4.2.0",
]
[[package]]
name = "zbus"
version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "192a0d989036cd60a1e91a54c9851fb9ad5bd96125d41803eed79d2e2ef74bd7"
dependencies = [
"async-broadcast",
"async-executor",
"async-fs",
"async-io",
"async-lock",
"async-process",
"async-recursion",
"async-task",
"async-trait",
"blocking",
"enumflags2",
"event-listener",
"futures-core",
"futures-util",
"hex",
"nix",
"ordered-stream",
"serde",
"serde_repr",
"static_assertions",
"tracing",
"uds_windows",
"windows-sys 0.59.0",
"winnow",
"xdg-home",
"zbus_macros 5.3.0",
"zbus_names 4.1.1",
"zvariant 5.2.0",
] ]
[[package]] [[package]]
@ -4461,7 +4577,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ca2c5dceb099bddaade154055c926bb8ae507a18756ba1d8963fd7b51d8ed1d" checksum = "4ca2c5dceb099bddaade154055c926bb8ae507a18756ba1d8963fd7b51d8ed1d"
dependencies = [ dependencies = [
"zbus_xml", "zbus_xml",
"zvariant", "zvariant 4.2.0",
] ]
[[package]] [[package]]
@ -4475,7 +4591,7 @@ dependencies = [
"syn", "syn",
"zbus-lockstep", "zbus-lockstep",
"zbus_xml", "zbus_xml",
"zvariant", "zvariant 4.2.0",
] ]
[[package]] [[package]]
@ -4488,7 +4604,22 @@ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn", "syn",
"zvariant_utils", "zvariant_utils 2.1.0",
]
[[package]]
name = "zbus_macros"
version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3685b5c81fce630efc3e143a4ded235b107f1b1cdf186c3f115529e5e5ae4265"
dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
"syn",
"zbus_names 4.1.1",
"zvariant 5.2.0",
"zvariant_utils 3.1.0",
] ]
[[package]] [[package]]
@ -4499,7 +4630,19 @@ checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c"
dependencies = [ dependencies = [
"serde", "serde",
"static_assertions", "static_assertions",
"zvariant", "zvariant 4.2.0",
]
[[package]]
name = "zbus_names"
version = "4.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "519629a3f80976d89c575895b05677cbc45eaf9f70d62a364d819ba646409cc8"
dependencies = [
"serde",
"static_assertions",
"winnow",
"zvariant 5.2.0",
] ]
[[package]] [[package]]
@ -4511,8 +4654,8 @@ dependencies = [
"quick-xml 0.30.0", "quick-xml 0.30.0",
"serde", "serde",
"static_assertions", "static_assertions",
"zbus_names", "zbus_names 3.0.0",
"zvariant", "zvariant 4.2.0",
] ]
[[package]] [[package]]
@ -4595,7 +4738,23 @@ dependencies = [
"enumflags2", "enumflags2",
"serde", "serde",
"static_assertions", "static_assertions",
"zvariant_derive", "zvariant_derive 4.2.0",
]
[[package]]
name = "zvariant"
version = "5.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55e6b9b5f1361de2d5e7d9fd1ee5f6f7fcb6060618a1f82f3472f58f2b8d4be9"
dependencies = [
"endi",
"enumflags2",
"serde",
"static_assertions",
"url",
"winnow",
"zvariant_derive 5.2.0",
"zvariant_utils 3.1.0",
] ]
[[package]] [[package]]
@ -4608,7 +4767,20 @@ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn", "syn",
"zvariant_utils", "zvariant_utils 2.1.0",
]
[[package]]
name = "zvariant_derive"
version = "5.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "573a8dd76961957108b10f7a45bac6ab1ea3e9b7fe01aff88325dc57bb8f5c8b"
dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
"syn",
"zvariant_utils 3.1.0",
] ]
[[package]] [[package]]
@ -4621,3 +4793,17 @@ dependencies = [
"quote", "quote",
"syn", "syn",
] ]
[[package]]
name = "zvariant_utils"
version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ddd46446ea2a1f353bfda53e35f17633afa79f4fe290a611c94645c69fe96a50"
dependencies = [
"proc-macro2",
"quote",
"serde",
"static_assertions",
"syn",
"winnow",
]

View file

@ -11,3 +11,4 @@ eframe = "0.30.0"
egui_extras = { version = "0.30.0", features = ["all_loaders"] } egui_extras = { version = "0.30.0", features = ["all_loaders"] }
egui = { version = "0.14", features = ["default"] } egui = { version = "0.14", features = ["default"] }
egui-file-dialog = "0.8.0" egui-file-dialog = "0.8.0"
rfd = "0.15.2"

View file

@ -1,11 +1,9 @@
use eframe::egui; use eframe::egui;
use std::path::PathBuf; use std::path::PathBuf;
use egui_file_dialog::FileDialog; use rfd::FileDialog;
use crate::dispatcher::Dispatcher; use crate::dispatcher::Dispatcher;
pub struct UIApp { pub struct UIApp {
file_dialog: FileDialog,
picked_file: Option<PathBuf>, picked_file: Option<PathBuf>,
addresses: Vec<String>, addresses: Vec<String>,
} }
@ -13,7 +11,6 @@ pub struct UIApp {
impl Default for UIApp { impl Default for UIApp {
fn default() -> Self { fn default() -> Self {
Self { Self {
file_dialog: FileDialog::new(),
picked_file: None, picked_file: None,
addresses: Vec::new(), addresses: Vec::new(),
} }
@ -52,13 +49,11 @@ impl eframe::App for UIApp {
ui.separator(); ui.separator();
if ui.button("Pick file").clicked() { if ui.button("Pick file").clicked() {
self.file_dialog.pick_file(); if let Some(file) = FileDialog::new().set_directory("/").pick_file() {
self.picked_file = Some(file);
}
} }
ui.label(format!("Picked file: {:?}", self.picked_file)); ui.label(format!("Picked file: {:?}", self.picked_file));
self.file_dialog.update(ctx);
if let Some(path) = self.file_dialog.take_picked() {
self.picked_file = Some(path.to_path_buf());
}
ui.separator(); ui.separator();
if ui.button("Play sound").clicked() { if ui.button("Play sound").clicked() {