Some foundational logic to add artifact

This commit is contained in:
Kgothatso Ngako
2026-07-22 23:12:36 +02:00
parent 499bd54704
commit 9444f8280b
6 changed files with 84 additions and 12 deletions

View File

@@ -0,0 +1,14 @@
package press.mantra.compose.database.repository
import kotlinx.coroutines.CoroutineScope
import press.mantra.compose.database.MantraDatabase
import press.mantra.compose.repository.MantraRepository
class DatabaseMantraRepository(
val database: MantraDatabase,
val scope: CoroutineScope
): MantraRepository {
override fun addArtifact(name: String, url: String, versionLabel: String) {
TODO("Implement add artifact")
}
}

View File

@@ -0,0 +1,21 @@
package press.mantra.compose.repository
interface MantraRepository {
fun addArtifact(
name: String,
url: String,
versionLabel: String
)
companion object {
val NO_OP_MANTRA_REPOSITORY = object: MantraRepository{
override fun addArtifact(
name: String,
url: String,
versionLabel: String
) {
TODO("Not yet implemented")
}
}
}
}

View File

@@ -50,6 +50,7 @@ import press.mantra.compose.ui.composable.widgets.LoadingDataIndicator
import press.mantra.compose.ui.theme.TorchTheme
import press.mantra.compose.ui.view.state.ChatRoomMessagingUIState
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import press.mantra.compose.repository.MantraRepository
import press.mantra.compose.ui.composable.navigation.routes.ImplementationPendingRoute
import press.mantra.compose.ui.view.model.AddArtifactViewModel
import press.mantra.compose.ui.view.state.AddArtifactUIState
@@ -63,6 +64,7 @@ fun AddArtifactScreen(
initialAddArtifactUIState: AddArtifactUIState = AddArtifactUIState.Loading,
nostrRepository: NostrRepository,
chatRepository: ChatRepository,
mantraRepository: MantraRepository,
onNavigateToRouteAndPopUpInclusive: (Route) -> Unit,
onNavigateToRoute: (Route) -> Unit,
) {
@@ -73,7 +75,8 @@ fun AddArtifactScreen(
initialAddArtifactUIState = initialAddArtifactUIState,
nostrRepository = nostrRepository,
chatRepository = chatRepository,
activeUserPublicKey = activeUserPublicKey
activeUserPublicKey = activeUserPublicKey,
mantraRepository = mantraRepository
)
)
@@ -114,9 +117,10 @@ fun AddArtifactScreen(
ExtendedFloatingActionButton(
onClick = {
addArtifactViewModel.addArtifact(
name = nameFieldState.text.toString(),
url = urlFieldState.text.toString(),
versionLabel = versionLabelFieldState.text.toString(),
localChatRoom = addArtifactUIState.localChatRoom,
nameField = nameFieldState,
urlField = urlFieldState,
versionLabelField = versionLabelFieldState,
onSuccess = {
onNavigateToRoute.invoke(
ImplementationPendingRoute("Add Artifact")
@@ -281,7 +285,7 @@ fun AddArtifactScreen(
@Preview
@Composable
private fun ChatRoomMessagingScreenPreview() {
private fun AddArtifactScreenPreview() {
TorchTheme {
Surface(
modifier = Modifier.fillMaxSize()
@@ -304,6 +308,7 @@ private fun ChatRoomMessagingScreenPreview() {
),
nostrRepository = NostrRepository.NO_OP_NOSTR_REPOSITORY,
chatRepository = ChatRepository.NO_OP_CHAT_REPOSITORY,
mantraRepository = MantraRepository.NO_OP_MANTRA_REPOSITORY,
onNavigateToRouteAndPopUpInclusive = {},
onNavigateToRoute = {}
)

View File

@@ -86,6 +86,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch
import press.mantra.compose.database.repository.DatabaseMantraRepository
import press.mantra.compose.ui.composable.AddArtifactScreen
import press.mantra.compose.ui.composable.navigation.routes.AddArtifactRoute
@@ -123,6 +124,10 @@ fun MantraNavHost(
database = auxDatabaseManager.auxDatabase,
applicationIOScope
)
val databaseMantraRepository = DatabaseMantraRepository(
database = auxDatabaseManager.auxDatabase,
applicationIOScope
)
val searchRepository = DatabaseSearchRepository(
database = auxDatabaseManager.auxDatabase
@@ -652,6 +657,7 @@ fun MantraNavHost(
relayHint = route.relayHint,
nostrRepository = databaseNostrRepository,
chatRepository = databaseChatRepository,
mantraRepository = databaseMantraRepository,
onNavigateToRouteAndPopUpInclusive = { chatRoomDetailRoute ->
navController.navigate(
route = chatRoomDetailRoute

View File

@@ -1,5 +1,7 @@
package press.mantra.compose.ui.view.model
import androidx.compose.foundation.text.input.TextFieldState
import androidx.compose.foundation.text.input.clearText
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
@@ -16,6 +18,8 @@ import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
import kotlinx.coroutines.launch
import press.mantra.compose.database.model.intermdiate.LocalChatRoom
import press.mantra.compose.repository.MantraRepository
import press.mantra.compose.ui.view.state.AddArtifactUIState
class AddArtifactViewModel(
@@ -24,7 +28,8 @@ class AddArtifactViewModel(
val relayHint: String?,
initialAddArtifactUIState: AddArtifactUIState,
val nostrRepository: NostrRepository,
val chatRepository: ChatRepository
val chatRepository: ChatRepository,
val mantraRepository: MantraRepository
): ViewModel() {
var addArtifactUIState: AddArtifactUIState by mutableStateOf(initialAddArtifactUIState)
@@ -52,13 +57,33 @@ class AddArtifactViewModel(
}
fun addArtifact(
name: String,
url: String,
versionLabel: String,
localChatRoom: LocalChatRoom,
nameField: TextFieldState,
urlField: TextFieldState,
versionLabelField: TextFieldState,
onSuccess: () -> Unit,
onFailure: () -> Unit
) {
if (nameField.text.isNotBlank() && urlField.text.isNotBlank() && versionLabelField.text.isNotBlank()) {
val name = nameField.text.toString()
val url = urlField.text.toString()
val versionLabel = versionLabelField.text.toString()
nameField.clearText()
urlField.clearText()
versionLabelField.clearText()
viewModelScope.launch(Dispatchers.IO) {
mantraRepository.addArtifact(
name = name,
url = url,
versionLabel = versionLabel
)
// TODO: Navigate to artifact...
onSuccess.invoke()
}
}
}
companion object {
@@ -70,7 +95,8 @@ class AddArtifactViewModel(
relayHint: String?,
initialAddArtifactUIState: AddArtifactUIState = AddArtifactUIState.Loading,
nostrRepository: NostrRepository,
chatRepository: ChatRepository
chatRepository: ChatRepository,
mantraRepository: MantraRepository
): ViewModelProvider.Factory = viewModelFactory {
initializer {
AddArtifactViewModel(
@@ -79,7 +105,8 @@ class AddArtifactViewModel(
relayHint = relayHint,
initialAddArtifactUIState = initialAddArtifactUIState,
nostrRepository = nostrRepository,
chatRepository = chatRepository
chatRepository = chatRepository,
mantraRepository = mantraRepository
)
}
}

View File

@@ -419,7 +419,6 @@ class ChatMessageListViewModel(
localChatRoom = localChatRoom
)
}
}
}