Uses note.toEventUri to make sure the relay hint is correct

Avoids crash when adding an event to gallery without a relay hint.
This commit is contained in:
Vitor Pamplona 2025-02-24 20:46:33 -05:00
parent a2d9f31a8a
commit d5d289a834
7 changed files with 21 additions and 10 deletions

View File

@ -679,7 +679,7 @@ fun ShareImageAction(
if (videoUri != null) {
val n19 = Nip19Parser.uriToRoute(postNostrUri)?.entity as? NEvent
if (n19 != null) {
accountViewModel.addMediaToGallery(n19.hex, videoUri, n19.relay[0], blurhash, dim, hash, mimeType) // TODO Whole list or first?
accountViewModel.addMediaToGallery(n19.hex, videoUri, n19.relay.getOrNull(0), blurhash, dim, hash, mimeType) // TODO Whole list or first?
accountViewModel.toast(R.string.media_added, R.string.media_added_to_profile_gallery)
}
}

View File

@ -129,7 +129,7 @@ fun RenderEncryptedFile(
hash = noteEvent.originalHash(),
blurhash = noteEvent.blurhash(),
dim = noteEvent.dimensions(),
uri = noteEvent.toNostrUri(),
uri = note.toNostrUri(),
mimeType = mimeType,
encryptionAlgo = algo,
encryptionKey = key,

View File

@ -58,7 +58,6 @@ import com.vitorpamplona.quartz.nip01Core.tags.addressables.Address
import com.vitorpamplona.quartz.nip01Core.tags.events.ETag
import com.vitorpamplona.quartz.nip02FollowList.EmptyTagList
import com.vitorpamplona.quartz.nip10Notes.BaseThreadedEvent
import com.vitorpamplona.quartz.nip19Bech32.toNIP19
import com.vitorpamplona.quartz.nip84Highlights.HighlightEvent
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
@ -260,7 +259,7 @@ fun DisplayEntryForNote(
style = LocalTextStyle.current.copy(color = MaterialTheme.colorScheme.primary),
)
} else {
DisplayEvent(noteEvent.id, noteEvent.kind, noteEvent.toNIP19(), null, accountViewModel, nav)
DisplayEvent(noteEvent.id, noteEvent.kind, note.toNostrUri(), null, accountViewModel, nav)
}
}

View File

@ -177,7 +177,6 @@ import com.vitorpamplona.quartz.nip10Notes.content.findHashtags
import com.vitorpamplona.quartz.nip10Notes.content.findNostrUris
import com.vitorpamplona.quartz.nip10Notes.content.findURLs
import com.vitorpamplona.quartz.nip18Reposts.quotes.quotes
import com.vitorpamplona.quartz.nip21UriScheme.toNostrUri
import com.vitorpamplona.quartz.nip28PublicChat.base.notify
import com.vitorpamplona.quartz.nip28PublicChat.message.ChannelMessageEvent
import com.vitorpamplona.quartz.nip30CustomEmoji.emojis
@ -878,7 +877,7 @@ fun ShowVideoStreaming(
description = baseChannel.toBestDisplayName(),
artworkUri = event.image(),
authorName = baseChannel.creatorName(),
uri = event.toNostrUri(),
uri = baseChannel.toNAddr(),
)
}

View File

@ -127,6 +127,7 @@ import com.vitorpamplona.amethyst.ui.note.types.FileStorageHeaderDisplay
import com.vitorpamplona.amethyst.ui.note.types.PictureDisplay
import com.vitorpamplona.amethyst.ui.note.types.RenderAppDefinition
import com.vitorpamplona.amethyst.ui.note.types.RenderChannelMessage
import com.vitorpamplona.amethyst.ui.note.types.RenderChatMessageEncryptedFile
import com.vitorpamplona.amethyst.ui.note.types.RenderEmojiPack
import com.vitorpamplona.amethyst.ui.note.types.RenderFhirResource
import com.vitorpamplona.amethyst.ui.note.types.RenderGitIssueEvent
@ -177,6 +178,7 @@ import com.vitorpamplona.quartz.nip01Core.tags.addressables.isTaggedAddressableK
import com.vitorpamplona.quartz.nip01Core.tags.geohash.getGeoHash
import com.vitorpamplona.quartz.nip04Dm.messages.PrivateDmEvent
import com.vitorpamplona.quartz.nip13Pow.strongPoWOrNull
import com.vitorpamplona.quartz.nip17Dm.files.ChatMessageEncryptedFileHeaderEvent
import com.vitorpamplona.quartz.nip17Dm.settings.ChatMessageRelayListEvent
import com.vitorpamplona.quartz.nip18Reposts.GenericRepostEvent
import com.vitorpamplona.quartz.nip18Reposts.RepostEvent
@ -564,6 +566,17 @@ private fun FullBleedNoteCompose(
)
} else if (noteEvent is ChatMessageRelayListEvent) {
DisplayDMRelayList(baseNote, backgroundColor, accountViewModel, nav)
} else if (noteEvent is ChatMessageEncryptedFileHeaderEvent) {
RenderChatMessageEncryptedFile(
baseNote,
false,
canPreview,
3,
backgroundColor,
editState,
accountViewModel,
nav,
)
} else if (noteEvent is AdvertisedRelayListEvent) {
DisplayNIP65RelayList(baseNote, backgroundColor, accountViewModel, nav)
} else if (noteEvent is SearchRelayListEvent) {

View File

@ -25,9 +25,9 @@ import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.tags.addressables.ATag
import com.vitorpamplona.quartz.nip19Bech32.entities.NEvent
fun Event.toNIP19(): String =
fun Event.toNIP19(relayHint: String? = null): String =
if (this is AddressableEvent) {
ATag(kind, pubKey, dTag(), null).toNAddr()
ATag(kind, pubKey, dTag(), relayHint).toNAddr()
} else {
NEvent.create(id, pubKey, kind, null)
NEvent.create(id, pubKey, kind, relayHint)
}

View File

@ -24,6 +24,6 @@ import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.hints.EventHintBundle
import com.vitorpamplona.quartz.nip19Bech32.toNIP19
fun Event.toNostrUri(): String = "nostr:${toNIP19()}"
fun Event.toNostrUri(relayHint: String? = null): String = "nostr:${toNIP19(relayHint)}"
fun EventHintBundle<Event>.toNostrUri(): String = "nostr:${toNEvent()}"