package com.vitorpamplona.amethyst.ui.dal import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.quartz.events.ChannelMessageEvent import com.vitorpamplona.quartz.events.LiveActivitiesChatMessageEvent import com.vitorpamplona.quartz.events.PollNoteEvent import com.vitorpamplona.quartz.events.TextNoteEvent class UserProfileConversationsFeedFilter(val user: User, val account: Account) : AdditiveFeedFilter() { override fun feedKey(): String { return account.userProfile().pubkeyHex + "-" + user.pubkeyHex } override fun feed(): List { return sort(innerApplyFilter(LocalCache.notes.values)) } override fun applyFilter(collection: Set): Set { return innerApplyFilter(collection) } private fun innerApplyFilter(collection: Collection): Set { return collection .filter { it.author == user && ( it.event is TextNoteEvent || it.event is PollNoteEvent || it.event is ChannelMessageEvent || it.event is LiveActivitiesChatMessageEvent ) && !it.isNewThread() && account.isAcceptable(it) == true }.toSet() } override fun sort(collection: Set): List { return collection.sortedWith(compareBy({ it.createdAt() }, { it.idHex })).reversed() } override fun limit() = 200 }