mirror of
https://github.com/PenumbraOS/mabl.git
synced 2026-02-04 02:08:57 -06:00
Display active conversation
This commit is contained in:
parent
a7053f4944
commit
337749558f
@ -34,7 +34,7 @@ import com.open.pin.ui.utils.PinDimensions
|
||||
import com.open.pin.ui.utils.modifiers.ProvideSnapCoordinator
|
||||
import com.open.pin.ui.utils.modifiers.SnapCoordinator
|
||||
import com.penumbraos.mabl.aipincore.view.TouchInterceptor
|
||||
import com.penumbraos.mabl.aipincore.view.model.ConversationsNav
|
||||
import com.penumbraos.mabl.aipincore.view.model.ConversationDisplayNav
|
||||
import com.penumbraos.mabl.aipincore.view.model.NavViewModel
|
||||
import com.penumbraos.mabl.aipincore.view.model.PlatformViewModel
|
||||
import com.penumbraos.mabl.aipincore.view.nav.Navigation
|
||||
@ -75,7 +75,11 @@ fun PlatformUI(uiComponents: UIComponents) {
|
||||
|
||||
LaunchedEffect(Unit) {
|
||||
actualViewModel.openCurrentConversationEvent.collect {
|
||||
actualViewModel.navViewModel.pushView(ConversationsNav)
|
||||
val currentConversation =
|
||||
actualViewModel.conversationRepository.getLastActiveConversation()
|
||||
if (currentConversation != null) {
|
||||
actualViewModel.navViewModel.pushView(ConversationDisplayNav(currentConversation.id))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -108,23 +112,6 @@ fun PlatformUI(uiComponents: UIComponents) {
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ConversationDisplay(
|
||||
modifier: Modifier = Modifier,
|
||||
messages: List<ConversationMessage>,
|
||||
) {
|
||||
Box(
|
||||
modifier = modifier
|
||||
.fillMaxSize()
|
||||
.background(color = PinTheme.colors.background)
|
||||
) {
|
||||
ConversationList(
|
||||
messages = messages,
|
||||
modifier = Modifier.fillMaxSize()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ConversationList(
|
||||
modifier: Modifier = Modifier,
|
||||
@ -203,7 +190,7 @@ fun ConversationDisplayPreview() {
|
||||
|
||||
PinTheme {
|
||||
ProvideSnapCoordinator(coordinator = snapCoordinator.value) {
|
||||
ConversationDisplay(messages = messages)
|
||||
// ConversationDisplay(messages = messages)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -7,6 +7,7 @@ import androidx.lifecycle.ViewModel
|
||||
data object HomeNav
|
||||
data object MenuNav
|
||||
data object ConversationsNav
|
||||
data class ConversationDisplayNav(val conversationId: String)
|
||||
data object SettingsNav
|
||||
data object DummyNav
|
||||
|
||||
|
||||
@ -7,6 +7,7 @@ import com.penumbraos.mabl.aipincore.SETTING_APP_ID
|
||||
import com.penumbraos.mabl.aipincore.SETTING_DEBUG_CATEGORY
|
||||
import com.penumbraos.mabl.aipincore.SETTING_DEBUG_CURSOR
|
||||
import com.penumbraos.mabl.data.AppDatabase
|
||||
import com.penumbraos.mabl.data.repository.ConversationRepository
|
||||
import com.penumbraos.sdk.PenumbraClient
|
||||
import com.penumbraos.sdk.api.BooleanSettingListener
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@ -30,6 +31,11 @@ class PlatformViewModel(
|
||||
private val _debugChannel = Channel<Boolean>()
|
||||
val debugChannel = _debugChannel.receiveAsFlow()
|
||||
|
||||
val conversationRepository = ConversationRepository(
|
||||
database.conversationDao(),
|
||||
database.conversationMessageDao()
|
||||
)
|
||||
|
||||
init {
|
||||
coroutineScope.launch {
|
||||
val client = PenumbraClient(context)
|
||||
|
||||
@ -0,0 +1,30 @@
|
||||
package com.penumbraos.mabl.aipincore.view.nav
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.open.pin.ui.PinTheme
|
||||
import com.penumbraos.mabl.aipincore.ConversationList
|
||||
import com.penumbraos.mabl.aipincore.view.model.PlatformViewModel
|
||||
|
||||
@Composable
|
||||
fun ConversationDisplay(conversationId: String) {
|
||||
val viewModel = viewModel<PlatformViewModel>()
|
||||
val messages = viewModel.conversationRepository.getConversationMessagesFlow(conversationId)
|
||||
.collectAsState(emptyList())
|
||||
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.background(color = PinTheme.colors.background)
|
||||
) {
|
||||
ConversationList(
|
||||
messages = messages.value,
|
||||
modifier = Modifier.fillMaxSize()
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -20,6 +20,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.navigation3.runtime.NavEntry
|
||||
import androidx.navigation3.ui.NavDisplay
|
||||
import com.open.pin.ui.components.text.PinText
|
||||
import com.penumbraos.mabl.aipincore.view.model.ConversationDisplayNav
|
||||
import com.penumbraos.mabl.aipincore.view.model.ConversationsNav
|
||||
import com.penumbraos.mabl.aipincore.view.model.HomeNav
|
||||
import com.penumbraos.mabl.aipincore.view.model.MenuNav
|
||||
@ -70,6 +71,10 @@ fun Navigation(navViewModel: NavViewModel = viewModel<NavViewModel>()) {
|
||||
Conversations()
|
||||
}
|
||||
|
||||
is ConversationDisplayNav -> NavEntry(key) {
|
||||
ConversationDisplay(key.conversationId)
|
||||
}
|
||||
|
||||
SettingsNav -> NavEntry(key) {
|
||||
Settings()
|
||||
}
|
||||
|
||||
@ -5,6 +5,7 @@ import androidx.room.Insert
|
||||
import androidx.room.Query
|
||||
import androidx.room.Update
|
||||
import com.penumbraos.mabl.data.types.Conversation
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
@Dao
|
||||
interface ConversationDao {
|
||||
@ -15,7 +16,7 @@ interface ConversationDao {
|
||||
suspend fun getConversation(id: String): Conversation?
|
||||
|
||||
@Query("SELECT * FROM conversations ORDER BY lastActivity DESC LIMIT 1")
|
||||
suspend fun getLastActiveConversation(): Conversation?
|
||||
fun getLastActiveConversation(): Flow<Conversation?>
|
||||
|
||||
@Insert
|
||||
suspend fun insertConversation(conversation: Conversation)
|
||||
|
||||
@ -5,6 +5,7 @@ import com.penumbraos.mabl.data.dao.ConversationMessageDao
|
||||
import com.penumbraos.mabl.data.types.Conversation
|
||||
import com.penumbraos.mabl.data.types.ConversationMessage
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.first
|
||||
|
||||
class ConversationRepository(
|
||||
private val conversationDao: ConversationDao,
|
||||
@ -18,6 +19,9 @@ class ConversationRepository(
|
||||
suspend fun getConversation(id: String): Conversation? = conversationDao.getConversation(id)
|
||||
|
||||
suspend fun getLastActiveConversation(): Conversation? =
|
||||
conversationDao.getLastActiveConversation().first()
|
||||
|
||||
fun getLastActiveConversationFlow(): Flow<Conversation?> =
|
||||
conversationDao.getLastActiveConversation()
|
||||
|
||||
suspend fun createNewConversation(title: String = "New Conversation"): Conversation {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user