diff --git a/src/mounter/gvfs.rs b/src/mounter/gvfs.rs index d5db451e..b437f8c6 100644 --- a/src/mounter/gvfs.rs +++ b/src/mounter/gvfs.rs @@ -217,7 +217,7 @@ fn network_scan(uri: &str, sizes: IconSizes) -> Result, String> { Ok(items) } -fn dir_info(uri: &str) -> Result<(String, String), glib::Error> { +fn dir_info(uri: &str) -> Result<(String, String, Option), glib::Error> { let (resolved_uri, file) = resolve_uri(uri); let info = file.query_info( gio::FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME, @@ -225,7 +225,7 @@ fn dir_info(uri: &str) -> Result<(String, String), glib::Error> { gio::Cancellable::NONE, )?; - Ok((resolved_uri, info.display_name().into())) + Ok((resolved_uri, info.display_name().into(), file.path())) } fn mount_op(uri: String, event_tx: mpsc::UnboundedSender) -> gio::MountOperation { @@ -288,7 +288,10 @@ enum Cmd { IconSizes, mpsc::Sender, String>>, ), - DirInfo(String, mpsc::Sender>), + DirInfo( + String, + mpsc::Sender), glib::Error>>, + ), Unmount(MounterItem), } @@ -651,7 +654,7 @@ impl Mounter for Gvfs { items_rx.blocking_recv() } - fn dir_info(&self, uri: &str) -> Option<(String, String)> { + fn dir_info(&self, uri: &str) -> Option<(String, String, Option)> { let (result_tx, mut result_rx) = mpsc::channel(1); self.command_tx .send(Cmd::DirInfo(uri.to_string(), result_tx)) diff --git a/src/mounter/mod.rs b/src/mounter/mod.rs index 5aa6290a..b97f32a6 100644 --- a/src/mounter/mod.rs +++ b/src/mounter/mod.rs @@ -116,7 +116,7 @@ pub trait Mounter: Send + Sync { fn mount(&self, item: MounterItem) -> Task<()>; fn network_drive(&self, uri: String) -> Task<()>; fn network_scan(&self, uri: &str, sizes: IconSizes) -> Option, String>>; - fn dir_info(&self, uri: &str) -> Option<(String, String)>; + fn dir_info(&self, uri: &str) -> Option<(String, String, Option)>; fn unmount(&self, item: MounterItem) -> Task<()>; fn subscription(&self) -> Subscription; } diff --git a/src/tab.rs b/src/tab.rs index 0e36954b..d8ad9228 100644 --- a/src/tab.rs +++ b/src/tab.rs @@ -1362,11 +1362,11 @@ pub struct EditLocation { impl EditLocation { pub fn resolve(&self) -> Option { - if let Location::Network(uri, _, path) = &self.location { + if let Location::Network(uri, ..) = &self.location { MOUNTERS .values() .find_map(|mounter| mounter.dir_info(uri)) - .map(|(uri, display_name)| Location::Network(uri, display_name, path.clone())) + .map(|(uri, display_name, path_opt)| Location::Network(uri, display_name, path_opt)) } else { let Some(selected) = self.selected else { return Some(self.location.clone());