diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt index b6497d70d..95f9e9728 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt @@ -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? { checkNotInMainThread() diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ClickableRoute.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ClickableRoute.kt index 8fefb06e8..59a189ba6 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ClickableRoute.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ClickableRoute.kt @@ -90,7 +90,7 @@ private fun LoadNote( hex: String, content: @Composable (Note) -> Unit ) { - var noteBase by remember(hex) { mutableStateOf(null) } + var noteBase by remember(hex) { mutableStateOf(LocalCache.getNoteIfExists(hex)) } LaunchedEffect(key1 = hex) { if (noteBase == null) { @@ -184,11 +184,13 @@ private fun DisplayAddress( nip19: Nip19.Return, nav: (String) -> Unit ) { - var noteBase by remember(nip19) { mutableStateOf(null) } + var noteBase by remember(nip19) { mutableStateOf(LocalCache.getNoteIfExists(nip19.hex)) } LaunchedEffect(key1 = nip19.hex) { - launch(Dispatchers.IO) { - noteBase = LocalCache.checkGetOrCreateAddressableNote(nip19.hex) + if (noteBase == null) { + launch(Dispatchers.IO) { + noteBase = LocalCache.checkGetOrCreateAddressableNote(nip19.hex) + } } } @@ -221,11 +223,13 @@ private fun DisplayUser( nip19: Nip19.Return, nav: (String) -> Unit ) { - var userBase by remember(nip19) { mutableStateOf(null) } + var userBase by remember(nip19) { mutableStateOf(LocalCache.getUserIfExists(nip19.hex)) } LaunchedEffect(key1 = nip19.hex) { - launch(Dispatchers.IO) { - userBase = LocalCache.checkGetOrCreateUser(nip19.hex) + if (userBase == null) { + launch(Dispatchers.IO) { + userBase = LocalCache.checkGetOrCreateUser(nip19.hex) + } } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt index 4e578302d..0cb57e24a 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt @@ -548,7 +548,7 @@ private fun ObserveNIP19Event( it: Nip19.Return, onRefresh: () -> Unit ) { - var baseNote by remember(it) { mutableStateOf(null) } + var baseNote by remember(it) { mutableStateOf(LocalCache.getNoteIfExists(it.hex)) } LaunchedEffect(key1 = it.hex) { if (baseNote == null) { @@ -563,13 +563,18 @@ private fun ObserveNIP19Event( } baseNote?.let { note -> - val noteState by note.live().metadata.observeAsState() + ObserveNote(note, onRefresh) + } +} - LaunchedEffect(key1 = noteState) { - if (noteState?.note?.event != null) { - launch(Dispatchers.IO) { - onRefresh() - } +@Composable +fun ObserveNote(note: Note, onRefresh: () -> Unit) { + val noteState by note.live().metadata.observeAsState() + + LaunchedEffect(key1 = noteState) { + if (noteState?.note?.event != null) { + launch(Dispatchers.IO) { + onRefresh() } } } @@ -580,7 +585,7 @@ private fun ObserveNIP19User( it: Nip19.Return, onRefresh: () -> Unit ) { - var baseUser by remember(it) { mutableStateOf(null) } + var baseUser by remember(it) { mutableStateOf(LocalCache.getUserIfExists(it.hex)) } LaunchedEffect(key1 = it.hex) { if (baseUser == null) { @@ -595,13 +600,18 @@ private fun ObserveNIP19User( } baseUser?.let { user -> - val userState by user.live().metadata.observeAsState() + ObserveUser(user, onRefresh) + } +} - LaunchedEffect(key1 = userState) { - if (userState?.user?.info != null) { - launch(Dispatchers.IO) { - onRefresh() - } +@Composable +private fun ObserveUser(user: User, onRefresh: () -> Unit) { + val userState by user.live().metadata.observeAsState() + + LaunchedEffect(key1 = userState) { + if (userState?.user?.info != null) { + launch(Dispatchers.IO) { + onRefresh() } } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomCompose.kt index 62122fb92..b698a0218 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomCompose.kt @@ -225,7 +225,7 @@ private fun WatchNotificationChanges( @Composable fun LoadUser(baseUserHex: String, content: @Composable (User) -> Unit) { var user by remember(baseUserHex) { - mutableStateOf(null) + mutableStateOf(LocalCache.getUserIfExists(baseUserHex)) } LaunchedEffect(key1 = baseUserHex) { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt index b186ebb92..a64dec930 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt @@ -1850,7 +1850,7 @@ private fun DrawAuthorImages(baseNote: Note, accountViewModel: AccountViewModel, @Composable fun LoadChannel(baseChannelHex: String, content: @Composable (Channel) -> Unit) { var channel by remember(baseChannelHex) { - mutableStateOf(null) + mutableStateOf(LocalCache.getChannelIfExists(baseChannelHex)) } LaunchedEffect(key1 = baseChannelHex) {