commit f6c510b2aa06e359ed904ac34dc93d276e04c701
parent 3f67cb205b0a2f27f23efac5d313ec50a097532f
Author: t3sserakt <t3ss@posteo.de>
Date: Wed, 8 Apr 2026 08:08:53 +0200
WIP: fixing chat overview
Diffstat:
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(