From f94d6c4fe9c1ccb5a5e731b327fd57635c0ce326 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Thu, 21 Jul 2011 20:48:52 +0100 Subject: apt transactions working nicely --- src/apt-transaction.c | 15 ++---------- src/apt-watcher.c | 64 +++++++++++++++++---------------------------------- src/session-service.c | 4 ++-- 3 files changed, 25 insertions(+), 58 deletions(-) diff --git a/src/apt-transaction.c b/src/apt-transaction.c index 1a4aa47..e613507 100644 --- a/src/apt-transaction.c +++ b/src/apt-transaction.c @@ -74,7 +74,6 @@ static void apt_transaction_class_init (AptTransactionClass *klass) { GObjectClass* object_class = G_OBJECT_CLASS (klass); - //GObjectClass* parent_class = G_OBJECT_CLASS (klass); object_class->finalize = apt_transaction_finalize; signals[UPDATE] = g_signal_new("state-update", @@ -99,20 +98,17 @@ apt_transaction_investigate(AptTransaction* self) "org.debian.apt.transaction", NULL, /* GCancellable */ &error); - g_debug ("Just after creating the proxy for the transaction - id = %s", - self->id); if (error != NULL) { g_warning ("unable to fetch proxy for transaction object path %s", self->id); g_error_free (error); return; } - g_debug ("connecting to the properties changed signal on the transaction object"); + g_signal_connect (G_OBJECT(self->proxy), "g-signal", G_CALLBACK (apt_transaction_receive_signal), self); - g_debug ("calling simulate on the transaction object"); g_dbus_proxy_call (self->proxy, "Simulate", NULL, @@ -133,14 +129,7 @@ apt_transaction_receive_signal (GDBusProxy * proxy, g_return_if_fail (APT_IS_TRANSACTION (user_data)); AptTransaction* self = APT_TRANSACTION(user_data); - if (g_strcmp0 (signal_name, "Finished") == 0){ - g_signal_emit (self, - signals[UPDATE], - 0, - FINISHED_CHECKING); - - } - else if (g_strcmp0(signal_name, "PropertyChanged") == 0) + if (g_strcmp0(signal_name, "PropertyChanged") == 0) { gchar* prop_name= NULL; GVariant* value = NULL; diff --git a/src/apt-watcher.c b/src/apt-watcher.c index 844e273..546c733 100644 --- a/src/apt-watcher.c +++ b/src/apt-watcher.c @@ -185,8 +185,6 @@ apt_watcher_upgrade_system_cb (GObject * obj, GAsyncResult * res, gpointer user_data) { - g_debug ("UpgradeSystem apt callback"); - g_return_if_fail (APT_IS_WATCHER (user_data)); AptWatcher* self = APT_WATCHER (user_data); @@ -205,7 +203,7 @@ apt_watcher_upgrade_system_cb (GObject * obj, g_variant_get (result, "(s)", &transaction_id); if (transaction_id == NULL){ - g_debug ("apt_watcher_upgrade_system_cb - transaction id is null"); + g_warning ("apt_watcher_upgrade_system_cb - transaction id is null"); return; } @@ -213,49 +211,17 @@ apt_watcher_upgrade_system_cb (GObject * obj, } - - -/*static void -apt_watcher_determine_state (AptWatcher* self, - GVariant* update) -{ - g_debug ("WE GOT SOME ACTIVE TRANSACTIONS TO EXAMINE, type is %s", - g_variant_get_type_string (update)); - - gchar* first_param = NULL; - gchar ** transactions = NULL; - - g_variant_get (update, "(sas)", &first_param, &transactions); - - g_debug ("apt_watcher_determine_state - the size is the string array %u", - g_strv_length (transactions)); - g_debug ("apt_watcher_determine_state - first param = %s", first_param); - - if (first_param == NULL){ - if (self->current_state != UP_TO_DATE){ - dbusmenu_menuitem_property_set (self->apt_item, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Software Up to Date")); - } - } - else{ - gboolean updating = g_str_has_prefix (first_param, - "/org/debian/apt/transaction/"); - if (updating == TRUE){ - self->current_state = UPDATES_IN_PROGRESS; - dbusmenu_menuitem_property_set (self->apt_item, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Updates Installing...")); - } - } -}*/ - static void apt_watcher_show_apt_dialog (DbusmenuMenuitem * mi, guint timestamp, gchar * type) { - + GError * error = NULL; + if (!g_spawn_command_line_async("update-manager", &error)) + { + g_warning("Unable to show update-manager: %s", error->message); + g_error_free(error); + } } static void @@ -280,6 +246,8 @@ apt_watcher_transaction_state_update_cb (AptTransaction* trans, _("Updates Available…")); } self->current_state = state; + g_object_unref (self->current_transaction); + self->current_transaction = NULL; } static void @@ -287,6 +255,7 @@ apt_watcher_manage_transactions (AptWatcher* self, gchar* transaction_id) { if (self->current_transaction == NULL){ self->current_transaction = apt_transaction_new (transaction_id); + g_object_ref (self->current_transaction); g_signal_connect (G_OBJECT(self->current_transaction), "state-update", G_CALLBACK(apt_watcher_transaction_state_update_cb), self); @@ -310,8 +279,17 @@ static void apt_watcher_signal_cb ( GDBusProxy* proxy, if (g_strcmp0(signal_name, "ActiveTransactionsChanged") == 0){ gchar* input = NULL; g_variant_get(value, "s", & input); - g_debug ("Active Transactions signal - input = %s", input); - apt_watcher_manage_transactions (self, input); + + g_debug ("Active Transactions signal - input is null = %i", input == NULL); + // TODO don't call on null terminated input + g_dbus_proxy_call (self->proxy, + "UpgradeSystem", + g_variant_new("(b)", TRUE), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + apt_watcher_upgrade_system_cb, + user_data); } g_variant_unref (parameters); } diff --git a/src/session-service.c b/src/session-service.c index 22552dc..bb473e9 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -71,10 +71,10 @@ static GMainLoop * mainloop = NULL; void service_shutdown (IndicatorService * service, gpointer user_data) { - /*if (mainloop != NULL) { + if (mainloop != NULL) { g_debug("Service shutdown"); g_main_loop_quit(mainloop); - }*/ + } return; } -- cgit v1.2.3