From 3193a5e0ef329da13303ce42b0916cedbca6094b Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 30 Mar 2023 18:53:20 -0400 Subject: [PATCH] Updating search as new notes come in. --- .../NostrSearchEventOrUserDataSource.kt | 32 +++++++++---------- .../ui/screen/loggedIn/SearchScreen.kt | 17 +++++++++- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSearchEventOrUserDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSearchEventOrUserDataSource.kt index 3fae3330a..c481131cd 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSearchEventOrUserDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSearchEventOrUserDataSource.kt @@ -35,25 +35,25 @@ object NostrSearchEventOrUserDataSource : NostrDataSource("SingleEventFeed") { null } - if (hexToWatch == null) { - return null - } - // downloads all the reactions to a given event. - return listOf( - TypedFilter( - types = FeedType.values().toSet(), - filter = JsonFilter( - ids = listOfNotNull(hexToWatch) + return listOfNotNull( + hexToWatch?.let { + TypedFilter( + types = FeedType.values().toSet(), + filter = JsonFilter( + ids = listOfNotNull(hexToWatch) + ) ) - ), - TypedFilter( - types = FeedType.values().toSet(), - filter = JsonFilter( - kinds = listOf(MetadataEvent.kind), - authors = listOfNotNull(hexToWatch) + }, + hexToWatch?.let { + TypedFilter( + types = FeedType.values().toSet(), + filter = JsonFilter( + kinds = listOf(MetadataEvent.kind), + authors = listOfNotNull(hexToWatch) + ) ) - ), + }, TypedFilter( types = FeedType.values().toSet(), filter = JsonFilter( diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SearchScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SearchScreen.kt index 319cd8383..5337064d8 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SearchScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SearchScreen.kt @@ -140,6 +140,9 @@ private fun SearchBar(accountViewModel: AccountViewModel, navController: NavCont val onlineSearch = NostrSearchEventOrUserDataSource + val dbState = LocalCache.live.observeAsState() + val db = dbState.value ?: return + val isTrailingIconVisible by remember { derivedStateOf { searchValue.isNotBlank() @@ -151,6 +154,18 @@ private fun SearchBar(accountViewModel: AccountViewModel, navController: NavCont CoroutineChannel(CoroutineChannel.CONFLATED) } + LaunchedEffect(db) { + if (searchValue.length > 1) { + withContext(Dispatchers.IO) { + searchResults.value = LocalCache.findUsersStartingWith(searchValue) + searchResultsNotes.value = + LocalCache.findNotesStartingWith(searchValue).sortedBy { it.createdAt() } + .reversed() + searchResultsChannels.value = LocalCache.findChannelsStartingWith(searchValue) + } + } + } + LaunchedEffect(Unit) { // Wait for text changes to stop for 300 ms before firing off search. withContext(Dispatchers.IO) { @@ -161,7 +176,7 @@ private fun SearchBar(accountViewModel: AccountViewModel, navController: NavCont .collectLatest { hashtagResults.value = findHashtags(it) - if (it.removePrefix("npub").removePrefix("note").length >= 4) { + if (it.length >= 4) { onlineSearch.search(it.trim()) }