From 8a2ac4b8dc2abb8f9e980a0d513fd55b969526fe Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Mon, 25 Nov 2024 17:07:34 -0500 Subject: [PATCH] Update GV2 spinner transformer to for group updates in message extras. --- .../database/GV2UpdateTransformer.kt | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2UpdateTransformer.kt b/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2UpdateTransformer.kt index c24a10834b..fd78a3231b 100644 --- a/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2UpdateTransformer.kt +++ b/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2UpdateTransformer.kt @@ -9,32 +9,49 @@ import org.signal.spinner.DefaultColumnTransformer import org.thoughtcrime.securesms.database.model.MessageRecord import org.thoughtcrime.securesms.database.model.UpdateDescription import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context +import org.thoughtcrime.securesms.database.model.databaseprotos.MessageExtras import org.thoughtcrime.securesms.dependencies.AppDependencies object GV2UpdateTransformer : ColumnTransformer { override fun matches(tableName: String?, columnName: String): Boolean { - return columnName == MessageTable.BODY && (tableName == null || tableName == MessageTable.TABLE_NAME) + return (columnName == MessageTable.BODY || columnName == MessageTable.MESSAGE_EXTRAS) && (tableName == null || tableName == MessageTable.TABLE_NAME) } override fun transform(tableName: String?, columnName: String, cursor: Cursor): String? { val type: Long = cursor.getMessageType() - if (type == -1L) { + if (type == -1L || !MessageTypes.isGroupV2(type) || !MessageTypes.isGroupUpdate(type)) { return DefaultColumnTransformer.transform(tableName, columnName, cursor) } - val body: String? = CursorUtil.requireString(cursor, MessageTable.BODY) + return when (columnName) { + MessageTable.BODY -> { + val body: String? = CursorUtil.requireString(cursor, MessageTable.BODY) + body?.let { bodyGroupUpdate(it) } + } - return if (MessageTypes.isGroupV2(type) && MessageTypes.isGroupUpdate(type) && body != null) { - val decoded = Base64.decode(body) - val decryptedGroupV2Context = DecryptedGroupV2Context.ADAPTER.decode(decoded) - val gv2ChangeDescription: UpdateDescription = MessageRecord.getGv2ChangeDescription(AppDependencies.application, body, null) + MessageTable.MESSAGE_EXTRAS -> { + val messageExtras = CursorUtil.requireBlob(cursor, MessageTable.MESSAGE_EXTRAS)?.let { MessageExtras.ADAPTER.decode(it) } + messageExtras?.let { messageExtrasGroupUpdate(messageExtras) } + } - "${gv2ChangeDescription.spannable}

${decryptedGroupV2Context.change}" - } else { - body + else -> DefaultColumnTransformer.transform(tableName, columnName, cursor) } } + + private fun bodyGroupUpdate(body: String): String { + val decoded = Base64.decode(body) + val decryptedGroupV2Context = DecryptedGroupV2Context.ADAPTER.decode(decoded) + val gv2ChangeDescription: UpdateDescription = MessageRecord.getGv2ChangeDescription(AppDependencies.application, body, null) + + return "${gv2ChangeDescription.spannable}

${decryptedGroupV2Context.change}" + } + + private fun messageExtrasGroupUpdate(messageExtras: MessageExtras): String { + val gv2ChangeDescription: UpdateDescription = MessageRecord.getGv2ChangeDescription(AppDependencies.application, messageExtras, null) + + return "${gv2ChangeDescription.spannable}

${messageExtras.gv2UpdateDescription!!.gv2ChangeDescription!!.change}" + } } private fun Cursor.getMessageType(): Long {