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 {