blockUser method
- UserId id,
- BlocklistReason? reason
override
Implementation
@override
Future<void> blockUser(UserId id, BlocklistReason? reason) async {
Log.debug('blockUser($id, $reason)', '$runtimeType');
final RxUser? user = users[id];
final BlocklistRecord? record = user?.user.value.isBlocked;
if (user?.user.value.isBlocked == null) {
user?.user.value.isBlocked = BlocklistRecord(
userId: id,
reason: reason,
at: PreciseDateTime.now(),
);
user?.user.refresh();
}
try {
try {
await Backoff.run(
() async {
await _graphQlProvider.blockUser(id, reason);
},
retryIf: (e) => e.isNetworkRelated,
retries: 10,
);
} on BlockUserException catch (e) {
switch (e.code) {
case BlockUserErrorCode.unknownUser:
// No-op.
break;
case BlockUserErrorCode.artemisUnknown:
rethrow;
}
}
} catch (_) {
if (user != null && user.user.value.isBlocked != record) {
user.user.value.isBlocked = record ?? user.user.value.isBlocked;
user.user.refresh();
}
rethrow;
}
}