moves the processing of nip19 links to the default thread

This commit is contained in:
Vitor Pamplona 2024-08-21 16:31:57 -04:00
parent 8d9bf60dba
commit 4d21857adf
2 changed files with 43 additions and 22 deletions

View File

@ -1548,32 +1548,47 @@ class AccountViewModel(
val accountViewModel: AccountViewModel,
) : GenericBaseCache<String, LoadedBechLink>(20) {
override suspend fun compute(key: String): LoadedBechLink? =
Nip19Bech32.uriToRoute(key)?.let {
var returningNote: Note? = null
withContext(Dispatchers.Default) {
Nip19Bech32.uriToRoute(key)?.let {
var returningNote: Note? = null
when (val parsed = it.entity) {
is Nip19Bech32.NSec -> {}
is Nip19Bech32.NPub -> {}
is Nip19Bech32.NProfile -> {}
is Nip19Bech32.Note -> withContext(Dispatchers.IO) { LocalCache.checkGetOrCreateNote(parsed.hex)?.let { note -> returningNote = note } }
is Nip19Bech32.NEvent -> withContext(Dispatchers.IO) { LocalCache.checkGetOrCreateNote(parsed.hex)?.let { note -> returningNote = note } }
is Nip19Bech32.NEmbed ->
withContext(Dispatchers.Default) {
val baseNote = LocalCache.getOrCreateNote(parsed.event)
if (baseNote.event == null) {
launch(Dispatchers.IO) {
LocalCache.verifyAndConsume(parsed.event, null)
when (val parsed = it.entity) {
is Nip19Bech32.NSec -> {}
is Nip19Bech32.NPub -> {}
is Nip19Bech32.NProfile -> {}
is Nip19Bech32.Note -> {
LocalCache.checkGetOrCreateNote(parsed.hex)?.let { note ->
returningNote = note
}
}
is Nip19Bech32.NEvent -> {
LocalCache.checkGetOrCreateNote(parsed.hex)?.let { note ->
returningNote = note
}
}
is Nip19Bech32.NEmbed ->
withContext(Dispatchers.Default) {
val baseNote = LocalCache.getOrCreateNote(parsed.event)
if (baseNote.event == null) {
launch(Dispatchers.Default) {
LocalCache.verifyAndConsume(parsed.event, null)
}
}
returningNote = baseNote
}
returningNote = baseNote
is Nip19Bech32.NRelay -> {}
is Nip19Bech32.NAddress -> {
LocalCache.checkGetOrCreateNote(parsed.atag)?.let { note ->
returningNote = note
}
}
is Nip19Bech32.NRelay -> {}
is Nip19Bech32.NAddress -> withContext(Dispatchers.IO) { LocalCache.checkGetOrCreateNote(parsed.atag)?.let { note -> returningNote = note } }
else -> {}
}
else -> {}
}
LoadedBechLink(returningNote, it)
LoadedBechLink(returningNote, it)
}
}
}
}

View File

@ -31,7 +31,10 @@ fun <K, V> produceCachedState(
key: K,
): State<V?> =
produceState(initialValue = cache.cached(key), key1 = key) {
value = cache.update(key)
val newValue = cache.update(key)
if (value != newValue) {
value = newValue
}
}
@Composable
@ -41,7 +44,10 @@ fun <K, V> produceCachedState(
updateValue: K,
): State<V?> =
produceState(initialValue = cache.cached(updateValue), key1 = key) {
value = cache.update(updateValue)
val newValue = cache.update(updateValue)
if (value != newValue) {
value = newValue
}
}
interface CachedState<K, V> {