]> Pileus Git - ~andy/gtk/commitdiff
Extract function cups_printer_handle_attribute
authorJohn Ralls <jralls@ceridwen.us>
Sun, 19 Feb 2012 21:28:42 +0000 (13:28 -0800)
committerJohn Ralls <jralls@ceridwen.us>
Mon, 23 Apr 2012 19:44:06 +0000 (12:44 -0700)
modules/printbackends/cups/gtkprintbackendcups.c

index e7fd331a7339e8a4542b8e2f8f05a8c566b95436..9efd79a435ded8cf47c1b6ef82b28e48ed3b91e4 100644 (file)
@@ -1717,8 +1717,143 @@ typedef struct
   gboolean got_printer_type;
   gboolean remote_printer;
   gchar  **auth_info_required;
-  gint     default_number_up = 1;
+  gint     default_number_up;
 } PrinterSetupInfo;
+
+static void
+cups_printer_handle_attribute (GtkPrintBackendCups *cups_backend,
+                              ipp_attribute_t *attr,
+                              PrinterSetupInfo *info)
+{
+  gint i, j;
+  if (strcmp (ippGetName (attr), "printer-name") == 0 &&
+      ippGetValueTag (attr) == IPP_TAG_NAME)
+    info->printer_name = ippGetString (attr, 0, NULL);
+  else if (strcmp (ippGetName (attr), "printer-uri-supported") == 0 &&
+          ippGetValueTag (attr) == IPP_TAG_URI)
+    info->printer_uri = ippGetString (attr, 0, NULL);
+  else if (strcmp (ippGetName (attr), "member-uris") == 0 &&
+          ippGetValueTag (attr) == IPP_TAG_URI)
+    info->member_uris = ippGetString (attr, 0, NULL);
+  else if (strcmp (ippGetName (attr), "printer-location") == 0)
+    info->location = ippGetString (attr, 0, NULL);
+  else if (strcmp (ippGetName (attr), "printer-info") == 0)
+    info->description = ippGetString (attr, 0, NULL);
+  else if (strcmp (ippGetName (attr), "printer-state-message") == 0)
+    info->state_msg = ippGetString (attr, 0, NULL);
+  else if (strcmp (ippGetName (attr), "printer-state-reasons") == 0)
+    /* Store most important reason to reason_msg and set
+       its importance at printer_state_reason_level */
+    {
+      for (i = 0; i < ippGetCount (attr); i++)
+       {
+         if (strcmp (ippGetString (attr, i, NULL), "none") != 0)
+           {
+             gboolean interested_in = FALSE;
+             /* Sets is_paused flag for paused printer. */
+             if (strcmp (ippGetString (attr, i, NULL), "paused") == 0)
+               {
+                 info->is_paused = TRUE;
+               }
+
+             for (j = 0; j < G_N_ELEMENTS (printer_messages); j++)
+               if (strncmp (ippGetString (attr, i, NULL), printer_messages[j],
+                            strlen (printer_messages[j])) == 0)
+                 {
+                   interested_in = TRUE;
+                   break;
+                 }
+
+             if (interested_in)
+               {
+                 if (g_str_has_suffix (ippGetString (attr, i, NULL), "-report"))
+                   {
+                     if (info->reason_level <= GTK_PRINTER_STATE_LEVEL_INFO)
+                       {
+                         info->reason_msg = ippGetString (attr, i, NULL);
+                         info->reason_level = GTK_PRINTER_STATE_LEVEL_INFO;
+                       }
+                   }
+                 else if (g_str_has_suffix (ippGetString (attr, i, NULL), "-warning"))
+                   {
+                     if (info->reason_level <= GTK_PRINTER_STATE_LEVEL_WARNING)
+                       {
+                         info->reason_msg = ippGetString (attr, i, NULL);
+                         info->reason_level = GTK_PRINTER_STATE_LEVEL_WARNING;
+                       }
+                   }
+                 else  /* It is error in the case of no suffix. */
+                   {
+                     info->reason_msg = ippGetString (attr, i, NULL);
+                     info->reason_level = GTK_PRINTER_STATE_LEVEL_ERROR;
+                   }
+               }
+           }
+       }
+    }
+  else if (strcmp (ippGetName (attr), "printer-state") == 0)
+    info->state = ippGetInteger (attr, 0);
+  else if (strcmp (ippGetName (attr), "queued-job-count") == 0)
+    info->job_count = ippGetInteger (attr, 0);
+  else if (strcmp (ippGetName (attr), "printer-is-accepting-jobs") == 0)
+    {
+      if (ippGetBoolean (attr, 0) == 1)
+       info->is_accepting_jobs = TRUE;
+      else
+       info->is_accepting_jobs = FALSE;
+    }
+  else if (strcmp (ippGetName (attr), "job-sheets-supported") == 0)
+    {
+      if (cups_backend->covers == NULL)
+       {
+         cups_backend->number_of_covers = ippGetCount (attr);
+         cups_backend->covers = g_new (char *, cups_backend->number_of_covers + 1);
+         for (i = 0; i < cups_backend->number_of_covers; i++)
+           cups_backend->covers[i] = g_strdup (ippGetString (attr, i, NULL));
+         cups_backend->covers[cups_backend->number_of_covers] = NULL;
+       }
+    }
+  else if (strcmp (ippGetName (attr), "job-sheets-default") == 0)
+    {
+      if (ippGetCount (attr) == 2)
+       {
+         info->default_cover_before = ippGetString (attr, 0, NULL);
+         info->default_cover_after = ippGetString (attr, 1, NULL);
+       }
+    }
+  else if (strcmp (ippGetName (attr), "printer-type") == 0)
+    {
+      info->got_printer_type = TRUE;
+      if (ippGetInteger (attr, 0) & 0x00020000)
+       info->default_printer = TRUE;
+      else
+       info->default_printer = FALSE;
+
+      if (ippGetInteger (attr, 0) & 0x00000002)
+       info->remote_printer = TRUE;
+      else
+       info->remote_printer = FALSE;
+    }
+  else if (strcmp (ippGetName (attr), "auth-info-required") == 0)
+    {
+      if (strcmp (ippGetString (attr, 0, NULL), "none") != 0)
+       {
+         info->auth_info_required = g_new0 (gchar *, ippGetCount (attr) + 1);
+         for (i = 0; i < ippGetCount (attr); i++)
+           info->auth_info_required[i] = g_strdup (ippGetString (attr, i, NULL));
+       }
+    }
+  else if (strcmp (attr->name, "number-up-default") == 0)
+    {
+      info->default_number_up = attr->values[0].integer;
+    }
+  else
+    {
+      GTK_NOTE (PRINTING,
+               g_print ("CUPS Backend: Attribute %s ignored", ippGetName (attr)));
+    }
+}
+
 static void
 cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend,
                               GtkCupsResult       *result,
