diff --git a/rigo/rigo/controllers/daemon.py b/rigo/rigo/controllers/daemon.py index 847669be3..ae2943686 100644 --- a/rigo/rigo/controllers/daemon.py +++ b/rigo/rigo/controllers/daemon.py @@ -154,6 +154,7 @@ class RigoServiceController(GObject.Object): _ACTIVITY_STARTED_SIGNAL = "activity_started" _ACTIVITY_PROGRESS_SIGNAL = "activity_progress" _ACTIVITY_COMPLETED_SIGNAL = "activity_completed" + _APPLICATION_ENQUEUED_SIGNAL = "application_enqueued" _PROCESSING_APPLICATION_SIGNAL = "processing_application" _APPLICATION_PROCESSING_UPDATE = "application_processing_update" _APPLICATION_PROCESSED_SIGNAL = "application_processed" @@ -445,6 +446,14 @@ class RigoServiceController(GObject.Object): self._restarting_system_upgrade_signal, dbus_interface=self.DBUS_INTERFACE) + # RigoDaemon tells us that a requested + # Application action has been enqueued and + # authorized + self.__entropy_bus.connect_to_signal( + self._APPLICATION_ENQUEUED_SIGNAL, + self._application_enqueued_signal, + dbus_interface=self.DBUS_INTERFACE) + return self.__entropy_bus ### GOBJECT EVENTS @@ -464,6 +473,35 @@ class RigoServiceController(GObject.Object): ### DBUS SIGNALS + def _application_enqueued_signal(self, package_id, repository_id, + daemon_action): + const_debug_write( + __name__, + "_application_enqueued_signal: received for " + "%d, %s, action: %s" % ( + package_id, repository_id, daemon_action)) + + queue_len = self.action_queue_length() + if self._wc is not None: + # also update application status + self._wc.update_queue_information(queue_len) + + app = Application( + self._entropy, self._entropy_ws, + (package_id, repository_id)) + + msg = prepare_markup(_("%s action enqueued") % ( + app.name,)) + if queue_len > 0: + msg += prepare_markup(ngettext( + ", %i Application enqueued so far...", + ", %i Applications enqueued so far...", + queue_len)) % (queue_len,) + box = self.ServiceNotificationBox( + msg, Gtk.MessageType.INFO, + context_id="ApplicationEnqueuedContextId") + self._nc.append(box, timeout=10) + def _processing_application_signal(self, package_id, repository_id, daemon_action, daemon_tx_state): const_debug_write( @@ -1662,21 +1700,6 @@ class RigoServiceController(GObject.Object): "service enqueue_application_action, got: %s, type: %s" % ( accepted, type(accepted),)) - def _notify(): - queue_len = self.action_queue_length() - msg = prepare_markup(_("%s action enqueued") % ( - app.name,)) - if queue_len > 0: - msg += prepare_markup(ngettext( - ", %i Application enqueued so far...", - ", %i Applications enqueued so far...", - queue_len)) % (queue_len,) - box = self.ServiceNotificationBox( - msg, Gtk.MessageType.INFO) - self._nc.append(box, timeout=10) - if accepted: - GLib.idle_add(_notify) - else: self._applications_managed_signal_check( sig_match, signal_sem,