[gnome-control-center] fingerprint-dialog: Use more user friendly errors when showing them to user



commit 01fdfaccf8f18a41ea593d922d9b003be09881f9
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date:   Fri Dec 11 16:38:07 2020 +0100

    fingerprint-dialog: Use more user friendly errors when showing them to user
    
    Translate dbus errors into something that can be translated to user,
    while leave to warnings all the details to help debugging.
    
    Fixes: #1200

 panels/user-accounts/cc-fingerprint-dialog.c | 64 ++++++++++++++++++++--------
 1 file changed, 47 insertions(+), 17 deletions(-)
---
diff --git a/panels/user-accounts/cc-fingerprint-dialog.c b/panels/user-accounts/cc-fingerprint-dialog.c
index 5bdcc2b43..142ea7c07 100644
--- a/panels/user-accounts/cc-fingerprint-dialog.c
+++ b/panels/user-accounts/cc-fingerprint-dialog.c
@@ -31,6 +31,8 @@
 
 #include "config.h"
 
+#define CC_FPRINTD_NAME "net.reactivated.Fprint"
+
 /* Translate fprintd strings */
 #define TR(s) dgettext ("fprintd", s)
 #include "fingerprint-strings.h"
@@ -193,6 +195,39 @@ remove_dialog_state (CcFingerprintDialog *self,
   return update_dialog_state (self, (self->dialog_state & ~state));
 }
 
+static const char *
+dbus_error_to_human (CcFingerprintDialog *self,
+                     GError              *error)
+{
+  g_autofree char *dbus_error = g_dbus_error_get_remote_error (error);
+
+  if (dbus_error == NULL)
+    { /* Fallback to generic */ }
+  else if (g_str_equal (dbus_error, CC_FPRINTD_NAME ".Error.ClaimDevice"))
+    return _("the device needs to be claimed to perform this action");
+  else if (g_str_equal (dbus_error, CC_FPRINTD_NAME ".Error.AlreadyInUse"))
+    return _("the device is already claimed by another process");
+  else if (g_str_equal (dbus_error, CC_FPRINTD_NAME ".Error.PermissionDenied"))
+    return _("you do not have permission to perform the action");
+  else if (g_str_equal (dbus_error, CC_FPRINTD_NAME ".Error.NoEnrolledPrints"))
+    return _("no prints have been enrolled");
+  else if (g_str_equal (dbus_error, CC_FPRINTD_NAME ".Error.NoActionInProgress"))
+    { /* Fallback to generic */ }
+  else if (g_str_equal (dbus_error, CC_FPRINTD_NAME ".Error.InvalidFingername"))
+    { /* Fallback to generic */ }
+  else if (g_str_equal (dbus_error, CC_FPRINTD_NAME ".Error.Internal"))
+    { /* Fallback to generic */ }
+
+  if (self->dialog_state & DIALOG_STATE_DEVICE_ENROLLING)
+    return _("Failed to communicate with the device during enrollment");
+
+  if (self->dialog_state & DIALOG_STATE_DEVICE_CLAIMED ||
+      self->dialog_state & DIALOG_STATE_DEVICE_CLAIMING)
+    return _("Failed to communicate with the fingerprint reader");
+
+  return _("Failed to communicate with the fingerprint daemon");
+}
+
 static void
 disconnect_device_signals (CcFingerprintDialog *self)
 {
@@ -516,9 +551,8 @@ list_enrolled_cb (GObject      *object,
         {
           g_autofree char *error_message = NULL;
 
-          g_dbus_error_strip_remote_error (error);
           error_message = g_strdup_printf (_("Failed to list fingerprints: %s"),
-                                           error->message);
+                                           dbus_error_to_human (self, error));
           g_warning ("Listing of fingerprints on device %s failed: %s",
                      cc_fprintd_device_get_name (self->device), error->message);
           notify_error (self, error_message);
@@ -584,9 +618,8 @@ delete_prints_cb (GObject      *object,
     {
       g_autofree char *error_message = NULL;
 
-      g_dbus_error_strip_remote_error (error);
       error_message = g_strdup_printf (_("Failed to delete saved fingerprints: %s"),
-                                       error->message);
+                                       dbus_error_to_human (self, error));
       g_warning ("Deletion of fingerprints on device %s failed: %s",
                  cc_fprintd_device_get_name (self->device), error->message);
       notify_error (self, error_message);
@@ -821,9 +854,8 @@ enroll_start_cb (GObject      *object,
 
       remove_dialog_state (self, DIALOG_STATE_DEVICE_ENROLLING);
 
-      g_dbus_error_strip_remote_error (error);
       error_message = g_strdup_printf (_("Failed to start enrollment: %s"),
-                                       error->message);
+                                       dbus_error_to_human (self, error));
       g_warning ("Enrollment on device %s failed: %s",
                  cc_fprintd_device_get_name (self->device), error->message);
       notify_error (self, error_message);
@@ -860,9 +892,8 @@ enroll_stop_cb (GObject      *object,
     {
       g_autofree char *error_message = NULL;
 
-      g_dbus_error_strip_remote_error (error);
       error_message = g_strdup_printf (_("Failed to stop enrollment: %s"),
-                                       error->message);
+                                       dbus_error_to_human (self, error));
       g_warning ("Stopping enrollment on device %s failed: %s",
                  cc_fprintd_device_get_name (self->device), error->message);
       notify_error (self, error_message);
@@ -1090,11 +1121,11 @@ release_device_cb (GObject      *object,
     {
       g_autofree char *error_message = NULL;
 
-      g_dbus_error_strip_remote_error (error);
       error_message = g_strdup_printf (_("Failed to release fingerprint device %s: %s"),
                                        cc_fprintd_device_get_name (fprintd_device),
-                                       error->message);
-      g_warning ("%s", error_message);
+                                       dbus_error_to_human (self, error));
+      g_warning ("Releasing device %s failed: %s",
+                 cc_fprintd_device_get_name (self->device), error->message);
 
       notify_error (self, error_message);
       return;
@@ -1196,11 +1227,11 @@ claim_device_cb (GObject      *object,
           (self->dialog_state & DIALOG_STATE_DEVICE_CLAIMED))
          return;
 
-      g_dbus_error_strip_remote_error (error);
       error_message = g_strdup_printf (_("Failed to claim fingerprint device %s: %s"),
                                        cc_fprintd_device_get_name (self->device),
-                                       error->message);
-      g_warning ("%s", error_message);
+                                       dbus_error_to_human (self, error));
+      g_warning ("Claiming device %s failed: %s",
+                 cc_fprintd_device_get_name (self->device), error->message);
       notify_error (self, error_message);
       return;
     }
@@ -1344,10 +1375,9 @@ on_devices_list (GObject      *object,
         {
           g_autofree char *error_message = NULL;
 
-          g_dbus_error_strip_remote_error (error);
           error_message = g_strdup_printf (_("Failed to get fingerprint devices: %s"),
-                                           error->message);
-          g_warning ("%s", error_message);
+                                           dbus_error_to_human (self, error));
+          g_warning ("Retrieving fingerprint devices failed: %s", error->message);
           notify_error (self, error_message);
         }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]