--- cups-pk-helper-0.0.4/src/cups.c 2009-03-04 13:41:53.000000000 +0100 +++ cups-pk-helper-0.0.4/src/cups.c 2009-07-16 12:49:46.000000000 +0200 @@ -58,7 +58,7 @@ getPPDs getServerPPD getDocument - getDevices +~!+* getDevices getJobs getJobAttributes ~!+* cancelJob @@ -1807,6 +1807,89 @@ cph_cups_job_get_status (CphCups *cup return status; } +void get_devices_cb (const char *device_class, + const char *device_id, + const char *device_info, + const char *device_make_and_model, + const char *device_uri, + const char *device_location, + void *user_data) +{ + GHashTable *hash = (GHashTable*) user_data; + int iter; + + g_return_if_fail (hash != NULL); + + iter = atoi (g_hash_table_lookup (hash, "iter")); + iter++; + + if (device_class && strlen (device_class) > 0) + g_hash_table_replace (hash, + g_strdup_printf ("device-class:%d", iter), + g_strdup (device_class)); + if (device_id && strlen (device_id) > 0) + g_hash_table_replace (hash, + g_strdup_printf ("device-id:%d", iter), + g_strdup (device_id)); + if (device_info && strlen (device_info) > 0) + g_hash_table_replace (hash, + g_strdup_printf ("device-info:%d", iter), + g_strdup (device_info)); + if (device_make_and_model && strlen (device_make_and_model) > 0) + g_hash_table_replace (hash, + g_strdup_printf ("device-make-and-model:%d", iter), + g_strdup (device_make_and_model)); + if (device_uri && strlen (device_uri) > 0) + g_hash_table_replace (hash, + g_strdup_printf ("device-uri:%d", iter), + g_strdup (device_uri)); + if (device_location && strlen (device_location) > 0) + g_hash_table_replace (hash, + g_strdup_printf ("device-location:%d ", iter), + g_strdup (device_location)); + g_hash_table_replace (hash, + g_strdup ("iter"), + g_strdup_printf ("%d", iter)); +} + +GHashTable *cph_cups_devices_get (CphCups *cups) +{ + int retval; + GHashTable *hash; + cups_option_t *settings; + int num_settings, i; + + g_return_val_if_fail (CPH_IS_CUPS (cups), NULL); + + hash = g_hash_table_new_full (g_str_hash, g_str_equal, + g_free, g_free); + + g_hash_table_replace (hash, + g_strdup ("iter"), + g_strdup ("-1")); + + retval = cupsGetDevices (cups->priv->connection, + CUPS_TIMEOUT_DEFAULT, + CUPS_INCLUDE_ALL, + CUPS_EXCLUDE_NONE, + get_devices_cb, + hash); + + if (retval != IPP_OK) { + char *error; + + error = g_strdup_printf ("Can not get devices."); + _cph_cups_set_internal_status (cups, error); + g_free (error); + + return NULL; + } + + g_hash_table_remove (hash, "iter"); + + return hash; +} + /****************************************************** * Non-object functions ******************************************************/ --- cups-pk-helper-0.0.4/src/cups.h 2009-02-28 03:38:13.000000000 +0100 +++ cups-pk-helper-0.0.4/src/cups.h 2009-07-16 12:50:44.000000000 +0200 @@ -184,6 +184,8 @@ CphJobStatus cph_cups_job_get_status (Cp int job_id, const char *user); +GHashTable *cph_cups_devices_get (CphCups *cups); + G_END_DECLS #endif /* CPH_CUPS_H */ --- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2009-07-16 12:46:03.000000000 +0200 +++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2009-07-16 12:52:02.000000000 +0200 @@ -1103,3 +1103,21 @@ cph_mechanism_job_set_hold_until (CphMec return TRUE; } + +gboolean +cph_mechanism_devices_get (CphMechanism *mechanism, + DBusGMethodInvocation *context) +{ + GHashTable *devices; + + reset_killtimer (mechanism); + + if (!_check_polkit_for_action (mechanism, context, "devices-get")) + return FALSE; + + devices = cph_cups_devices_get (mechanism->priv->cups); + _cph_mechanism_return_error_and_value (mechanism, context, + devices == NULL, devices); + + return TRUE; +} --- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.h 2009-02-28 03:38:13.000000000 +0100 +++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.h 2009-07-16 12:52:37.000000000 +0200 @@ -236,6 +236,10 @@ cph_mechanism_job_set_hold_until (CphMec const char *job_hold_until, DBusGMethodInvocation *context); +gboolean +cph_mechanism_devices_get (CphMechanism *mechanism, + DBusGMethodInvocation *context); + G_END_DECLS #endif /* CPH_MECHANISM_H */ --- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.xml 2009-02-28 03:38:13.000000000 +0100 +++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.xml 2009-07-16 12:53:27.000000000 +0200 @@ -192,5 +192,11 @@ + + + + + + --- cups-pk-helper-0.0.4/src/org.opensuse.cupspkhelper.mechanism.policy.in 2009-07-16 12:46:03.000000000 +0200 +++ cups-pk-helper-0.0.4/src/org.opensuse.cupspkhelper.mechanism.policy.in 2009-07-16 12:53:57.000000000 +0200 @@ -86,6 +86,15 @@ + + <_description>Get devices + <_message>Privileges are required to get devices. + + no + auth_admin_keep + + + <_description>Add/Remove/Edit a printer