doOnMessage method

Future<DBusMethodResponse> doOnMessage(
  1. String instance,
  2. Map<String, DBusValue> args
)

Implementation of org.unifiedpush.Connector2.Message()

Implementation

Future<DBusMethodResponse> doOnMessage(
    String instance,
    Map<String, DBusValue> args
    ) async {
  final onMessage = _onMessage;
  if (onMessage == null) return _dbusSuccess;
  var serializedKey = await storage.keys.get(instance);
  var bytesMessage = args["message"]?.asByteArray().toList();
  if (bytesMessage == null) return DBusMethodErrorResponse.invalidArgs();
  var message = PushMessage(
      Uint8List.fromList(bytesMessage),
    false,
  );
  try {
    if (serializedKey != null) {
      var key = await WebPushKeySet.deserialize(serializedKey);
      message = PushMessage(
          await WebPush().decrypt(key, message.content),
          true
      );
    } else {
      throw Exception("No webpush key found for $instance");
    }
  } catch(e) {
    if (e is ArgumentError || e is KeyError || e is DecryptionError) {
      debugPrint("Could not decrypt message: ${e.runtimeType}");
    } else {
      debugPrint("Could not decrypt message: $e");
    }
  } finally {
    onMessage.call(message, instance);
  }
  return _dbusSuccess;
}