kopia lustrzana https://github.com/vitorpamplona/amethyst
44 wiersze
1.4 KiB
Kotlin
44 wiersze
1.4 KiB
Kotlin
package com.vitorpamplona.amethyst.service
|
|
|
|
import com.vitorpamplona.amethyst.model.ThreadAssembler
|
|
import com.vitorpamplona.amethyst.service.relays.FeedType
|
|
import com.vitorpamplona.amethyst.service.relays.JsonFilter
|
|
import com.vitorpamplona.amethyst.service.relays.TypedFilter
|
|
|
|
object NostrThreadDataSource : NostrDataSource("SingleThreadFeed") {
|
|
private var eventToWatch: String? = null
|
|
|
|
fun createLoadEventsIfNotLoadedFilter(): TypedFilter? {
|
|
val threadToLoad = eventToWatch ?: return null
|
|
|
|
val eventsToLoad = ThreadAssembler().findThreadFor(threadToLoad)
|
|
.filter { it.event == null }
|
|
.map { it.idHex }
|
|
.toSet()
|
|
.ifEmpty { null } ?: return null
|
|
|
|
return TypedFilter(
|
|
types = FeedType.values().toSet(),
|
|
filter = JsonFilter(
|
|
ids = eventsToLoad.map { it.substring(0, 8) }
|
|
)
|
|
)
|
|
}
|
|
|
|
val loadEventsChannel = requestNewChannel() { eoseTime, relay ->
|
|
// Many relays operate with limits in the amount of filters.
|
|
// As information comes, the filters will be rotated to get more data.
|
|
invalidateFilters()
|
|
}
|
|
|
|
override fun updateChannelFilters() {
|
|
loadEventsChannel.typedFilters = listOfNotNull(createLoadEventsIfNotLoadedFilter()).ifEmpty { null }
|
|
}
|
|
|
|
fun loadThread(noteId: String?) {
|
|
eventToWatch = noteId
|
|
|
|
invalidateFilters()
|
|
}
|
|
}
|