Ejemplo n.º 1
0
    def _handle_method_call(self, _connection: Gio.DBusConnection, sender: str,
                            _path: str, interface_name: str, method_name: str,
                            parameters: GLib.Variant,
                            invocation: Gio.DBusMethodInvocation) -> None:
        try:
            try:
                _arguments, result_signatures, method, options = self._methods[
                    method_name]
            except KeyError:
                logging.warning(f"Unhandled method: {method_name}")
                invocation.return_error_literal(
                    Gio.dbus_error_quark(), Gio.DBusError.UNKNOWN_METHOD,
                    f"No such method on interface: {interface_name}.{method_name}"
                )

            def ok(*result: Any) -> None:
                invocation.return_value(
                    self._prepare_arguments(
                        result_signatures,
                        result[0] if len(result_signatures) > 1 else result))

            args = parameters.unpack()
            if "sender" in options:
                args += (sender, )
            if "async" in options:
                method(*(args + (ok, lambda exception: self._return_dbus_error(
                    invocation, exception))))
            else:
                ok(method(*args))
        except Exception as e:
            self._return_dbus_error(invocation, e)
Ejemplo n.º 2
0
 def on_active_changed(self, connection: Gio.DBusConnection,
                       sender_name: str, object_path: str,
                       interface_name: str, signal_name: str,
                       parameters: GLib.Variant):
     activated = parameters.unpack()[0]
     self.on_screen_was_locked(
     ) if activated else self.on_screen_was_unlocked()
Ejemplo n.º 3
0
 def do_g_properties_changed(self, changed_properties: GLib.Variant,
                             _invalidated_properties: List[str]) -> None:
     changed = changed_properties.unpack()
     object_path = self.get_object_path()
     logging.debug("%s %s" % (object_path, changed))
     for key, value in changed.items():
         self.emit("property-changed", key, value, object_path)
Ejemplo n.º 4
0
 def do_g_properties_changed(self, changed_properties: GLib.Variant, _invalidated_properties: List[str]) -> None:
     for name, value in changed_properties.unpack().items():
         logging.debug("%s %s %s" % (self.get_object_path(), name, value))
         if name == 'Transferred':
             self.emit('progress', value)
         elif name == 'Status':
             if value == 'complete':
                 self.emit('completed')
             elif value == 'error':
                 self.emit('error')
Ejemplo n.º 5
0
 def on_signal(
     _connection: Gio.DBusConnection,
     _sender_name: str,
     object_path: str,
     _interface_name: str,
     _signal_name: str,
     param: GLib.Variant,
 ) -> None:
     iface_name, changed, invalidated = param.unpack()
     if iface_name == self.__interface_name:
         self._on_properties_changed(object_path, changed, invalidated)
Ejemplo n.º 6
0
    def do_g_signal(self, _sender_name: str, signal_name: str,
                    params: GLib.Variant) -> None:
        notif_id, signal_val = params.unpack()
        if notif_id != self._return_id:
            return

        logging.info(signal_val)

        if signal_name == 'NotificationClosed':
            if signal_val == 1:
                logging.debug('The notification expired.')
            elif signal_val == 2:
                logging.debug('The notification was dismissed by the user.')
            elif signal_val == 3:
                logging.debug(
                    'The notification was closed by a call to CloseNotification.'
                )
            elif signal_val == 4:
                logging.debug('Undefined/reserved reasons.')
        elif signal_name == 'ActionInvoked':
            if signal_val in self._callbacks:
                self._callbacks[signal_val](signal_val)
Ejemplo n.º 7
0
 def on_applet_signal(_proxy: AppletService, _sender: str,
                      signal_name: str,
                      params: GLib.Variant) -> None:
     if signal_name == 'BluetoothStatusChanged':
         status = params.unpack()
         bt_status_changed(status)