unblockUser method

  1. @override
Future<void> unblockUser(
  1. UserId id
)
override

Removes the specified User from the blocklist of the authenticated MyUser.

Implementation

@override
Future<void> unblockUser(UserId id) async {
  Log.debug('unblockUser($id)', '$runtimeType');

  final RxUser? user = users[id];
  final BlocklistRecord? record = user?.user.value.isBlocked;

  if (user?.user.value.isBlocked != null) {
    user?.user.value.isBlocked = null;
    user?.user.refresh();
  }

  try {
    try {
      await Backoff.run(
        () async {
          await _graphQlProvider.unblockUser(id);
        },
        retryIf: (e) => e.isNetworkRelated,
        retries: 10,
      );
    } on UnblockUserException catch (e) {
      switch (e.code) {
        case UnblockUserErrorCode.unknownUser:
          // No-op.
          break;

        case UnblockUserErrorCode.artemisUnknown:
          rethrow;
      }
    }
  } catch (_) {
    if (user != null && user.user.value.isBlocked != record) {
      user.user.value.isBlocked = record ?? user.user.value.isBlocked;
      user.user.refresh();
    }

    rethrow;
  }
}