leaveRoom method
- JID roomJid
Leaves a Multi-User Chat room.
Leaves the specified MUC room by sending an 'unavailable' presence stanza.
Removes the corresponding room entry from the cache. Returns a Result
with a boolean value indicating success or failure, or an MUCError
if applicable.
Implementation
Future<Result<bool, MUCError>> leaveRoom(
JID roomJid,
) async {
final nick = await _cacheLock.synchronized(() {
final nick = _mucRoomCache[roomJid]?.nick;
_mucRoomCache.remove(roomJid);
return nick;
});
if (nick == null) {
return Result(RoomNotJoinedError());
}
await getAttributes().sendStanza(
StanzaDetails(
Stanza.presence(
to: roomJid.withResource(nick).toString(),
type: 'unavailable',
),
awaitable: false,
),
);
return const Result(true);
}