Passing the Note, not the event to the Nest viewmodel

This commit is contained in:
Vitor Pamplona
2026-04-30 19:20:53 -04:00
parent 2fe585096f
commit cc194273a3
7 changed files with 27 additions and 21 deletions
@@ -45,6 +45,7 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.viewmodels.NestViewModel
import com.vitorpamplona.amethyst.model.AddressableNote
import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.ui.navigation.navs.BouncingIntentNav
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
@@ -80,6 +81,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel as composeViewModel
@Composable
internal fun ColumnScope.NestChatPanel(
event: MeetingSpaceEvent,
roomNote: AddressableNote,
viewModel: NestViewModel,
accountViewModel: AccountViewModel,
modifier: Modifier = Modifier,
@@ -94,7 +96,7 @@ internal fun ColumnScope.NestChatPanel(
val nestScreenModel: NestNewMessageViewModel =
composeViewModel(key = "Nest/${event.address().toValue()}")
nestScreenModel.init(accountViewModel)
nestScreenModel.load(event)
nestScreenModel.load(roomNote)
val listState = rememberLazyListState()
@@ -27,19 +27,18 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.vitorpamplona.amethyst.model.LocalCache
import com.vitorpamplona.amethyst.ui.navigation.navs.INav
import com.vitorpamplona.amethyst.ui.note.UserPicture
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.utils.ChatFileUploadDialog
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.utils.ChatFileUploadState
import com.vitorpamplona.amethyst.ui.theme.Size34dp
import com.vitorpamplona.quartz.nip53LiveActivities.meetingSpaces.MeetingSpaceEvent
/**
* Mirror of `ChannelFileUploadDialog` for nest chat. Wraps the
@@ -59,8 +58,8 @@ fun NestFileUploadDialog(
val room = nestScreenModel.room ?: return
val context = LocalContext.current
val host = remember(room.pubKey) { LocalCache.getOrCreateUser(room.pubKey) }
val title = room.room().orEmpty()
val host = room.author ?: return
val title = (room.event as? MeetingSpaceEvent)?.room().orEmpty()
ChatFileUploadDialog(
state,
@@ -36,6 +36,7 @@ import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.compose.currentWord
import com.vitorpamplona.amethyst.commons.compose.insertUrlAtCursor
import com.vitorpamplona.amethyst.commons.compose.replaceCurrentWord
import com.vitorpamplona.amethyst.commons.model.AddressableNote
import com.vitorpamplona.amethyst.commons.model.nip30CustomEmojis.EmojiPackState
import com.vitorpamplona.amethyst.commons.richtext.UrlParser
import com.vitorpamplona.amethyst.model.Account
@@ -65,7 +66,6 @@ import com.vitorpamplona.quartz.nip01Core.core.AddressableEvent
import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.signers.EventTemplate
import com.vitorpamplona.quartz.nip01Core.signers.SignerExceptions
import com.vitorpamplona.quartz.nip01Core.tags.aTag.ATag
import com.vitorpamplona.quartz.nip01Core.tags.geohash.geohash
import com.vitorpamplona.quartz.nip01Core.tags.geohash.getGeoHash
import com.vitorpamplona.quartz.nip01Core.tags.hashtags.hashtags
@@ -133,7 +133,7 @@ open class NestNewMessageViewModel :
lateinit var accountViewModel: AccountViewModel
lateinit var account: Account
var room: MeetingSpaceEvent? = null
var room: AddressableNote? = null
val replyTo = mutableStateOf<Note?>(null)
@@ -202,7 +202,7 @@ open class NestNewMessageViewModel :
this.uploadState = ChatFileUploadState(account.settings.defaultFileServer, account.settings.stripLocationOnUpload)
}
open fun load(room: MeetingSpaceEvent) {
open fun load(room: AddressableNote) {
this.room = room
}
@@ -397,18 +397,8 @@ open class NestNewMessageViewModel :
}
}
private fun roomATag(): ATag? {
val r = room ?: return null
return ATag(
kind = r.kind,
pubKeyHex = r.pubKey,
dTag = r.dTag(),
relay = null,
)
}
private suspend fun createTemplate(): EventTemplate<out Event>? {
val activity = roomATag() ?: return null
val room = room?.toEventHint<MeetingSpaceEvent>() ?: return null
val messageText = message.text.toString()
val tagger =
NewMessageTagger(
@@ -446,7 +436,7 @@ open class NestNewMessageViewModel :
imetas(usedAttachments)
}
} else {
LiveActivitiesChatMessageEvent.message(tagger.message, activity) {
LiveActivitiesChatMessageEvent.roomMessage(tagger.message, room) {
hashtags(findHashtags(tagger.message))
references(findURLs(tagger.message))
quotes(findNostrUris(tagger.message))
@@ -147,7 +147,7 @@ private fun NestLobbyContent(
val nestScreenModel: NestNewMessageViewModel =
viewModel(key = "NestLobby/$roomATag")
nestScreenModel.init(accountViewModel)
nestScreenModel.load(event)
nestScreenModel.load(addressableNote)
val messages by produceState(initialValue = emptyList<Note>(), roomATag) {
val filter =
@@ -276,6 +276,7 @@ internal fun NestFullScreen(
NestTab.Chat -> {
NestChatPanel(
event = event,
roomNote = roomNote,
viewModel = viewModel,
accountViewModel = accountViewModel,
modifier =
@@ -47,6 +47,7 @@ import com.vitorpamplona.quartz.nip19Bech32.pubKeyHints
import com.vitorpamplona.quartz.nip19Bech32.pubKeys
import com.vitorpamplona.quartz.nip37Drafts.ExposeInDraft
import com.vitorpamplona.quartz.nip50Search.SearchableEvent
import com.vitorpamplona.quartz.nip53LiveActivities.meetingSpaces.MeetingSpaceEvent
import com.vitorpamplona.quartz.nip53LiveActivities.streaming.LiveActivitiesEvent
import com.vitorpamplona.quartz.utils.TimeUtils
@@ -153,6 +154,16 @@ class LiveActivitiesChatMessageEvent(
initializer()
}
fun roomMessage(
post: String,
room: EventHintBundle<MeetingSpaceEvent>,
createdAt: Long = TimeUtils.now(),
initializer: TagArrayBuilder<LiveActivitiesChatMessageEvent>.() -> Unit = {},
) = eventTemplate(KIND, post, createdAt) {
room(room)
initializer()
}
fun message(
post: String,
activity: ATag,
@@ -29,10 +29,13 @@ import com.vitorpamplona.quartz.nip01Core.tags.people.pTag
import com.vitorpamplona.quartz.nip01Core.tags.people.pTags
import com.vitorpamplona.quartz.nip10Notes.tags.MarkedETag
import com.vitorpamplona.quartz.nip10Notes.tags.toMarkedETag
import com.vitorpamplona.quartz.nip53LiveActivities.meetingSpaces.MeetingSpaceEvent
import com.vitorpamplona.quartz.nip53LiveActivities.streaming.LiveActivitiesEvent
fun TagArrayBuilder<LiveActivitiesChatMessageEvent>.activity(rep: ATag) = addUnique(rep.toATagArray())
fun TagArrayBuilder<LiveActivitiesChatMessageEvent>.room(rep: EventHintBundle<MeetingSpaceEvent>) = addUnique(rep.toATag().toATagArray())
fun TagArrayBuilder<LiveActivitiesChatMessageEvent>.activity(rep: EventHintBundle<LiveActivitiesEvent>) = addUnique(rep.toATag().toATagArray())
fun TagArrayBuilder<LiveActivitiesChatMessageEvent>.reply(rep: EventHintBundle<LiveActivitiesChatMessageEvent>) = addUnique(rep.toMarkedETag(MarkedETag.MARKER.REPLY).toTagArray())