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

View File

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