diff --git a/src/main/kotlin/org/briarproject/briar/desktop/privategroups/PrivateGroupListViewModel.kt b/src/main/kotlin/org/briarproject/briar/desktop/privategroups/PrivateGroupListViewModel.kt index 6e7c7de3e5c8a119ed357b1b2f63b621532e3264..38f715c0e5108ab9a9ded35d0386c3d4536054a9 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/privategroups/PrivateGroupListViewModel.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/privategroups/PrivateGroupListViewModel.kt @@ -1,14 +1,19 @@ package org.briarproject.briar.desktop.privategroups import androidx.compose.runtime.State +import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf import org.briarproject.bramble.api.connection.ConnectionRegistry +import org.briarproject.bramble.api.db.TransactionManager import org.briarproject.bramble.api.event.Event import org.briarproject.bramble.api.event.EventBus +import org.briarproject.bramble.api.lifecycle.LifecycleManager import org.briarproject.bramble.api.sync.GroupId import org.briarproject.briar.api.conversation.ConversationManager import org.briarproject.briar.api.privategroup.PrivateGroupManager -import org.briarproject.briar.desktop.viewmodel.BriarEventListenerViewModel +import org.briarproject.briar.desktop.threading.BriarExecutors +import org.briarproject.briar.desktop.utils.clearAndAddAll +import org.briarproject.briar.desktop.viewmodel.EventListenerDbViewModel import javax.inject.Inject class PrivateGroupListViewModel @@ -17,24 +22,30 @@ constructor( private val privateGroupManager: PrivateGroupManager, val conversationManager: ConversationManager, val connectionRegistry: ConnectionRegistry, + briarExecutors: BriarExecutors, + lifecycleManager: LifecycleManager, + db: TransactionManager, eventBus: EventBus, -) : BriarEventListenerViewModel(eventBus) { +) : EventListenerDbViewModel(briarExecutors, lifecycleManager, db, eventBus) { - private val _fullPrivateGroupList = mutableListOf<PrivateGroupItem>() + private val _fullPrivateGroupList = mutableStateListOf<PrivateGroupItem>() val privateGroupList: List<PrivateGroupItem> = _fullPrivateGroupList private fun loadPrivateGroups() { - _fullPrivateGroupList.apply { - clear() - addAll( - privateGroupManager.privateGroups.map { privateGroup -> + val privateGroupList = mutableListOf<PrivateGroupItem>() + runOnDbThreadWithTransaction(true) { txn -> + privateGroupList.addAll( + privateGroupManager.getPrivateGroups(txn).map { privateGroup -> PrivateGroupItem( privateGroup, - privateGroupManager.getGroupCount(privateGroup.id), + privateGroupManager.getGroupCount(txn, privateGroup.id), ) } ) + txn.attach { + _fullPrivateGroupList.clearAndAddAll(privateGroupList) + } } } diff --git a/src/main/kotlin/org/briarproject/briar/desktop/privategroups/ThreadedConversationViewModel.kt b/src/main/kotlin/org/briarproject/briar/desktop/privategroups/ThreadedConversationViewModel.kt index fc5c31571a51e5e9a3eaa6603003c9b861beef4b..a7fc4a869d84890a93752dc77754d47b297e647c 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/privategroups/ThreadedConversationViewModel.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/privategroups/ThreadedConversationViewModel.kt @@ -1,12 +1,15 @@ package org.briarproject.briar.desktop.privategroups +import org.briarproject.bramble.api.db.TransactionManager import org.briarproject.bramble.api.event.Event import org.briarproject.bramble.api.event.EventBus +import org.briarproject.bramble.api.lifecycle.LifecycleManager import org.briarproject.briar.api.conversation.ConversationManager import org.briarproject.briar.api.messaging.MessagingManager import org.briarproject.briar.api.messaging.PrivateMessageFactory import org.briarproject.briar.api.privategroup.PrivateGroupManager -import org.briarproject.briar.desktop.viewmodel.BriarEventListenerViewModel +import org.briarproject.briar.desktop.threading.BriarExecutors +import org.briarproject.briar.desktop.viewmodel.EventListenerDbViewModel import java.util.logging.Logger import javax.inject.Inject @@ -17,8 +20,11 @@ constructor( private val conversationManager: ConversationManager, private val messagingManager: MessagingManager, private val privateMessageFactory: PrivateMessageFactory, - private val eventBus: EventBus, -) : BriarEventListenerViewModel(eventBus) { + briarExecutors: BriarExecutors, + lifecycleManager: LifecycleManager, + db: TransactionManager, + eventBus: EventBus, +) : EventListenerDbViewModel(briarExecutors, lifecycleManager, db, eventBus) { companion object { private val LOG = Logger.getLogger(ThreadedConversationViewModel::class.java.name)