diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/ChatApplication.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/ChatApplication.kt index 0f2b5206..7d90de6d 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/ChatApplication.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/ChatApplication.kt @@ -15,6 +15,7 @@ import com.utun.chat.data.ChatEventCallback import com.utun.chat.data.CallController import com.utun.chat.data.CallVideoCodec import com.utun.chat.data.AvatarRepository +import com.utun.chat.data.AvatarProtocol import com.utun.chat.data.MemberRepository import com.utun.chat.data.MemberFilesRepository import kotlinx.coroutines.flow.MutableSharedFlow @@ -42,7 +43,7 @@ object AppEventHandler : ChatEventCallback { if (type == 13 || type in 61..64) mainHandler.post { com.utun.chat.data.LocalDiscovery.onEvent(type, data) } if (type == 12) mainHandler.post { com.utun.chat.headless.HeadlessService.onCoreStarted() } if (type == 13 || type in 49..50) mainHandler.post { ChatApplication.instance.memberFiles.onEvent(type, data) } - if (type in listOf(4, 8, 9, 12, 13, 23, 24, 25, 31) || type in 49..53) mainHandler.post { + if (type in listOf(4, 8, 9, 12, 13, 23, 24, 25, 31, AvatarProtocol.GROUP_SNAPSHOT_EVENT) || type in 49..52) mainHandler.post { ChatApplication.instance.members.onEvent(type, data) ChatApplication.instance.avatars.onEvent(type, data) } diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/AvatarRepository.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/AvatarRepository.kt index 50459c99..cfb830fd 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/AvatarRepository.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/AvatarRepository.kt @@ -123,7 +123,7 @@ class AvatarRepository(context: Context, private val memberRepository: MemberRep if (type == 13) { reset(); return } if (type == 9 || type == 12) { start(); return } try { - if (type in 49..53 && data != null) { + if ((type in 49..52 || type == AvatarProtocol.GROUP_SNAPSHOT_EVENT) && data != null) { val reply = when (type) { 49 -> AvatarProtocol.response(data) 50 -> AvatarProtocol.transfer(data) ?: return @@ -233,7 +233,9 @@ class AvatarRepository(context: Context, private val memberRepository: MemberRep val epoch = generation scope.launch { try { - val record = AvatarProtocol.group(request(53, group) { id, gid -> NativeLib.requestGroupAvatar(id, gid) }) + val record = AvatarProtocol.group(request(AvatarProtocol.GROUP_SNAPSHOT_EVENT, group) { id, gid -> + NativeLib.requestGroupAvatar(id, gid) + }) require(!record.failed) { "core rejected stored group avatar" } val state = GroupAvatarState(record.version, record.hash, record.canEdit, hasImage = record.image.isNotEmpty()) val bitmap = if (record.image.isEmpty()) null else cache.get(groupKey(group, state)) ?: withContext(Dispatchers.IO) { diff --git a/tools/chatgui-android/app/src/test/java/com/utun/chat/data/ChatEventContractTest.kt b/tools/chatgui-android/app/src/test/java/com/utun/chat/data/ChatEventContractTest.kt index 3d8066b8..33589d09 100644 --- a/tools/chatgui-android/app/src/test/java/com/utun/chat/data/ChatEventContractTest.kt +++ b/tools/chatgui-android/app/src/test/java/com/utun/chat/data/ChatEventContractTest.kt @@ -22,4 +22,9 @@ class ChatEventContractTest { assertTrue("JNI snapshot event must have a named declaration: $emitted", emitted in events) assertEquals("duplicate event numbers in chat_event.h", events.size, events.values.toSet().size) } + + @Test fun kotlinSnapshotNumberMatchesTheNativeRegistryAndEmitter() { + assertEquals(events.getValue("CHAT_EVT_GROUP_AVATAR_SNAPSHOT"), AvatarProtocol.GROUP_SNAPSHOT_EVENT) + assertEquals(snapshotEvent, AvatarProtocol.GROUP_SNAPSHOT_EVENT) + } }