add send prefix

This commit is contained in:
Sorunome 2021-09-19 12:52:04 +02:00
parent bc64e09fbe
commit e8cc480c2f
No known key found for this signature in database
GPG Key ID: B19471D07FC9BE9C
2 changed files with 25 additions and 3 deletions

View File

@ -32,6 +32,7 @@ import 'send_location_dialog.dart';
import 'sticker_picker_dialog.dart'; import 'sticker_picker_dialog.dart';
import '../utils/matrix_sdk_extensions.dart/filtered_timeline_extension.dart'; import '../utils/matrix_sdk_extensions.dart/filtered_timeline_extension.dart';
import '../utils/matrix_sdk_extensions.dart/matrix_file_extension.dart'; import '../utils/matrix_sdk_extensions.dart/matrix_file_extension.dart';
import '../utils/account_bundles.dart';
class Chat extends StatefulWidget { class Chat extends StatefulWidget {
final Widget sideView; final Widget sideView;
@ -45,6 +46,8 @@ class Chat extends StatefulWidget {
class ChatController extends State<Chat> { class ChatController extends State<Chat> {
Room room; Room room;
Client sendingClient;
Timeline timeline; Timeline timeline;
MatrixState matrix; MatrixState matrix;
@ -222,6 +225,10 @@ class ChatController extends State<Chat> {
TextEditingController sendController = TextEditingController(); TextEditingController sendController = TextEditingController();
void setSendingClient(Client c) => setState(() {
sendingClient = c;
});
void setActiveClient(Client c) => setState(() { void setActiveClient(Client c) => setState(() {
Matrix.of(context).setActiveClient(c); Matrix.of(context).setActiveClient(c);
}); });
@ -693,6 +700,20 @@ class ChatController extends State<Chat> {
} }
void onInputBarChanged(String text) { 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?.cancel();
typingCoolDown = Timer(Duration(seconds: 2), () { typingCoolDown = Timer(Duration(seconds: 2), () {
typingCoolDown = null; typingCoolDown = null;

View File

@ -39,7 +39,8 @@ class ChatView extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
controller.matrix ??= Matrix.of(context); controller.matrix ??= Matrix.of(context);
final client = controller.matrix.client; 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) { if (controller.room == null) {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
@ -813,7 +814,7 @@ class _ChatAccountPicker extends StatelessWidget {
Logs().w('Attempted to switch to a non-existing client $mxid'); Logs().w('Attempted to switch to a non-existing client $mxid');
return; return;
} }
controller.setActiveClient(client); controller.setSendingClient(client);
} }
@override @override
@ -824,7 +825,7 @@ class _ChatAccountPicker extends StatelessWidget {
return Padding( return Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: FutureBuilder<Profile>( child: FutureBuilder<Profile>(
future: controller.matrix.client.ownProfile, future: controller.sendingClient.ownProfile,
builder: (context, snapshot) => PopupMenuButton<String>( builder: (context, snapshot) => PopupMenuButton<String>(
onSelected: _popupMenuButtonSelected, onSelected: _popupMenuButtonSelected,
itemBuilder: (BuildContext context) => clients itemBuilder: (BuildContext context) => clients