From e6c9f7becb254b618bee32614041a76601e05f23 Mon Sep 17 00:00:00 2001 From: Dan Ballard Date: Tue, 26 Apr 2022 21:29:56 -0700 Subject: [PATCH] GetMessage* on android; make reply to use message cache; New Messages bubble doesn't reup --- .../kotlin/im/cwtch/flwtch/MainActivity.kt | 6 +++--- lib/models/contact.dart | 2 +- lib/views/messageview.dart | 18 ++++++++++-------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/android/app/src/main/kotlin/im/cwtch/flwtch/MainActivity.kt b/android/app/src/main/kotlin/im/cwtch/flwtch/MainActivity.kt index 36e80739..05e9f5ef 100644 --- a/android/app/src/main/kotlin/im/cwtch/flwtch/MainActivity.kt +++ b/android/app/src/main/kotlin/im/cwtch/flwtch/MainActivity.kt @@ -341,21 +341,21 @@ class MainActivity: FlutterActivity() { val profile: String = call.argument("ProfileOnion") ?: "" val conversation: Int = call.argument("conversation") ?: 0 val indexI: Int = call.argument("index") ?: 0 - result.success(Data.Builder().putString("result", Cwtch.getMessage(profile, conversation.toLong(), indexI.toLong())).build()) + result.success(Cwtch.getMessage(profile, conversation.toLong(), indexI.toLong())) return } "GetMessageByID" -> { val profile: String = call.argument("ProfileOnion") ?: "" val conversation: Int = call.argument("conversation") ?: 0 val id: Int = call.argument("id") ?: 0 - result.success(Data.Builder().putString("result", Cwtch.getMessageByID(profile, conversation.toLong(), id.toLong())).build()) + result.success(Cwtch.getMessageByID(profile, conversation.toLong(), id.toLong())) return } "GetMessageByContentHash" -> { val profile: String = call.argument("ProfileOnion") ?: "" val conversation: Int = call.argument("conversation") ?: 0 val contentHash: String = call.argument("contentHash") ?: "" - result.success(Data.Builder().putString("result", Cwtch.getMessagesByContentHash(profile, conversation.toLong(), contentHash)).build()) + result.success(Cwtch.getMessagesByContentHash(profile, conversation.toLong(), contentHash)) return } "SetMessageAttribute" -> { diff --git a/lib/models/contact.dart b/lib/models/contact.dart index ddccaa55..7906401c 100644 --- a/lib/models/contact.dart +++ b/lib/models/contact.dart @@ -148,7 +148,7 @@ class ContactInfoState extends ChangeNotifier { int get unreadMessages => this._unreadMessages; set unreadMessages(int newVal) { - if (newVal == 0) { + if (newVal == 0 && this._unreadMessages != 0) { // conversation has been selected, start the countdown for the New Messager marker to be reset this._newMarkerClearAt = DateTime.now().add(const Duration(minutes: 2)); } diff --git a/lib/views/messageview.dart b/lib/views/messageview.dart index 2716da4f..dbf976b9 100644 --- a/lib/views/messageview.dart +++ b/lib/views/messageview.dart @@ -7,6 +7,7 @@ import 'package:cwtch/models/appstate.dart'; import 'package:cwtch/models/chatmessage.dart'; import 'package:cwtch/models/contact.dart'; import 'package:cwtch/models/message.dart'; +import 'package:cwtch/models/messagecache.dart'; import 'package:cwtch/models/messages/quotedmessage.dart'; import 'package:cwtch/models/profile.dart'; import 'package:cwtch/widgets/malformedbubble.dart'; @@ -24,6 +25,7 @@ import 'package:provider/provider.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; +import '../config.dart'; import '../constants.dart'; import '../main.dart'; import '../settings.dart'; @@ -216,14 +218,12 @@ class _MessageViewState extends State { if (ctrlrCompose.value.text.isNotEmpty && lengthOk) { if (Provider.of(context, listen: false).selectedConversation != null && Provider.of(context, listen: false).selectedIndex != null) { - Provider.of(context, listen: false) - .cwtch - .GetMessageByID(Provider.of(context, listen: false).selectedProfile!, Provider.of(context, listen: false).selectedConversation!, - Provider.of(context, listen: false).selectedIndex!) - .then((data) { + var conversationId = Provider.of(context, listen: false).selectedConversation!; + MessageCache? cache = Provider.of(context, listen: false).contactList.getContact(conversationId)?.messageCache; + ById(Provider.of(context, listen: false).selectedIndex!).get(Provider.of(context, listen: false).cwtch, Provider.of(context, listen: false).selectedProfile!, conversationId, cache!) + .then((MessageInfo? data) { try { - var messageWrapper = jsonDecode(data! as String); - var bytes1 = utf8.encode(messageWrapper["PeerID"] + messageWrapper['Message']); + var bytes1 = utf8.encode(data!.metadata.senderHandle + data.wrapper); var digest1 = sha256.convert(bytes1); var contentHash = base64Encode(digest1.bytes); var quotedMessage = jsonEncode(QuotedMessageStructure(contentHash, ctrlrCompose.value.text)); @@ -232,7 +232,9 @@ class _MessageViewState extends State { .cwtch .SendMessage(Provider.of(context, listen: false).profileOnion, Provider.of(context, listen: false).identifier, jsonEncode(cm)) .then(_sendMessageHandler); - } catch (e) {} + } catch (e) { + EnvironmentConfig.debugLog("Exception: reply to message could not be found: " + e.toString()); + } Provider.of(context, listen: false).selectedIndex = null; }); } else {