diff --git a/README.md b/README.md index 3f49f5b..659c637 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ A simple and user-friendly Matrix client made with Flutter and a Gomuks backend. - [ ] Copy link to: - [x] Room - [x] Space - - [ ] Message + - [x] Message - [ ] Reporting - [x] Events - [ ] Rooms diff --git a/lib/widgets/chat_page/room_chat.dart b/lib/widgets/chat_page/room_chat.dart index b6891f0..a36bec8 100644 --- a/lib/widgets/chat_page/room_chat.dart +++ b/lib/widgets/chat_page/room_chat.dart @@ -11,6 +11,7 @@ import "package:nexus/controllers/client_state_controller.dart"; import "package:nexus/controllers/power_level_controller.dart"; import "package:nexus/controllers/selected_room_controller.dart"; import "package:nexus/controllers/room_chat_controller.dart"; +import "package:nexus/controllers/via_controller.dart"; import "package:nexus/helpers/extensions/better_when.dart"; import "package:nexus/helpers/extensions/show_context_menu.dart"; import "package:nexus/models/configs/power_level_config.dart"; @@ -100,6 +101,22 @@ class RoomChat extends HookConsumerWidget { }, child: ListTile(leading: Icon(Icons.edit), title: Text("Edit")), ), + PopupMenuItem( + onTap: () async { + final room = ref.watch(SelectedRoomController.provider); + if (room == null) return; + + final vias = ref.watch(ViaController.provider(room)); + + await Clipboard.setData( + ClipboardData( + text: + "matrix:roomid/${room.metadata?.id.substring(1)}/e/${message.id}$vias)", + ), + ); + }, + child: ListTile(leading: Icon(Icons.link), title: Text("Copy Link")), + ), if (ref.watch( PowerLevelController.provider( PowerLevelConfig(eventType: "m.room.redaction"),