mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2025-09-23 18:34:15 +02:00
decrypt dms using amber
This commit is contained in:
@@ -41,17 +41,22 @@ import androidx.compose.ui.window.DialogProperties
|
||||
import com.vitorpamplona.amethyst.R
|
||||
import com.vitorpamplona.amethyst.model.TimeUtils
|
||||
import com.vitorpamplona.amethyst.service.model.Event
|
||||
import com.vitorpamplona.amethyst.service.model.EventInterface
|
||||
import com.vitorpamplona.amethyst.service.model.PrivateDmEvent
|
||||
import com.vitorpamplona.amethyst.service.model.TextNoteEvent
|
||||
import com.vitorpamplona.amethyst.ui.theme.ButtonBorder
|
||||
import com.vitorpamplona.amethyst.ui.theme.DoubleVertSpacer
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
fun openAmber(
|
||||
event: Event,
|
||||
event: EventInterface,
|
||||
intentResult: ManagedActivityResultLauncher<Intent, ActivityResult>
|
||||
) {
|
||||
val json = event.toJson()
|
||||
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$json"))
|
||||
if (event is PrivateDmEvent) {
|
||||
intent.putExtra("type", "nip04_decrypt")
|
||||
}
|
||||
intent.`package` = "com.greenart7c3.nostrsigner.debug"
|
||||
intentResult.launch(intent)
|
||||
}
|
||||
@@ -60,7 +65,7 @@ fun openAmber(
|
||||
fun SignerDialog(
|
||||
onClose: () -> Unit,
|
||||
onPost: (signedEvent: Event) -> Unit,
|
||||
event: Event
|
||||
event: EventInterface
|
||||
) {
|
||||
var signature by remember { mutableStateOf("") }
|
||||
val scope = rememberCoroutineScope()
|
||||
@@ -80,6 +85,19 @@ fun SignerDialog(
|
||||
}
|
||||
|
||||
signature = it.data?.getStringExtra("signature") ?: ""
|
||||
if (event is PrivateDmEvent) {
|
||||
onPost(
|
||||
Event(
|
||||
event.id(),
|
||||
event.pubKey(),
|
||||
event.createdAt(),
|
||||
event.kind(),
|
||||
event.tags(),
|
||||
signature,
|
||||
event.sig()
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
@@ -120,16 +138,28 @@ fun SignerDialog(
|
||||
|
||||
PostButton(
|
||||
onPost = {
|
||||
val signedEvent = Event(
|
||||
event.id,
|
||||
event.pubKey,
|
||||
event.createdAt,
|
||||
event.kind,
|
||||
event.tags,
|
||||
event.content,
|
||||
signature
|
||||
)
|
||||
if (!signedEvent.hasValidSignature()) {
|
||||
val signedEvent = if (event is PrivateDmEvent) {
|
||||
Event(
|
||||
event.id(),
|
||||
event.pubKey(),
|
||||
event.createdAt(),
|
||||
event.kind(),
|
||||
event.tags(),
|
||||
signature,
|
||||
event.sig()
|
||||
)
|
||||
} else {
|
||||
Event(
|
||||
event.id(),
|
||||
event.pubKey(),
|
||||
event.createdAt(),
|
||||
event.kind(),
|
||||
event.tags(),
|
||||
event.content(),
|
||||
signature
|
||||
)
|
||||
}
|
||||
if (!signedEvent.hasValidSignature() && event !is PrivateDmEvent) {
|
||||
scope.launch {
|
||||
Toast.makeText(
|
||||
context,
|
||||
|
@@ -35,6 +35,7 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.Shape
|
||||
import androidx.compose.ui.graphics.compositeOver
|
||||
import androidx.compose.ui.layout.onSizeChanged
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
@@ -44,11 +45,13 @@ import androidx.lifecycle.map
|
||||
import com.vitorpamplona.amethyst.R
|
||||
import com.vitorpamplona.amethyst.model.Note
|
||||
import com.vitorpamplona.amethyst.model.User
|
||||
import com.vitorpamplona.amethyst.service.PackageUtils
|
||||
import com.vitorpamplona.amethyst.service.model.ChannelCreateEvent
|
||||
import com.vitorpamplona.amethyst.service.model.ChannelMetadataEvent
|
||||
import com.vitorpamplona.amethyst.service.model.ChatMessageEvent
|
||||
import com.vitorpamplona.amethyst.service.model.PrivateDmEvent
|
||||
import com.vitorpamplona.amethyst.ui.actions.ImmutableListOfLists
|
||||
import com.vitorpamplona.amethyst.ui.actions.SignerDialog
|
||||
import com.vitorpamplona.amethyst.ui.actions.toImmutableListOfLists
|
||||
import com.vitorpamplona.amethyst.ui.components.CreateClickableTextWithEmoji
|
||||
import com.vitorpamplona.amethyst.ui.components.CreateTextWithEmoji
|
||||
@@ -634,8 +637,24 @@ private fun RenderRegularTextNote(
|
||||
nav: (String) -> Unit
|
||||
) {
|
||||
val tags = remember(note.event) { note.event?.tags()?.toImmutableListOfLists() ?: ImmutableListOfLists() }
|
||||
val eventContent = remember { accountViewModel.decrypt(note) }
|
||||
var eventContent by remember { mutableStateOf(accountViewModel.decrypt(note)) }
|
||||
val modifier = remember { Modifier.padding(top = 5.dp) }
|
||||
val context = LocalContext.current
|
||||
val isAmberInstalled = PackageUtils.isAmberInstalled(context)
|
||||
var triedToDecrypt by remember { mutableStateOf(false) }
|
||||
if (isAmberInstalled && !triedToDecrypt && note.event is PrivateDmEvent) {
|
||||
SignerDialog(
|
||||
onClose = {
|
||||
triedToDecrypt = true
|
||||
eventContent = accountViewModel.decrypt(note)
|
||||
},
|
||||
onPost = {
|
||||
eventContent = it.content
|
||||
triedToDecrypt = true
|
||||
},
|
||||
event = note.event!!
|
||||
)
|
||||
}
|
||||
|
||||
if (eventContent != null) {
|
||||
SensitivityWarning(
|
||||
@@ -643,7 +662,7 @@ private fun RenderRegularTextNote(
|
||||
accountViewModel = accountViewModel
|
||||
) {
|
||||
TranslatableRichTextViewer(
|
||||
content = eventContent,
|
||||
content = eventContent!!,
|
||||
canPreview = canPreview,
|
||||
modifier = modifier,
|
||||
tags = tags,
|
||||
|
Reference in New Issue
Block a user