Optimizes the UserProfile datasource to remove the filter when the user leaves the profile screen.

This commit is contained in:
Vitor Pamplona 2023-02-18 19:12:21 -05:00
parent dfe95c28ea
commit 53a14d3a77

View File

@ -1,5 +1,6 @@
package com.vitorpamplona.amethyst.service package com.vitorpamplona.amethyst.service
import android.util.Log
import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.LocalCache
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.model.User
@ -17,66 +18,70 @@ object NostrUserProfileDataSource: NostrDataSource("UserProfileFeed") {
fun loadUserProfile(userId: String?) { fun loadUserProfile(userId: String?) {
if (userId != null) { if (userId != null) {
user = LocalCache.getOrCreateUser(userId) user = LocalCache.getOrCreateUser(userId)
} else {
user = null
} }
resetFilters() resetFilters()
} }
fun createUserInfoFilter(): TypedFilter { fun createUserInfoFilter() = user?.let {
return TypedFilter( TypedFilter(
types = FeedType.values().toSet(), types = FeedType.values().toSet(),
filter = JsonFilter( filter = JsonFilter(
kinds = listOf(MetadataEvent.kind), kinds = listOf(MetadataEvent.kind),
authors = listOf(user!!.pubkeyHex), authors = listOf(it.pubkeyHex),
limit = 1 limit = 1
) )
) )
} }
fun createUserPostsFilter(): TypedFilter { fun createUserPostsFilter() = user?.let {
return TypedFilter( TypedFilter(
types = FeedType.values().toSet(), types = FeedType.values().toSet(),
filter = JsonFilter( filter = JsonFilter(
kinds = listOf(TextNoteEvent.kind), kinds = listOf(TextNoteEvent.kind),
authors = listOf(user!!.pubkeyHex), authors = listOf(it.pubkeyHex),
limit = 100 limit = 100
) )
) )
} }
fun createUserReceivedZapsFilter(): TypedFilter { fun createUserReceivedZapsFilter() = user?.let {
return TypedFilter( TypedFilter(
types = FeedType.values().toSet(), types = FeedType.values().toSet(),
filter = JsonFilter( filter = JsonFilter(
kinds = listOf(LnZapEvent.kind), kinds = listOf(LnZapEvent.kind),
tags = mapOf("p" to listOf(user!!.pubkeyHex)) tags = mapOf("p" to listOf(it.pubkeyHex))
) )
) )
} }
fun createFollowFilter(): TypedFilter { fun createFollowFilter() = user?.let {
return TypedFilter( TypedFilter(
types = FeedType.values().toSet(), types = FeedType.values().toSet(),
filter = JsonFilter( filter = JsonFilter(
kinds = listOf(ContactListEvent.kind), kinds = listOf(ContactListEvent.kind),
authors = listOf(user!!.pubkeyHex), authors = listOf(it.pubkeyHex),
limit = 1 limit = 1
) )
) )
} }
fun createFollowersFilter() = TypedFilter( fun createFollowersFilter() = user?.let {
types = FeedType.values().toSet(), TypedFilter(
filter = JsonFilter( types = FeedType.values().toSet(),
kinds = listOf(ContactListEvent.kind), filter = JsonFilter(
tags = mapOf("p" to listOf(user!!.pubkeyHex)) kinds = listOf(ContactListEvent.kind),
tags = mapOf("p" to listOf(it.pubkeyHex))
)
) )
) }
val userInfoChannel = requestNewChannel() val userInfoChannel = requestNewChannel()
override fun updateChannelFilters() { override fun updateChannelFilters() {
userInfoChannel.typedFilters = listOf( userInfoChannel.typedFilters = listOfNotNull(
createUserInfoFilter(), createUserInfoFilter(),
createUserPostsFilter(), createUserPostsFilter(),
createFollowFilter(), createFollowFilter(),