From 536bdfe43a7db27284ab6b4c40da4403efcd5490 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sun, 27 Aug 2023 16:32:35 -0400 Subject: [PATCH] - When All Follows, the live tab will load any event with a follow in the participant list. - Removes prefix filters --- .../service/NostrDiscoveryDataSource.kt | 99 +++++++++++-------- .../amethyst/service/NostrHomeDataSource.kt | 9 +- .../amethyst/service/NostrVideoDataSource.kt | 8 +- 3 files changed, 60 insertions(+), 56 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDiscoveryDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDiscoveryDataSource.kt index d58f40853..ed4c02364 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDiscoveryDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDiscoveryDataSource.kt @@ -18,53 +18,66 @@ object NostrDiscoveryDataSource : NostrDataSource("DiscoveryFeed") { val latestEOSEs = EOSEAccount() - fun createLiveStreamFilter(): TypedFilter { - val follows = account.selectedUsersFollowList(account.defaultDiscoveryFollowList) + fun createLiveStreamFilter(): List { + val follows = account.selectedUsersFollowList(account.defaultDiscoveryFollowList)?.toList() - val followKeys = follows?.map { - it.substring(0, 8) - } - - return TypedFilter( - types = setOf(FeedType.GLOBAL), - filter = JsonFilter( - authors = followKeys, - kinds = listOf(LiveActivitiesChatMessageEvent.kind, LiveActivitiesEvent.kind), - limit = 300, - since = latestEOSEs.users[account.userProfile()]?.followList?.get(account.defaultDiscoveryFollowList)?.relayList - ) + return listOfNotNull( + TypedFilter( + types = setOf(FeedType.GLOBAL), + filter = JsonFilter( + authors = follows, + kinds = listOf(LiveActivitiesChatMessageEvent.kind, LiveActivitiesEvent.kind), + limit = 300, + since = latestEOSEs.users[account.userProfile()]?.followList?.get(account.defaultDiscoveryFollowList)?.relayList + ) + ), + follows?.let { + TypedFilter( + types = setOf(FeedType.GLOBAL), + filter = JsonFilter( + tags = mapOf("p" to it), + kinds = listOf(LiveActivitiesEvent.kind), + limit = 100, + since = latestEOSEs.users[account.userProfile()]?.followList?.get(account.defaultDiscoveryFollowList)?.relayList + ) + ) + } ) } - fun createPublicChatFilter(): TypedFilter { - val follows = account.selectedUsersFollowList(account.defaultDiscoveryFollowList) + fun createPublicChatFilter(): List { + val follows = account.selectedUsersFollowList(account.defaultDiscoveryFollowList)?.toList() + val followChats = account.selectedChatsFollowList().toList() - val followKeys = follows?.map { - it.substring(0, 8) - } - - return TypedFilter( - types = setOf(FeedType.PUBLIC_CHATS), - filter = JsonFilter( - authors = followKeys, - kinds = listOf(ChannelCreateEvent.kind, ChannelMetadataEvent.kind, ChannelMessageEvent.kind), - limit = 300, - since = latestEOSEs.users[account.userProfile()]?.followList?.get(account.defaultDiscoveryFollowList)?.relayList + return listOf( + TypedFilter( + types = setOf(FeedType.PUBLIC_CHATS), + filter = JsonFilter( + authors = follows, + kinds = listOf(ChannelCreateEvent.kind, ChannelMetadataEvent.kind, ChannelMessageEvent.kind), + limit = 300, + since = latestEOSEs.users[account.userProfile()]?.followList?.get(account.defaultDiscoveryFollowList)?.relayList + ) + ), + TypedFilter( + types = setOf(FeedType.PUBLIC_CHATS), + filter = JsonFilter( + ids = followChats, + kinds = listOf(ChannelCreateEvent.kind), + limit = 300, + since = latestEOSEs.users[account.userProfile()]?.followList?.get(account.defaultDiscoveryFollowList)?.relayList + ) ) ) } fun createCommunitiesFilter(): TypedFilter { - val follows = account.selectedUsersFollowList(account.defaultDiscoveryFollowList) - - val followKeys = follows?.map { - it.substring(0, 8) - } + val follows = account.selectedUsersFollowList(account.defaultDiscoveryFollowList)?.toList() return TypedFilter( types = setOf(FeedType.GLOBAL), filter = JsonFilter( - authors = followKeys, + authors = follows, kinds = listOf(CommunityDefinitionEvent.kind, CommunityPostApprovalEvent.kind), limit = 300, since = latestEOSEs.users[account.userProfile()]?.followList?.get(account.defaultDiscoveryFollowList)?.relayList @@ -197,16 +210,16 @@ object NostrDiscoveryDataSource : NostrDataSource("DiscoveryFeed") { } override fun updateChannelFilters() { - discoveryFeedChannel.typedFilters = listOfNotNull( - createLiveStreamFilter(), - createPublicChatFilter(), - createCommunitiesFilter(), - createLiveStreamTagsFilter(), - createPublicChatsTagsFilter(), - createCommunitiesTagsFilter(), - createCommunitiesGeohashesFilter(), - createPublicChatsGeohashesFilter(), - createLiveStreamGeohashesFilter() + discoveryFeedChannel.typedFilters = createLiveStreamFilter().plus(createPublicChatFilter()).plus( + listOfNotNull( + createLiveStreamTagsFilter(), + createLiveStreamGeohashesFilter(), + createCommunitiesFilter(), + createPublicChatsTagsFilter(), + createCommunitiesTagsFilter(), + createCommunitiesGeohashesFilter(), + createPublicChatsGeohashesFilter() + ) ).ifEmpty { null } } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrHomeDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrHomeDataSource.kt index 2c49f5fad..183fbb935 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrHomeDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrHomeDataSource.kt @@ -54,13 +54,8 @@ object NostrHomeDataSource : NostrDataSource("HomeFeed") { } fun createFollowAccountsFilter(): TypedFilter { - val follows = account.selectedUsersFollowList(account.defaultHomeFollowList) - - val followKeys = follows?.map { - it.substring(0, 8) - } - - val followSet = followKeys?.plus(account.userProfile().pubkeyHex.substring(0, 8)) + val follows = account.selectedUsersFollowList(account.defaultHomeFollowList) ?: emptySet() + val followSet = follows.plus(account.userProfile().pubkeyHex).toList() return TypedFilter( types = setOf(FeedType.FOLLOWS), diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrVideoDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrVideoDataSource.kt index 1ca8bd199..2fcd5ecb0 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrVideoDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrVideoDataSource.kt @@ -14,16 +14,12 @@ object NostrVideoDataSource : NostrDataSource("VideoFeed") { val latestEOSEs = EOSEAccount() fun createContextualFilter(): TypedFilter? { - val follows = account.selectedUsersFollowList(account.defaultStoriesFollowList) - - val followKeys = follows?.map { - it.substring(0, 6) - } + val follows = account.selectedUsersFollowList(account.defaultStoriesFollowList)?.toList() return TypedFilter( types = setOf(FeedType.GLOBAL), filter = JsonFilter( - authors = followKeys, + authors = follows, kinds = listOf(FileHeaderEvent.kind, FileStorageHeaderEvent.kind), limit = 200, since = latestEOSEs.users[account.userProfile()]?.followList?.get(account.defaultStoriesFollowList)?.relayList