From 3951bc0c02628d7ae99089b590c5139b23a01041 Mon Sep 17 00:00:00 2001 From: Maximiliano Sandoval Date: Sun, 19 Jan 2025 01:19:39 +0100 Subject: [PATCH] camera: Properly detect we dont have camera access --- src/widgets/camera.rs | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/widgets/camera.rs b/src/widgets/camera.rs index 2bc1ab6b..c085e376 100644 --- a/src/widgets/camera.rs +++ b/src/widgets/camera.rs @@ -310,6 +310,13 @@ impl Camera { Self::default() } + fn on_portal_not_allowed(&self) { + // We don't start the device provider if we are not + // allowed to use cameras. + self.imp().permission_denied.set(true); + self.update_state(); + } + pub async fn start(&self) { let provider = self.imp().provider.get().unwrap(); @@ -326,21 +333,23 @@ impl Camera { log::error!("Could not use the camera portal: {err}"); }; } - Err(err) => { - if let Some(ashpd::Error::Portal(ashpd::PortalError::NotAllowed( - _inner_err, - ))) = err.downcast_ref::() - { - // We don't start the device provider if we are not - // allowed to use cameras. - log::warn!("{err:#}"); - obj.imp().permission_denied.set(true); - obj.update_state(); + Err(err) => match err.downcast_ref::() { + Some(ashpd::Error::Portal(ashpd::PortalError::NotAllowed(err))) => { + log::warn!("Permission to use the camera portal denied: {err:#?}"); + obj.on_portal_not_allowed(); return; - } else { - log::warn!("Could not use the camera portal: {err:#}") } - } + Some(ashpd::Error::Zbus(ashpd::zbus::Error::MethodError( + name, + _, + message, + ))) if *name == "org.freedesktop.portal.Error.NotAllowed" => { + log::warn!("Permission to use the camera portal denied: {message}"); + obj.on_portal_not_allowed(); + return; + } + _ => (), + }, } if let Err(err) = provider.start_with_default(glib::clone!( -- GitLab