From c783a80f7af7aedb8383bb76105a378e6d57c0df Mon Sep 17 00:00:00 2001
From: ialokim <ialokim@mailbox.org>
Date: Sat, 29 Oct 2022 12:42:18 +0200
Subject: [PATCH] update forum list items when sending new posts using callback

---
 .../briarproject/briar/desktop/forums/ForumViewModel.kt    | 7 ++++++-
 .../briar/desktop/forums/ThreadedConversationViewModel.kt  | 3 +++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/forums/ForumViewModel.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/forums/ForumViewModel.kt
index bc8ff410fe..3670303703 100644
--- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/forums/ForumViewModel.kt
+++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/forums/ForumViewModel.kt
@@ -30,6 +30,7 @@ import org.briarproject.bramble.api.sync.GroupId
 import org.briarproject.bramble.api.sync.event.GroupAddedEvent
 import org.briarproject.bramble.api.sync.event.GroupRemovedEvent
 import org.briarproject.briar.api.forum.ForumManager
+import org.briarproject.briar.api.forum.ForumPostHeader
 import org.briarproject.briar.api.forum.event.ForumPostReceivedEvent
 import org.briarproject.briar.desktop.threading.BriarExecutors
 import org.briarproject.briar.desktop.utils.clearAndAddAll
@@ -79,6 +80,7 @@ class ForumViewModel @Inject constructor(
 
     override fun onInit() {
         super.onInit()
+        threadViewModel.forumViewModel = this
         loadGroups()
     }
 
@@ -102,7 +104,6 @@ class ForumViewModel @Inject constructor(
             }
 
             e is ForumPostReceivedEvent -> {
-                // todo: better use equivalent to ConversationMessageTrackedEvent to update on new *own* posts as well
                 updateItem(e.groupId) { it.updateOnPostReceived(e.header) }
             }
         }
@@ -135,6 +136,10 @@ class ForumViewModel @Inject constructor(
         _filterBy.value = filter
     }
 
+    fun addOwnPost(header: ForumPostHeader) {
+        selectedGroupItem.value?.id?.let { id -> updateItem(id) { it.updateOnPostReceived(header) } }
+    }
+
     private fun addItem(forumItem: ForumItem) = _fullForumList.add(forumItem)
 
     private fun updateItem(forumId: GroupId, update: (ForumItem) -> ForumItem) {
diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/forums/ThreadedConversationViewModel.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/forums/ThreadedConversationViewModel.kt
index ab917e57eb..78ad948c82 100644
--- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/forums/ThreadedConversationViewModel.kt
+++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/forums/ThreadedConversationViewModel.kt
@@ -61,6 +61,8 @@ class ThreadedConversationViewModel @Inject constructor(
         private val LOG = getLogger(ThreadedConversationViewModel::class.java)
     }
 
+    lateinit var forumViewModel: ForumViewModel
+
     lateinit var groupItem: GroupItem
         private set
 
@@ -122,6 +124,7 @@ class ThreadedConversationViewModel @Inject constructor(
         runOnDbThreadWithTransaction(false) { txn ->
             val header = forumManager.addLocalPost(txn, post)
             txn.attach {
+                forumViewModel.addOwnPost(header)
                 val item = ForumPostItem(header, text)
                 addItem(item, item.id)
                 // unselect post that we just replied to
-- 
GitLab