diff --git a/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/ui/BookmarksScreen.kt b/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/ui/BookmarksScreen.kt index 9ecbc6b9c8..e692b64707 100644 --- a/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/ui/BookmarksScreen.kt +++ b/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/ui/BookmarksScreen.kt @@ -121,6 +121,27 @@ fun BookmarksScreen( } } + // Seed from cache — bookmark list event may already be in addressableNotes + LaunchedEffect(account.pubKeyHex) { + val address = BookmarkListEvent.createBookmarkAddress(account.pubKeyHex) + val cachedNote = localCache.getOrCreateAddressableNote(address) + val cachedEvent = cachedNote.event as? BookmarkListEvent + if (cachedEvent != null) { + bookmarkList = cachedEvent + publicBookmarkIds = + cachedEvent + .publicBookmarks() + .filterIsInstance() + .map { it.eventId } + // Seed public events from cache + publicBookmarkIds.forEach { id -> + val note = localCache.getNoteIfExists(id) + val event = note?.event + if (event != null) publicEventState.addItem(event) + } + } + } + // Subscribe to user's bookmark list (kind 30001) rememberSubscription(connectedRelays, account.pubKeyHex, relayManager = relayManager) { if (connectedRelays.isNotEmpty()) { diff --git a/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/ui/ReadsScreen.kt b/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/ui/ReadsScreen.kt index 78274fbb22..80438b7b00 100644 --- a/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/ui/ReadsScreen.kt +++ b/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/ui/ReadsScreen.kt @@ -46,6 +46,7 @@ import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -207,6 +208,18 @@ fun ReadsScreen( var eoseReceivedCount by remember { mutableStateOf(0) } val initialLoadComplete = eoseReceivedCount > 0 + // Seed from cache — long-form notes already consumed are in cache + LaunchedEffect(Unit) { + val cached = + localCache.notes.filterIntoSet { _, note -> + note.event is LongTextNoteEvent + } + cached.forEach { note -> + (note.event as? LongTextNoteEvent)?.let { eventState.addItem(it) } + } + if (cached.isNotEmpty()) eoseReceivedCount++ + } + // Load followed users for Following feed mode rememberSubscription(connectedRelays, account, feedMode, relayManager = relayManager) { val connectedRelays = connectedRelays