add mention support

This commit is contained in:
Henry Hiles 2025-12-26 17:00:59 -05:00
commit bbe36ff86f
No known key found for this signature in database
8 changed files with 198 additions and 107 deletions

View file

@ -102,11 +102,12 @@ class RoomChatController extends AsyncNotifier<ChatController> {
var taggedMessage = message;
for (final tag in tags) {
final escaped = RegExp.escape(tag.id.substring(1));
final pattern = RegExp(r"@@(" + escaped + r")#[^#]*#");
final escaped = RegExp.escape(tag.id);
final pattern = RegExp(r"@+(" + escaped + r")(#[^#]*#)?");
taggedMessage = taggedMessage.replaceAllMapped(
pattern,
(m) => "@${m.group(1)}",
(match) => match.group(1)!,
);
}

View file

@ -0,0 +1,23 @@
import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:nexus/controllers/client_controller.dart";
import "package:nexus/helpers/extensions/get_full_room.dart";
import "package:nexus/models/full_room.dart";
class RoomsController extends AsyncNotifier<IList<FullRoom>> {
@override
Future<IList<FullRoom>> build() async {
final client = await ref.watch(ClientController.provider.future);
ref.onDispose(
client.onSync.stream.listen((_) => ref.invalidateSelf()).cancel,
);
return IList(await Future.wait(client.rooms.map((room) => room.fullRoom)));
}
static final provider =
AsyncNotifierProvider<RoomsController, IList<FullRoom>>(
RoomsController.new,
);
}