Adds an isDifferent function to avoid resending NormalFilters

This commit is contained in:
Vitor Pamplona
2025-05-13 14:46:09 -04:00
parent 09946c19b9
commit 466f52245b
@@ -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
}
}