mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-06-03 02:32:12 +00:00
50 lines
1.6 KiB
Dart
50 lines
1.6 KiB
Dart
import 'package:clock/clock.dart' show clock;
|
|
import 'package:drift/drift.dart';
|
|
import 'package:twonly/locator.dart';
|
|
import 'package:twonly/src/database/twonly.db.dart';
|
|
import 'package:twonly/src/model/protobuf/client/generated/messages.pb.dart';
|
|
import 'package:twonly/src/services/api/utils.api.dart';
|
|
import 'package:twonly/src/utils/log.dart';
|
|
|
|
Future<void> handleAdditionalDataMessage(
|
|
int fromUserId,
|
|
String groupId,
|
|
EncryptedContent_AdditionalDataMessage message,
|
|
) async {
|
|
Log.info(
|
|
'Got a additional data message: ${message.senderMessageId} from $groupId',
|
|
);
|
|
|
|
// Prevent message overwrite: reject if a message with this ID already
|
|
// exists from a different sender.
|
|
final existing = await twonlyDB.messagesDao
|
|
.getMessageById(message.senderMessageId)
|
|
.getSingleOrNull();
|
|
if (existing != null && existing.senderId != fromUserId) {
|
|
Log.warn(
|
|
'$fromUserId tried to overwrite message from ${existing.senderId}. Dropping.',
|
|
);
|
|
return;
|
|
}
|
|
|
|
final msg = await twonlyDB.messagesDao.insertMessage(
|
|
MessagesCompanion(
|
|
messageId: Value(message.senderMessageId),
|
|
senderId: Value(fromUserId),
|
|
groupId: Value(groupId),
|
|
type: Value(message.type),
|
|
additionalMessageData: Value(
|
|
Uint8List.fromList(message.additionalMessageData),
|
|
),
|
|
createdAt: Value(fromTimestamp(message.timestamp)),
|
|
ackByServer: Value(clock.now()),
|
|
),
|
|
);
|
|
await twonlyDB.groupsDao.increaseLastMessageExchange(
|
|
groupId,
|
|
fromTimestamp(message.timestamp),
|
|
);
|
|
if (msg != null) {
|
|
Log.info('Inserted a new text message with ID: ${msg.messageId}');
|
|
}
|
|
}
|