Adds an isDifferent function to avoid resending NormalFilters
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
package com.vitorpamplona.ammolite.relays.datasources
|
||||
|
||||
import com.vitorpamplona.ammolite.relays.TypedFilter
|
||||
import com.vitorpamplona.ammolite.relays.filters.NormalFilter
|
||||
import com.vitorpamplona.ammolite.relays.filters.SinceAuthorPerRelayFilter
|
||||
import com.vitorpamplona.ammolite.relays.filters.SincePerRelayFilter
|
||||
import java.util.UUID
|
||||
@@ -57,6 +58,10 @@ data class Subscription(
|
||||
return isDifferent(typedFilter.filter, otherFilter.filter)
|
||||
}
|
||||
|
||||
if (typedFilter.filter is NormalFilter && otherFilter.filter is NormalFilter) {
|
||||
return isDifferent(typedFilter.filter, otherFilter.filter)
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
return false
|
||||
@@ -121,4 +126,34 @@ data class Subscription(
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
fun isDifferent(
|
||||
filter1: NormalFilter,
|
||||
filter2: NormalFilter,
|
||||
): Boolean {
|
||||
// Does not check SINCE on purpose. Avoids replacing the filter if SINCE was all that changed.
|
||||
// fast check
|
||||
if (filter1.authors?.size != filter2.authors?.size ||
|
||||
filter1.ids?.size != filter2.ids?.size ||
|
||||
filter1.tags?.size != filter2.tags?.size ||
|
||||
filter1.kinds?.size != filter2.kinds?.size ||
|
||||
filter1.limit != filter2.limit ||
|
||||
filter1.search?.length != filter2.search?.length ||
|
||||
filter1.until != filter2.until
|
||||
) {
|
||||
return true
|
||||
}
|
||||
|
||||
// deep check
|
||||
if (filter1.ids != filter2.ids ||
|
||||
filter1.authors != filter2.authors ||
|
||||
filter1.tags != filter2.tags ||
|
||||
filter1.kinds != filter2.kinds ||
|
||||
filter1.search != filter2.search
|
||||
) {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user