diff options
author | Lars Uebernickel <lars.uebernickel@canonical.com> | 2012-03-20 18:50:29 +0100 |
---|---|---|
committer | Lars Uebernickel <lars.uebernickel@canonical.com> | 2012-03-20 18:50:29 +0100 |
commit | 776d81c41f08617a1d48f5d26f6f1d670c2296b2 (patch) | |
tree | ef9532ac2406092877914be0a9d13fc7f8f381bc /src/indicator-printers-service.c | |
parent | 3cbf4224a6aa1c494838c32131c0a7cab49d750a (diff) | |
parent | b36c109193793f388f52b1c557a2016e6599287f (diff) | |
download | ayatana-indicator-printers-776d81c41f08617a1d48f5d26f6f1d670c2296b2.tar.gz ayatana-indicator-printers-776d81c41f08617a1d48f5d26f6f1d670c2296b2.tar.bz2 ayatana-indicator-printers-776d81c41f08617a1d48f5d26f6f1d670c2296b2.zip |
* New upstream release.
- translate accessible description (LP: #957522)
- set lease durations on cups subscriptions (LP: #959195)
- draw number of jobs as lozenge
Diffstat (limited to 'src/indicator-printers-service.c')
-rw-r--r-- | src/indicator-printers-service.c | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/src/indicator-printers-service.c b/src/indicator-printers-service.c index 5daf697..ad5ef88 100644 --- a/src/indicator-printers-service.c +++ b/src/indicator-printers-service.c @@ -26,6 +26,8 @@ #include "indicator-printers-menu.h" #include "indicator-printer-state-notifier.h" +#define NOTIFY_LEASE_DURATION (15 * 60) + static int create_subscription () @@ -43,7 +45,7 @@ create_subscription () ippAddString (req, IPP_TAG_SUBSCRIPTION, IPP_TAG_URI, "notify-recipient-uri", NULL, "dbus://"); ippAddInteger (req, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, - "notify-lease-duration", 0); + "notify-lease-duration", NOTIFY_LEASE_DURATION); resp = cupsDoRequest (CUPS_HTTP_DEFAULT, req, "/"); if (!resp || cupsLastError() != IPP_OK) { @@ -64,6 +66,46 @@ create_subscription () } +static gboolean +renew_subscription (int id) +{ + ipp_t *req; + ipp_t *resp; + + req = ippNewRequest (IPP_RENEW_SUBSCRIPTION); + ippAddInteger (req, IPP_TAG_OPERATION, IPP_TAG_INTEGER, + "notify-subscription-id", id); + ippAddString (req, IPP_TAG_OPERATION, IPP_TAG_URI, + "printer-uri", NULL, "/"); + ippAddString (req, IPP_TAG_SUBSCRIPTION, IPP_TAG_URI, + "notify-recipient-uri", NULL, "dbus://"); + ippAddInteger (req, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, + "notify-lease-duration", NOTIFY_LEASE_DURATION); + + resp = cupsDoRequest (CUPS_HTTP_DEFAULT, req, "/"); + if (!resp || cupsLastError() != IPP_OK) { + g_warning ("Error renewing CUPS subscription %d: %s\n", + id, cupsLastErrorString ()); + return FALSE; + } + + ippDelete (resp); + return TRUE; +} + + +static gboolean +renew_subscription_timeout (gpointer userdata) +{ + int *subscription_id = userdata; + + if (*subscription_id <= 0 || !renew_subscription (*subscription_id)) + *subscription_id = create_subscription (); + + return TRUE; +} + + void cancel_subscription (int id) { @@ -115,6 +157,9 @@ int main (int argc, char *argv[]) gtk_init (&argc, &argv); subscription_id = create_subscription (); + g_timeout_add_seconds (NOTIFY_LEASE_DURATION - 60, + renew_subscription_timeout, + &subscription_id); service = indicator_service_new_version (INDICATOR_PRINTERS_DBUS_NAME, INDICATOR_PRINTERS_DBUS_VERSION); |