Update GV2 spinner transformer to for group updates in message extras.

This commit is contained in:
Cody Henthorne 2024-11-25 17:07:34 -05:00 committed by Greyson Parrelli
parent 84cb0d357b
commit 8a2ac4b8dc

View file

@ -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}<br><br>${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}<br><br>${decryptedGroupV2Context.change}"
}
private fun messageExtrasGroupUpdate(messageExtras: MessageExtras): String {
val gv2ChangeDescription: UpdateDescription = MessageRecord.getGv2ChangeDescription(AppDependencies.application, messageExtras, null)
return "${gv2ChangeDescription.spannable}<br><br>${messageExtras.gv2UpdateDescription!!.gv2ChangeDescription!!.change}"
}
}
private fun Cursor.getMessageType(): Long {