[gnome-control-center] printers: Separate canonicalization of device name



commit 375c5b0086d376393d788965bce307fb91424d72
Author: Marek Kasik <mkasik redhat com>
Date:   Tue Jul 29 16:47:14 2014 +0200

    printers: Separate canonicalization of device name
    
    Move code for canonicalization of device names to
    a separate function for reusability.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=695564

 panels/printers/pp-new-printer-dialog.c |  100 +++----------------------------
 panels/printers/pp-utils.c              |   88 +++++++++++++++++++++++++++
 panels/printers/pp-utils.h              |    6 ++
 3 files changed, 102 insertions(+), 92 deletions(-)
---
diff --git a/panels/printers/pp-new-printer-dialog.c b/panels/printers/pp-new-printer-dialog.c
index c2800ff..fdfefd2 100644
--- a/panels/printers/pp-new-printer-dialog.c
+++ b/panels/printers/pp-new-printer-dialog.c
@@ -604,14 +604,7 @@ add_device_to_list (PpNewPrinterDialog *dialog,
 {
   PpNewPrinterDialogPrivate *priv = dialog->priv;
   PpPrintDevice             *store_device;
-  PpPrintDevice             *item;
-  gboolean                   already_present;
-  GList                     *iter;
-  gchar                     *name = NULL;
-  gchar                     *canonized_name = NULL;
-  gchar                     *new_name;
-  gchar                     *new_canonized_name = NULL;
-  gint                       name_index, j;
+  gchar                     *canonicalized_name = NULL;
 
   if (device)
     {
@@ -631,93 +624,16 @@ add_device_to_list (PpNewPrinterDialog *dialog,
           store_device->network_device = g_strcmp0 (device->device_class, "network") == 0;
           store_device->show = TRUE;
 
-          if (device->device_id)
-            {
-              name = get_tag_value (device->device_id, "mdl");
-              if (!name)
-                name = get_tag_value (device->device_id, "model");
-            }
-
-          if (!name &&
-              device->device_make_and_model &&
-              device->device_make_and_model[0] != '\0')
-            {
-              name = g_strdup (device->device_make_and_model);
-            }
-
-          if (!name &&
-              device->device_name &&
-              device->device_name[0] != '\0')
-            {
-              name = g_strdup (device->device_name);
-            }
-
-          if (!name &&
-              device->device_info &&
-              device->device_info[0] != '\0')
-            {
-              name = g_strdup (device->device_info);
-            }
-
-          g_strstrip (name);
-
-          name_index = 2;
-          already_present = FALSE;
-          do
-            {
-              if (already_present)
-                {
-                  new_name = g_strdup_printf ("%s %d", name, name_index);
-                  name_index++;
-                }
-              else
-                {
-                  new_name = g_strdup (name);
-                }
-
-              if (new_name)
-                {
-                  new_canonized_name = g_strcanon (g_strdup (new_name), ALLOWED_CHARACTERS, '-');
-                }
-
-              already_present = FALSE;
-              for (j = 0; j < priv->num_of_dests; j++)
-                if (g_strcmp0 (priv->dests[j].name, new_canonized_name) == 0)
-                  already_present = TRUE;
-
-              for (iter = priv->devices; iter; iter = iter->next)
-                {
-                  item = (PpPrintDevice *) iter->data;
-                  if (g_strcmp0 (item->device_name, new_canonized_name) == 0)
-                    already_present = TRUE;
-                }
-
-              for (iter = priv->new_devices; iter; iter = iter->next)
-                {
-                  item = (PpPrintDevice *) iter->data;
-                  if (g_strcmp0 (item->device_name, new_canonized_name) == 0)
-                    already_present = TRUE;
-                }
-
-              if (already_present)
-                {
-                  g_free (new_name);
-                  g_free (new_canonized_name);
-                }
-              else
-                {
-                  g_free (name);
-                  g_free (canonized_name);
-                  name = new_name;
-                  canonized_name = new_canonized_name;
-                }
-            } while (already_present);
+          canonicalized_name = canonicalize_device_name (priv->devices,
+                                                         priv->new_devices,
+                                                         priv->dests,
+                                                         priv->num_of_dests,
+                                                         store_device);
 
           g_free (store_device->display_name);
-          store_device->display_name = g_strdup (canonized_name);
+          store_device->display_name = g_strdup (canonicalized_name);
           g_free (store_device->device_name);
-          store_device->device_name = canonized_name;
-          g_free (name);
+          store_device->device_name = canonicalized_name;
 
           if (new_device)
             priv->new_devices = g_list_append (priv->new_devices, store_device);
diff --git a/panels/printers/pp-utils.c b/panels/printers/pp-utils.c
index 250040f..6730c6e 100644
--- a/panels/printers/pp-utils.c
+++ b/panels/printers/pp-utils.c
@@ -4146,3 +4146,91 @@ guess_device_hostname (PpPrintDevice *device)
 
   return result;
 }
+
+gchar *
+canonicalize_device_name (GList         *devices,
+                          GList         *new_devices,
+                          cups_dest_t   *dests,
+                          gint           num_of_dests,
+                          PpPrintDevice *device)
+{
+  PpPrintDevice *item;
+  gboolean       already_present;
+  GList         *iter;
+  gchar         *name = NULL;
+  gchar         *new_name;
+  gint           name_index, j;
+
+  if (device->device_id != NULL)
+    {
+      name = get_tag_value (device->device_id, "mdl");
+      if (name == NULL)
+        name = get_tag_value (device->device_id, "model");
+    }
+
+  if (name == NULL &&
+      device->device_make_and_model != NULL &&
+      device->device_make_and_model[0] != '\0')
+    {
+      name = g_strdup (device->device_make_and_model);
+    }
+
+  if (name == NULL &&
+      device->device_original_name != NULL &&
+      device->device_original_name[0] != '\0')
+    {
+      name = g_strdup (device->device_original_name);
+    }
+
+  if (name == NULL &&
+      device->device_info != NULL &&
+      device->device_info[0] != '\0')
+    {
+      name = g_strdup (device->device_info);
+    }
+
+  g_strstrip (name);
+  g_strcanon (name, ALLOWED_CHARACTERS, '-');
+
+  name_index = 2;
+  already_present = FALSE;
+  do
+    {
+      if (already_present)
+        {
+          new_name = g_strdup_printf ("%s-%d", name, name_index);
+          name_index++;
+        }
+      else
+        {
+          new_name = g_strdup (name);
+        }
+
+      already_present = FALSE;
+      for (j = 0; j < num_of_dests; j++)
+        if (g_strcmp0 (dests[j].name, new_name) == 0)
+          already_present = TRUE;
+
+      for (iter = devices; iter; iter = iter->next)
+        {
+          item = (PpPrintDevice *) iter->data;
+          if (g_strcmp0 (item->device_original_name, new_name) == 0)
+            already_present = TRUE;
+        }
+
+      for (iter = new_devices; iter; iter = iter->next)
+        {
+          item = (PpPrintDevice *) iter->data;
+          if (g_strcmp0 (item->device_original_name, new_name) == 0)
+            already_present = TRUE;
+        }
+
+      if (already_present)
+        g_free (new_name);
+
+    } while (already_present);
+
+  g_free (name);
+
+  return new_name;
+}
diff --git a/panels/printers/pp-utils.h b/panels/printers/pp-utils.h
index f9bfd6e..11bc75c 100644
--- a/panels/printers/pp-utils.h
+++ b/panels/printers/pp-utils.h
@@ -308,6 +308,12 @@ void        get_cups_devices_async (GCancellable *cancellable,
 
 gchar      *guess_device_hostname (PpPrintDevice *device);
 
+gchar      *canonicalize_device_name (GList         *devices,
+                                      GList         *new_devices,
+                                      cups_dest_t   *dests,
+                                      gint           num_of_dests,
+                                      PpPrintDevice *device);
+
 G_END_DECLS
 
 #endif /* __PP_UTILS_H */


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