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)
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()
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)
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')
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)
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)
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)