blockUser method
- UserId id,
- BlocklistReason? reason
override
Implementation
@override
Future<void> blockUser(UserId id, BlocklistReason? reason) async {
Log.debug('blockUser($id, $reason)', '$runtimeType');
final RxUserImpl? 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 {
final mixin = await _graphQlProvider.blockUser(id, reason);
Log.debug(
'blockUser($id, $reason) -> mixin is `$mixin`',
'$runtimeType',
);
if (mixin != null) {
await user?.apply(
UserEventsBlocklistEventsEvent(
BlocklistEventsVersioned(
mixin.events.map((e) => _blocklistEvent(e)).toList(),
mixin.blocklistVer,
),
),
);
}
},
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;
}
}