diff --git a/cups-pk-helper.spec b/cups-pk-helper.spec index 2c1d137..102947b 100644 --- a/cups-pk-helper.spec +++ b/cups-pk-helper.spec @@ -1,6 +1,6 @@ Name: cups-pk-helper Version: 0.0.4 -Release: 2%{?dist} +Release: 3%{?dist} Summary: A helper that makes system-config-printer use PolicyKit Group: System Environment/Base @@ -9,6 +9,7 @@ URL: http://www.vuntz.net/download/cups-pk-helper/ Source0: http://www.vuntz.net/download/cups-pk-helper/cups-pk-helper-%{version}.tar.bz2 Patch0: polkit-1.patch +Patch1: get_devices.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -39,6 +40,7 @@ interfaces available under control of PolicyKit. %setup -q %patch0 -p1 -b .polkit-1 +%patch1 -p1 -b .get-devices %build # Patch0 modifies configure.ac @@ -68,6 +70,9 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Thu Jul 16 2009 Marek Kasik - 0.0.4-3 +- Add devices_get() function. + * Thu Jun 18 2009 Marek Kasik - 0.0.4-2 - Update to polkit-1 diff --git a/get_devices.patch b/get_devices.patch new file mode 100644 index 0000000..b7a6107 --- /dev/null +++ b/get_devices.patch @@ -0,0 +1,181 @@ +--- 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