Starts to use getXIfExists functions to preload objects

This commit is contained in:
Vitor Pamplona
2023-06-14 13:48:58 -04:00
parent 5616fa52d1
commit 52199fe281
5 changed files with 49 additions and 23 deletions
@@ -51,6 +51,18 @@ object LocalCache {
} }
} }
fun getUserIfExists(key: String): User? {
return users[key]
}
fun getNoteIfExists(key: String): Note? {
return addressables[key] ?: notes[key]
}
fun getChannelIfExists(key: String): Channel? {
return channels[key]
}
fun checkGetOrCreateNote(key: String): Note? { fun checkGetOrCreateNote(key: String): Note? {
checkNotInMainThread() checkNotInMainThread()
@@ -90,7 +90,7 @@ private fun LoadNote(
hex: String, hex: String,
content: @Composable (Note) -> Unit content: @Composable (Note) -> Unit
) { ) {
var noteBase by remember(hex) { mutableStateOf<Note?>(null) } var noteBase by remember(hex) { mutableStateOf(LocalCache.getNoteIfExists(hex)) }
LaunchedEffect(key1 = hex) { LaunchedEffect(key1 = hex) {
if (noteBase == null) { if (noteBase == null) {
@@ -184,13 +184,15 @@ private fun DisplayAddress(
nip19: Nip19.Return, nip19: Nip19.Return,
nav: (String) -> Unit nav: (String) -> Unit
) { ) {
var noteBase by remember(nip19) { mutableStateOf<Note?>(null) } var noteBase by remember(nip19) { mutableStateOf(LocalCache.getNoteIfExists(nip19.hex)) }
LaunchedEffect(key1 = nip19.hex) { LaunchedEffect(key1 = nip19.hex) {
if (noteBase == null) {
launch(Dispatchers.IO) { launch(Dispatchers.IO) {
noteBase = LocalCache.checkGetOrCreateAddressableNote(nip19.hex) noteBase = LocalCache.checkGetOrCreateAddressableNote(nip19.hex)
} }
} }
}
noteBase?.let { noteBase?.let {
val noteState by it.live().metadata.observeAsState() val noteState by it.live().metadata.observeAsState()
@@ -221,13 +223,15 @@ private fun DisplayUser(
nip19: Nip19.Return, nip19: Nip19.Return,
nav: (String) -> Unit nav: (String) -> Unit
) { ) {
var userBase by remember(nip19) { mutableStateOf<User?>(null) } var userBase by remember(nip19) { mutableStateOf(LocalCache.getUserIfExists(nip19.hex)) }
LaunchedEffect(key1 = nip19.hex) { LaunchedEffect(key1 = nip19.hex) {
if (userBase == null) {
launch(Dispatchers.IO) { launch(Dispatchers.IO) {
userBase = LocalCache.checkGetOrCreateUser(nip19.hex) userBase = LocalCache.checkGetOrCreateUser(nip19.hex)
} }
} }
}
userBase?.let { userBase?.let {
RenderUserAsClickableText(it, nip19, nav) RenderUserAsClickableText(it, nip19, nav)
@@ -548,7 +548,7 @@ private fun ObserveNIP19Event(
it: Nip19.Return, it: Nip19.Return,
onRefresh: () -> Unit onRefresh: () -> Unit
) { ) {
var baseNote by remember(it) { mutableStateOf<Note?>(null) } var baseNote by remember(it) { mutableStateOf<Note?>(LocalCache.getNoteIfExists(it.hex)) }
LaunchedEffect(key1 = it.hex) { LaunchedEffect(key1 = it.hex) {
if (baseNote == null) { if (baseNote == null) {
@@ -563,6 +563,12 @@ private fun ObserveNIP19Event(
} }
baseNote?.let { note -> baseNote?.let { note ->
ObserveNote(note, onRefresh)
}
}
@Composable
fun ObserveNote(note: Note, onRefresh: () -> Unit) {
val noteState by note.live().metadata.observeAsState() val noteState by note.live().metadata.observeAsState()
LaunchedEffect(key1 = noteState) { LaunchedEffect(key1 = noteState) {
@@ -573,14 +579,13 @@ private fun ObserveNIP19Event(
} }
} }
} }
}
@Composable @Composable
private fun ObserveNIP19User( private fun ObserveNIP19User(
it: Nip19.Return, it: Nip19.Return,
onRefresh: () -> Unit onRefresh: () -> Unit
) { ) {
var baseUser by remember(it) { mutableStateOf<User?>(null) } var baseUser by remember(it) { mutableStateOf<User?>(LocalCache.getUserIfExists(it.hex)) }
LaunchedEffect(key1 = it.hex) { LaunchedEffect(key1 = it.hex) {
if (baseUser == null) { if (baseUser == null) {
@@ -595,6 +600,12 @@ private fun ObserveNIP19User(
} }
baseUser?.let { user -> baseUser?.let { user ->
ObserveUser(user, onRefresh)
}
}
@Composable
private fun ObserveUser(user: User, onRefresh: () -> Unit) {
val userState by user.live().metadata.observeAsState() val userState by user.live().metadata.observeAsState()
LaunchedEffect(key1 = userState) { LaunchedEffect(key1 = userState) {
@@ -605,7 +616,6 @@ private fun ObserveNIP19User(
} }
} }
} }
}
private fun getDisplayNameAndNIP19FromTag(tag: String, tags: ImmutableListOfLists<String>): Pair<String, String>? { private fun getDisplayNameAndNIP19FromTag(tag: String, tags: ImmutableListOfLists<String>): Pair<String, String>? {
val matcher = tagIndex.matcher(tag) val matcher = tagIndex.matcher(tag)
@@ -225,7 +225,7 @@ private fun WatchNotificationChanges(
@Composable @Composable
fun LoadUser(baseUserHex: String, content: @Composable (User) -> Unit) { fun LoadUser(baseUserHex: String, content: @Composable (User) -> Unit) {
var user by remember(baseUserHex) { var user by remember(baseUserHex) {
mutableStateOf<User?>(null) mutableStateOf<User?>(LocalCache.getUserIfExists(baseUserHex))
} }
LaunchedEffect(key1 = baseUserHex) { LaunchedEffect(key1 = baseUserHex) {
@@ -1850,7 +1850,7 @@ private fun DrawAuthorImages(baseNote: Note, accountViewModel: AccountViewModel,
@Composable @Composable
fun LoadChannel(baseChannelHex: String, content: @Composable (Channel) -> Unit) { fun LoadChannel(baseChannelHex: String, content: @Composable (Channel) -> Unit) {
var channel by remember(baseChannelHex) { var channel by remember(baseChannelHex) {
mutableStateOf<Channel?>(null) mutableStateOf<Channel?>(LocalCache.getChannelIfExists(baseChannelHex))
} }
LaunchedEffect(key1 = baseChannelHex) { LaunchedEffect(key1 = baseChannelHex) {