Avoids rebuilding the channel object in DataSource.
This commit is contained in:
@@ -164,20 +164,12 @@ class ChannelLiveData(val channel: Channel) : LiveData<ChannelState>(ChannelStat
|
|||||||
|
|
||||||
override fun onActive() {
|
override fun onActive() {
|
||||||
super.onActive()
|
super.onActive()
|
||||||
if (channel is PublicChatChannel) {
|
NostrSingleChannelDataSource.add(channel)
|
||||||
NostrSingleChannelDataSource.add(channel.idHex)
|
|
||||||
} else {
|
|
||||||
NostrSingleChannelDataSource.add(channel.idHex)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onInactive() {
|
override fun onInactive() {
|
||||||
super.onInactive()
|
super.onInactive()
|
||||||
if (channel is PublicChatChannel) {
|
NostrSingleChannelDataSource.remove(channel)
|
||||||
NostrSingleChannelDataSource.remove(channel.idHex)
|
|
||||||
} else {
|
|
||||||
NostrSingleChannelDataSource.remove(channel.idHex)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+15
-13
@@ -1,7 +1,7 @@
|
|||||||
package com.vitorpamplona.amethyst.service
|
package com.vitorpamplona.amethyst.service
|
||||||
|
|
||||||
|
import com.vitorpamplona.amethyst.model.Channel
|
||||||
import com.vitorpamplona.amethyst.model.LiveActivitiesChannel
|
import com.vitorpamplona.amethyst.model.LiveActivitiesChannel
|
||||||
import com.vitorpamplona.amethyst.model.LocalCache
|
|
||||||
import com.vitorpamplona.amethyst.model.PublicChatChannel
|
import com.vitorpamplona.amethyst.model.PublicChatChannel
|
||||||
import com.vitorpamplona.amethyst.service.relays.COMMON_FEED_TYPES
|
import com.vitorpamplona.amethyst.service.relays.COMMON_FEED_TYPES
|
||||||
import com.vitorpamplona.amethyst.service.relays.FeedType
|
import com.vitorpamplona.amethyst.service.relays.FeedType
|
||||||
@@ -11,10 +11,10 @@ import com.vitorpamplona.quartz.events.ChannelCreateEvent
|
|||||||
import com.vitorpamplona.quartz.events.ChannelMetadataEvent
|
import com.vitorpamplona.quartz.events.ChannelMetadataEvent
|
||||||
|
|
||||||
object NostrSingleChannelDataSource : NostrDataSource("SingleChannelFeed") {
|
object NostrSingleChannelDataSource : NostrDataSource("SingleChannelFeed") {
|
||||||
private var channelsToWatch = setOf<String>()
|
private var channelsToWatch = setOf<Channel>()
|
||||||
|
|
||||||
private fun createRepliesAndReactionsFilter(): TypedFilter? {
|
private fun createMetadataChangeFilter(): TypedFilter? {
|
||||||
val reactionsToWatch = channelsToWatch.map { it }
|
val reactionsToWatch = channelsToWatch.filter { it is PublicChatChannel }.map { it.idHex }
|
||||||
|
|
||||||
if (reactionsToWatch.isEmpty()) {
|
if (reactionsToWatch.isEmpty()) {
|
||||||
return null
|
return null
|
||||||
@@ -32,7 +32,6 @@ object NostrSingleChannelDataSource : NostrDataSource("SingleChannelFeed") {
|
|||||||
|
|
||||||
fun createLoadEventsIfNotLoadedFilter(): TypedFilter? {
|
fun createLoadEventsIfNotLoadedFilter(): TypedFilter? {
|
||||||
val directEventsToLoad = channelsToWatch
|
val directEventsToLoad = channelsToWatch
|
||||||
.mapNotNull { LocalCache.checkGetOrCreateChannel(it) }
|
|
||||||
.filter { it.notes.isEmpty() && it is PublicChatChannel }
|
.filter { it.notes.isEmpty() && it is PublicChatChannel }
|
||||||
|
|
||||||
val interestedEvents = (directEventsToLoad).map { it.idHex }.toSet()
|
val interestedEvents = (directEventsToLoad).map { it.idHex }.toSet()
|
||||||
@@ -53,7 +52,6 @@ object NostrSingleChannelDataSource : NostrDataSource("SingleChannelFeed") {
|
|||||||
|
|
||||||
fun createLoadStreamingIfNotLoadedFilter(): List<TypedFilter>? {
|
fun createLoadStreamingIfNotLoadedFilter(): List<TypedFilter>? {
|
||||||
val directEventsToLoad = channelsToWatch
|
val directEventsToLoad = channelsToWatch
|
||||||
.mapNotNull { LocalCache.checkGetOrCreateChannel(it) }
|
|
||||||
.filterIsInstance<LiveActivitiesChannel>()
|
.filterIsInstance<LiveActivitiesChannel>()
|
||||||
.filter { it.info == null }
|
.filter { it.info == null }
|
||||||
|
|
||||||
@@ -81,7 +79,7 @@ object NostrSingleChannelDataSource : NostrDataSource("SingleChannelFeed") {
|
|||||||
val singleChannelChannel = requestNewChannel()
|
val singleChannelChannel = requestNewChannel()
|
||||||
|
|
||||||
override fun updateChannelFilters() {
|
override fun updateChannelFilters() {
|
||||||
val reactions = createRepliesAndReactionsFilter()
|
val reactions = createMetadataChangeFilter()
|
||||||
val missing = createLoadEventsIfNotLoadedFilter()
|
val missing = createLoadEventsIfNotLoadedFilter()
|
||||||
val missingStreaming = createLoadStreamingIfNotLoadedFilter()
|
val missingStreaming = createLoadStreamingIfNotLoadedFilter()
|
||||||
|
|
||||||
@@ -90,13 +88,17 @@ object NostrSingleChannelDataSource : NostrDataSource("SingleChannelFeed") {
|
|||||||
).ifEmpty { null }
|
).ifEmpty { null }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun add(eventId: String) {
|
fun add(eventId: Channel) {
|
||||||
channelsToWatch = channelsToWatch.plus(eventId)
|
if (eventId !in channelsToWatch) {
|
||||||
invalidateFilters()
|
channelsToWatch = channelsToWatch.plus(eventId)
|
||||||
|
invalidateFilters()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun remove(eventId: String) {
|
fun remove(eventId: Channel) {
|
||||||
channelsToWatch = channelsToWatch.minus(eventId)
|
if (eventId in channelsToWatch) {
|
||||||
invalidateFilters()
|
channelsToWatch = channelsToWatch.minus(eventId)
|
||||||
|
invalidateFilters()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user