From e8cc480c2f69c8d2562cf48ab72090424327be90 Mon Sep 17 00:00:00 2001 From: Sorunome Date: Sun, 19 Sep 2021 12:52:04 +0200 Subject: [PATCH] add send prefix --- lib/pages/chat.dart | 21 +++++++++++++++++++++ lib/pages/views/chat_view.dart | 7 ++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/lib/pages/chat.dart b/lib/pages/chat.dart index 942e6024..86e53e4f 100644 --- a/lib/pages/chat.dart +++ b/lib/pages/chat.dart @@ -32,6 +32,7 @@ import 'send_location_dialog.dart'; import 'sticker_picker_dialog.dart'; import '../utils/matrix_sdk_extensions.dart/filtered_timeline_extension.dart'; import '../utils/matrix_sdk_extensions.dart/matrix_file_extension.dart'; +import '../utils/account_bundles.dart'; class Chat extends StatefulWidget { final Widget sideView; @@ -45,6 +46,8 @@ class Chat extends StatefulWidget { class ChatController extends State { Room room; + Client sendingClient; + Timeline timeline; MatrixState matrix; @@ -222,6 +225,10 @@ class ChatController extends State { TextEditingController sendController = TextEditingController(); + void setSendingClient(Client c) => setState(() { + sendingClient = c; + }); + void setActiveClient(Client c) => setState(() { Matrix.of(context).setActiveClient(c); }); @@ -693,6 +700,20 @@ class ChatController extends State { } void onInputBarChanged(String text) { + final clients = matrix.currentBundle; + clients.removeWhere((c) => c.getRoomById(roomId) == null); + for (final client in clients) { + final prefix = client.sendPrefix; + if ((prefix?.isNotEmpty ?? false) && + text.toLowerCase() == '${prefix.toLowerCase()} ') { + setSendingClient(client); + setState(() { + inputText = ''; + sendController.text = ''; + }); + return; + } + } typingCoolDown?.cancel(); typingCoolDown = Timer(Duration(seconds: 2), () { typingCoolDown = null; diff --git a/lib/pages/views/chat_view.dart b/lib/pages/views/chat_view.dart index fd7da68c..d9564da0 100644 --- a/lib/pages/views/chat_view.dart +++ b/lib/pages/views/chat_view.dart @@ -39,7 +39,8 @@ class ChatView extends StatelessWidget { Widget build(BuildContext context) { controller.matrix ??= Matrix.of(context); final client = controller.matrix.client; - controller.room = client.getRoomById(controller.roomId); + controller.sendingClient ??= client; + controller.room = controller.sendingClient.getRoomById(controller.roomId); if (controller.room == null) { return Scaffold( appBar: AppBar( @@ -813,7 +814,7 @@ class _ChatAccountPicker extends StatelessWidget { Logs().w('Attempted to switch to a non-existing client $mxid'); return; } - controller.setActiveClient(client); + controller.setSendingClient(client); } @override @@ -824,7 +825,7 @@ class _ChatAccountPicker extends StatelessWidget { return Padding( padding: const EdgeInsets.all(8.0), child: FutureBuilder( - future: controller.matrix.client.ownProfile, + future: controller.sendingClient.ownProfile, builder: (context, snapshot) => PopupMenuButton( onSelected: _popupMenuButtonSelected, itemBuilder: (BuildContext context) => clients