messenger-android

Android graphical user interfaces for GNUnet Messenger
Log | Files | Refs | README | LICENSE

commit f6c510b2aa06e359ed904ac34dc93d276e04c701
parent 3f67cb205b0a2f27f23efac5d313ec50a097532f
Author: t3sserakt <t3ss@posteo.de>
Date:   Wed,  8 Apr 2026 08:08:53 +0200

WIP: fixing chat overview

Diffstat:
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/MainActivity.kt | 58++++++++++++++++++++++++++++++++++++++++------------------
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountListFragment.kt | 1+
2 files changed, 41 insertions(+), 18 deletions(-)

diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/MainActivity.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/MainActivity.kt @@ -229,25 +229,24 @@ class MainActivity : AppCompatActivity() { if (uuid == null) { uuid = gnunetChat.randomUUID() + gnunetChat.setUserPointerForContext(chatContext, uuid) + chatContext.userPointer = uuid chats[uuid] = chatContext chatOverviewViewModel.addOrUpdateChat( ChatSummary(chatContext, chatContact.name, lastMessagePreview) ) } else { - val localChatContext = chats[uuid] + chatContext.userPointer = uuid + if (chats[uuid] == null) { + chats[uuid] = chatContext + } + val displayContext = chats[uuid] ?: chatContext val group = gnunetChat.getGroupFromContext(chatContext) + val displayName = group?.name ?: chatContact.name - if (localChatContext != null && group != null) { - if (MessageKind.JOIN == chatMessage.kind) { - chatOverviewViewModel.addOrUpdateChat( - ChatSummary( - localChatContext, - group.name, - "${chatContact.name} $lastMessagePreview" - ) - ) - } - } + chatOverviewViewModel.addOrUpdateChat( + ChatSummary(displayContext, displayName, lastMessagePreview) + ) } viewModel?.addMessage(chatMessage) } @@ -330,6 +329,10 @@ class MainActivity : AppCompatActivity() { } } + suspend fun loadChatsAndWait() { + loadChatsSuspend() + } + private suspend fun loadChatsSuspend() = withContext(Dispatchers.IO) { val summaries = mutableListOf<ChatSummary>() val contacts = mutableListOf<ChatContact>() @@ -337,10 +340,14 @@ class MainActivity : AppCompatActivity() { val contactList = gnunetChat.listContacts(handle) for (contact in contactList) { val chatContext = gnunetChat.getContactContext(contact) - val uuid = gnunetChat.randomUUID() + var uuid = gnunetChat.getUserPointerForContext(chatContext) + if (uuid == null) { + uuid = gnunetChat.randomUUID() + gnunetChat.setUserPointerForContext(chatContext, uuid) + } + chatContext.userPointer = uuid contacts.add(contact) - gnunetChat.setUserPointerForContext(chatContext, uuid) chats[uuid] = chatContext contact.blocked = gnunetChat.isContactBlocked(contact) summaries.add( @@ -355,13 +362,17 @@ class MainActivity : AppCompatActivity() { val groupList = gnunetChat.listGroups(handle) for (group in groupList) { val chatContext = gnunetChat.getGroupContext(group) - val uuid = gnunetChat.randomUUID() + var uuid = gnunetChat.getUserPointerForContext(chatContext) + if (uuid == null) { + uuid = gnunetChat.randomUUID() + gnunetChat.setUserPointerForContext(chatContext, uuid) + } + chatContext.userPointer = uuid - gnunetChat.setUserPointerForContext(chatContext, uuid) chats[uuid] = chatContext summaries.add( ChatSummary( - chatContext = group.chatContext, + chatContext = chatContext, displayName = group.name, group = group ) @@ -370,7 +381,18 @@ class MainActivity : AppCompatActivity() { withContext(Dispatchers.Main) { contactListViewModel.setContacts(contacts) - chatOverviewViewModel.setChats(summaries) + val existing = chatOverviewViewModel.chats.value.orEmpty() + val merged = summaries.map { summary -> + val prev = existing.find { + it.chatContext.userPointer == summary.chatContext.userPointer + } + if (prev?.lastMessagePreview != null && summary.lastMessagePreview == null) { + summary.copy(lastMessagePreview = prev.lastMessagePreview) + } else { + summary + } + } + chatOverviewViewModel.setChats(merged) } Log.d(TAG, "loadChats: loaded ${contacts.size} contacts, ${groupList.size} groups") } diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountListFragment.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountListFragment.kt @@ -91,6 +91,7 @@ class AccountListFragment : Fragment() { gnunetChat.connect(handle, selectedAccount) selectedAccount.key = gnunetChat.getProfileKey(handle) activity.setCurrentAccount(selectedAccount) + activity.loadChatsAndWait() val action = AccountListFragmentDirections.actionAccountListFragmentToAccountOverviewFragment(