Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions commet/lib/ui/molecules/message_input.dart
Original file line number Diff line number Diff line change
Expand Up @@ -601,8 +601,8 @@ class MessageInputState extends State<MessageInput> {
}

if (widget.disableEnterToSend != true) {
if (HardwareKeyboard.instance
.isLogicalKeyPressed(LogicalKeyboardKey.enter)) {
if (event is KeyDownEvent &&
event.logicalKey == LogicalKeyboardKey.enter) {
if (autoFillSelection != null && autoFillRange != null) {
applyAutoFill(autoFillResults![autoFillSelection!]);
return KeyEventResult.handled;
Expand Down
142 changes: 73 additions & 69 deletions commet/lib/ui/organisms/chat/chat.dart
Original file line number Diff line number Diff line change
Expand Up @@ -176,88 +176,92 @@ class ChatState extends State<Chat> {
}

void sendMessage(String message, {Client? overrideClient}) async {
if (processing) return;

setState(() {
processing = true;
});

for (var file in attachments) {
await file.resolve();
var exif = await readExifFromBytes(file.data!);

if (exif.keys.any((e) => e.toLowerCase().contains("gps"))) {
// ignore: use_build_context_synchronously
var confirmation = await AdaptiveDialog.confirmation(context,
title: file.name ?? "File",
confirmationText: "Send File",
cancelText: "Don't send file",
dangerous: true,
prompt:
"Location data was detected in file '${file.name}', are you sure you want to send?");

if (confirmation != true) {
setState(() {
processing = false;
});
return;
try {
for (var file in attachments) {
await file.resolve();
var exif = await readExifFromBytes(file.data!);

if (exif.keys.any((e) => e.toLowerCase().contains("gps"))) {
// ignore: use_build_context_synchronously
var confirmation = await AdaptiveDialog.confirmation(context,
title: file.name ?? "File",
confirmationText: "Send File",
cancelText: "Don't send file",
dangerous: true,
prompt:
"Location data was detected in file '${file.name}', are you sure you want to send?");

if (confirmation != true) {
return;
}
}
}
}

var targetRoom = room;
var targetThread = threadsComponent;
var targetRoom = room;
var targetThread = threadsComponent;

if (overrideClient != null) {
var newRoom = overrideClient.getRoom(targetRoom.identifier);
if (newRoom != null) {
targetRoom = newRoom;
targetThread = targetRoom.client.getComponent<ThreadsComponent>();
Log.d("Overriding room for client: ${overrideClient}");
} else {
Log.e(
"Failed to find correct room to send event for override client. Cancelling");
if (overrideClient != null) {
var newRoom = overrideClient.getRoom(targetRoom.identifier);
if (newRoom != null) {
targetRoom = newRoom;
targetThread = targetRoom.client.getComponent<ThreadsComponent>();
Log.d("Overriding room for client: ${overrideClient}");
} else {
Log.e(
"Failed to find correct room to send event for override client. Cancelling");

return;
return;
}
}
}

var processedAttachments = await targetRoom.processAttachments(attachments);

setState(() {
processing = false;
});
var processedAttachments =
await targetRoom.processAttachments(attachments);

var component = targetRoom.client.getComponent<CommandComponent>();

if (component?.isExecutable(message) == true) {
await doCommand(component, message);
} else if (isThread) {
await targetThread!.sendMessage(
threadRootEventId: widget.threadId!,
room: targetRoom,
message: message,
inReplyTo: interactionType == EventInteractionType.reply
? interactingEvent
: null,
replaceEvent: interactionType == EventInteractionType.edit
? interactingEvent
: null,
processedAttachments: processedAttachments);
} else {
await targetRoom.sendMessage(
message: message,
inReplyTo: interactionType == EventInteractionType.reply
? interactingEvent
: null,
replaceEvent: interactionType == EventInteractionType.edit
? interactingEvent
: null,
processedAttachments: processedAttachments);
}

var component = targetRoom.client.getComponent<CommandComponent>();

if (component?.isExecutable(message) == true) {
doCommand(component, message);
} else if (isThread) {
targetThread!.sendMessage(
threadRootEventId: widget.threadId!,
room: targetRoom,
message: message,
inReplyTo: interactionType == EventInteractionType.reply
? interactingEvent
: null,
replaceEvent: interactionType == EventInteractionType.edit
? interactingEvent
: null,
processedAttachments: processedAttachments);
} else {
targetRoom.sendMessage(
message: message,
inReplyTo: interactionType == EventInteractionType.reply
? interactingEvent
: null,
replaceEvent: interactionType == EventInteractionType.edit
? interactingEvent
: null,
processedAttachments: processedAttachments);
typingIndicators?.setTypingStatus(false);
setInteractingEvent(null);
clearAttachments();
setMessageInputText.add("");
} finally {
if (mounted) {
setState(() {
processing = false;
});
}
}

typingIndicators?.setTypingStatus(false);
setInteractingEvent(null);
clearAttachments();
setMessageInputText.add("");
}

Future<void> doCommand(
Expand Down
Loading