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 '../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<Chat> {
Room room;
Client sendingClient;
Timeline timeline;
MatrixState matrix;
@ -222,6 +225,10 @@ class ChatController extends State<Chat> {
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<Chat> {
}
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;

View File

@ -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<Profile>(
future: controller.matrix.client.ownProfile,
future: controller.sendingClient.ownProfile,
builder: (context, snapshot) => PopupMenuButton<String>(
onSelected: _popupMenuButtonSelected,
itemBuilder: (BuildContext context) => clients