Speeding up Notification and Global feed filters

This commit is contained in:
Vitor Pamplona
2023-03-14 18:30:26 -04:00
parent 675b59c0d2
commit 1b8923b6d7
2 changed files with 13 additions and 12 deletions

View File

@@ -11,6 +11,7 @@ object GlobalFeedFilter : FeedFilter<Note>() {
lateinit var account: Account lateinit var account: Account
override fun feed() = LocalCache.notes.values override fun feed() = LocalCache.notes.values
.asSequence()
.filter { .filter {
(it.event is TextNoteEvent || it.event is LongTextNoteEvent || it.event is ChannelMessageEvent) && (it.event is TextNoteEvent || it.event is LongTextNoteEvent || it.event is ChannelMessageEvent) &&
it.replyTo.isNullOrEmpty() it.replyTo.isNullOrEmpty()
@@ -23,5 +24,6 @@ object GlobalFeedFilter : FeedFilter<Note>() {
} }
.filter { account.isAcceptable(it) } .filter { account.isAcceptable(it) }
.sortedBy { it.createdAt() } .sortedBy { it.createdAt() }
.toList()
.reversed() .reversed()
} }

View File

@@ -9,33 +9,32 @@ object NotificationFeedFilter : FeedFilter<Note>() {
lateinit var account: Account lateinit var account: Account
override fun feed(): List<Note> { override fun feed(): List<Note> {
val loggedInUser = account.userProfile().pubkeyHex val loggedInUser = account.userProfile()
return LocalCache.notes.values return LocalCache.notes.values
.filter { it.event?.isTaggedUser(loggedInUser) ?: false } .asSequence()
.filter {
it.author == null || (!account.isHidden(it.author!!) && it.author != account.userProfile())
}
.filter { .filter {
it.event !is ChannelCreateEvent && it.event !is ChannelCreateEvent &&
it.event !is ChannelMetadataEvent && it.event !is ChannelMetadataEvent &&
it.event !is LnZapRequestEvent && it.event !is LnZapRequestEvent &&
it.event !is BadgeDefinitionEvent && it.event !is BadgeDefinitionEvent &&
it.event !is BadgeProfilesEvent it.event !is BadgeProfilesEvent &&
it.event?.isTaggedUser(loggedInUser.pubkeyHex) ?: false &&
(it.author == null || (!account.isHidden(it.author!!) && it.author != loggedInUser))
} }
.filter { it -> .filter { it ->
it.event !is TextNoteEvent || it.event !is TextNoteEvent ||
it.replyTo?.any { it.author == account.userProfile() } == true || it.replyTo?.any { it.author == loggedInUser } == true ||
account.userProfile() in it.directlyCiteUsers() loggedInUser in it.directlyCiteUsers()
} }
.filter { .filter {
it.event !is ReactionEvent || it.event !is ReactionEvent ||
it.replyTo?.lastOrNull()?.author == account.userProfile() || it.replyTo?.lastOrNull()?.author == loggedInUser ||
account.userProfile() in it.directlyCiteUsers() loggedInUser in it.directlyCiteUsers()
} }
.filter { .filter {
it.event !is RepostEvent || it.event !is RepostEvent ||
it.replyTo?.lastOrNull()?.author == account.userProfile() || it.replyTo?.lastOrNull()?.author == loggedInUser ||
account.userProfile() in it.directlyCiteUsers() loggedInUser in it.directlyCiteUsers()
} }
.sortedBy { it.createdAt() } .sortedBy { it.createdAt() }
.toList() .toList()