From 9df6bb11d1bb0f4eb9eb6825d94bca1a51b35ded Mon Sep 17 00:00:00 2001 From: Ryan ZHAO Date: Wed, 20 Jan 2021 10:04:14 +1100 Subject: [PATCH] WIP complete storage protocol --- .../thoughtcrime/securesms/database/Storage.kt | 17 +++++++++++------ .../libsession/messaging/StorageProtocol.kt | 4 ++-- .../sending_receiving/MessageReceiverHandler.kt | 2 +- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt b/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt index f5e7858e8b..b9a770c79f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt @@ -315,7 +315,9 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context, } override fun isClosedGroup(publicKey: String): Boolean { - TODO("Not yet implemented") + val isSSKBasedClosedGroup = DatabaseFactory.getSSKDatabase(context).isSSKBasedClosedGroup(publicKey) + val address = Address.fromSerialized(publicKey) + return address.isClosedGroup || isSSKBasedClosedGroup } override fun getClosedGroupEncryptionKeyPairs(groupPublicKey: String): MutableList { @@ -336,14 +338,17 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context, return DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipient) } - override fun getOrCreateThreadIdFor(publicKey: String, groupPublicKey: String?, openGroupID: String?): Long? { - TODO("Not yet implemented") + override fun getOrCreateThreadIdFor(publicKey: String, groupPublicKey: String?, openGroupID: String?): Long { + val database = DatabaseFactory.getThreadDatabase(context) if (!openGroupID.isNullOrEmpty()) { - + val recipient = Recipient.from(context, Address.fromSerialized(openGroupID), false) + return database.getOrCreateThreadIdFor(recipient) } else if (!groupPublicKey.isNullOrEmpty()) { - + val recipient = Recipient.from(context, Address.fromSerialized(groupPublicKey), false) + return database.getOrCreateThreadIdFor(recipient) } else { - + val recipient = Recipient.from(context, Address.fromSerialized(publicKey), false) + return database.getOrCreateThreadIdFor(recipient) } } diff --git a/libsession/src/main/java/org/session/libsession/messaging/StorageProtocol.kt b/libsession/src/main/java/org/session/libsession/messaging/StorageProtocol.kt index 998a84390c..be96cf1b5b 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/StorageProtocol.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/StorageProtocol.kt @@ -102,7 +102,7 @@ interface StorageProtocol { name: String, members: Collection, admins: Collection) fun insertOutgoingInfoMessage(context: Context, groupID: String, type: SignalServiceProtos.GroupContext.Type, name: String, members: Collection, admins: Collection, threadID: Long) - fun isClosedGroup(publicKey: String): Boolean //TODO + fun isClosedGroup(publicKey: String): Boolean fun getClosedGroupEncryptionKeyPairs(groupPublicKey: String): MutableList //TODO fun getLatestClosedGroupEncryptionKeyPair(groupPublicKey: String): ECKeyPair //TODO @@ -111,7 +111,7 @@ interface StorageProtocol { // Thread fun getOrCreateThreadIdFor(address: Address): Long - fun getOrCreateThreadIdFor(publicKey: String, groupPublicKey: String?, openGroupID: String?): Long? + fun getOrCreateThreadIdFor(publicKey: String, groupPublicKey: String?, openGroupID: String?): Long fun getThreadIdFor(address: Address): Long? // Session Request diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageReceiverHandler.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageReceiverHandler.kt index 9f872759fa..a9d4006d4e 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageReceiverHandler.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageReceiverHandler.kt @@ -146,7 +146,7 @@ fun MessageReceiver.handleVisibleMessage(message: VisibleMessage, proto: SignalS } } // Get or create thread - val threadID = storage.getOrCreateThreadIdFor(message.sender!!, message.groupPublicKey, openGroupID) ?: throw MessageSender.Error.NoThread + val threadID = storage.getOrCreateThreadIdFor(message.sender!!, message.groupPublicKey, openGroupID) // Parse quote if needed var quoteModel: QuoteModel? = null if (message.quote != null && proto.dataMessage.hasQuote()) {