From 14fad2ffad078b7851ad93d6796b70fc73a019ed Mon Sep 17 00:00:00 2001 From: Sophie Herold Date: Thu, 3 Aug 2023 21:29:41 +0200 Subject: [PATCH] fileModel: Do file listing after monitor init fail Before, the code would not continue to listing the files if connecting to the file monitor failed. Therefore, browsing files was not available on SMB where file monitors don't work. Closes #200 --- src/file_model.rs | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/file_model.rs b/src/file_model.rs index 1f3ec83..ea8b46a 100644 --- a/src/file_model.rs +++ b/src/file_model.rs @@ -93,15 +93,21 @@ impl LpFileModel { pub async fn load_directory(&self, directory: gio::File) -> anyhow::Result<()> { self.imp().directory.set(directory.clone()).unwrap(); - let monitor = directory - .monitor_directory(gio::FileMonitorFlags::WATCH_MOVES, gio::Cancellable::NONE)?; - - monitor.connect_changed( - glib::clone!(@weak self as obj => move |_monitor, file_a, file_b, event| { - obj.file_monitor_cb(event, file_a, file_b); - }), - ); - self.imp().monitor.set(monitor).unwrap(); + let monitor = + directory.monitor_directory(gio::FileMonitorFlags::WATCH_MOVES, gio::Cancellable::NONE); + match monitor { + Ok(monitor) => { + monitor.connect_changed( + glib::clone!(@weak self as obj => move |_monitor, file_a, file_b, event| { + obj.file_monitor_cb(event, file_a, file_b); + }), + ); + self.imp().monitor.set(monitor).unwrap(); + } + Err(err) => { + log::info!("Cannot monitor directory: {err}"); + } + } let new_files_result = gio::spawn_blocking(move || { let mut files = IndexMap::new();