@@ -1779,6 +1914,7 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend,
       gchar *tmp_msg2 = NULL;
       gboolean found = FALSE;
       PrinterSetupInfo *info = g_slice_new0 (PrinterSetupInfo);
+      info->default_number_up = 1;
 
       /* Skip leading attributes until we hit a printer...
        */
@@ -1790,132 +1926,7 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend,
 
       while (attr != NULL && ippGetGroupTag (attr) == IPP_TAG_PRINTER)
       {
-        if (strcmp (ippGetName (attr), "printer-name") == 0 &&
-           ippGetValueTag (attr) == IPP_TAG_NAME)
-           printer_name = ippGetString (attr, 0, NULL);
-       else if (strcmp (ippGetName (attr), "printer-uri-supported") == 0 &&
-                ippGetValueTag (attr) == IPP_TAG_URI)
-           printer_uri = ippGetString (attr, 0, NULL);
-       else if (strcmp (ippGetName (attr), "member-uris") == 0 &&
-                ippGetValueTag (attr) == IPP_TAG_URI)
-           member_uris = ippGetString (attr, 0, NULL);
-        else if (strcmp (ippGetName (attr), "printer-location") == 0)
-           location = ippGetString (attr, 0, NULL);
-        else if (strcmp (ippGetName (attr), "printer-info") == 0)
-           description = ippGetString (attr, 0, NULL);
-        else if (strcmp (ippGetName (attr), "printer-state-message") == 0)
-           state_msg = ippGetString (attr, 0, NULL);
-        else if (strcmp (ippGetName (attr), "printer-state-reasons") == 0)
-          /* Store most important reason to reason_msg and set
-             its importance at printer_state_reason_level */
-          {
-            for (i = 0; i < ippGetCount (attr); i++)
-              {
-                 if (strcmp (ippGetString (attr, i, NULL), "none") != 0)
-                  {
-                    /* Sets is_paused flag for paused printer. */
-                     if (strcmp (ippGetString (attr, i, NULL), "paused") == 0)
-                      {
-                        is_paused = TRUE;
-                      }
-
-                    interested_in = FALSE;
-                    for (j = 0; j < G_N_ELEMENTS (reasons); j++)
-                        if (strncmp (ippGetString (attr, i, NULL), reasons[j], strlen (reasons[j])) == 0)
-                          {
-                            interested_in = TRUE;
-                            break;
-                          }
-
-                    if (interested_in)
-                      {
-                         if (g_str_has_suffix (ippGetString (attr, i, NULL), "-report"))
-                          {
-                            if (printer_state_reason_level <= 1)
-                              {
-                                 reason_msg = ippGetString (attr, i, NULL);
-                                printer_state_reason_level = 1;
-                              }
-                          }
-                         else if (g_str_has_suffix (ippGetString (attr, i, NULL), "-warning"))
-                          {
-                            if (printer_state_reason_level <= 2)
-                              {
-                                 reason_msg = ippGetString (attr, i, NULL);
-                                printer_state_reason_level = 2;
-                             }
-                          }
-                        else  /* It is error in the case of no suffix. */
-                          {
-                             reason_msg = ippGetString (attr, i, NULL);
-                            printer_state_reason_level = 3;
-                          }
-                      }
-                  }
-              }
-          }
-        else if (strcmp (ippGetName (attr), "printer-state") == 0)
-          state = ippGetInteger (attr, 0);
-        else if (strcmp (ippGetName (attr), "queued-job-count") == 0)
-          job_count = ippGetInteger (attr, 0);
-        else if (strcmp (ippGetName (attr), "printer-is-accepting-jobs") == 0)
-          {
-            if (ippGetBoolean (attr, 0) == 1)
-              is_accepting_jobs = TRUE;
-            else
-              is_accepting_jobs = FALSE;
-          }
-        else if (strcmp (ippGetName (attr), "job-sheets-supported") == 0)
-          {
-            if (cups_backend->covers == NULL)
-              {
-                cups_backend->number_of_covers = ippGetCount (attr);
-                cups_backend->covers = g_new (char *, cups_backend->number_of_covers + 1);
-                for (i = 0; i < cups_backend->number_of_covers; i++)
-                   cups_backend->covers[i] = g_strdup (ippGetString (attr, i, NULL));
-                cups_backend->covers[cups_backend->number_of_covers] = NULL;
-              }
-          }
-        else if (strcmp (ippGetName (attr), "job-sheets-default") == 0)
-          {
-            if (ippGetCount (attr) == 2)
-              {
-                 default_cover_before = ippGetString (attr, 0, NULL);
-                 default_cover_after = ippGetString (attr, 1, NULL);
-              }
-          }
-        else if (strcmp (ippGetName (attr), "printer-type") == 0)
-          {
-            got_printer_type = TRUE;
-            if (ippGetInteger (attr, 0) & 0x00020000)
-              default_printer = TRUE;
-            else
-              default_printer = FALSE;
-
-            if (ippGetInteger (attr, 0) & 0x00000002)
-              remote_printer = TRUE;
-            else
-              remote_printer = FALSE;
-          }
-        else if (strcmp (ippGetName (attr), "auth-info-required") == 0)
-          {
-             if (strcmp (ippGetString (attr, 0, NULL), "none") != 0)
-              {
-                auth_info_required = g_new0 (gchar *, ippGetCount (attr) + 1);
-                for (i = 0; i < ippGetCount (attr); i++)
-                   auth_info_required[i] = g_strdup (ippGetString (attr, i, NULL));
-              }
-          }
-        else if (strcmp (attr->name, "number-up-default") == 0)
-          {
-            default_number_up = attr->values[0].integer;
-          }
-        else
-         {
-           GTK_NOTE (PRINTING,
-                      g_print ("CUPS Backend: Attribute %s ignored", ippGetName (attr)));
-         }
-
+       cups_printer_handle_attribute (cups_backend, attr, info);
         attr = attr->next;
       }