Skip to content

Commit 7158fe7

Browse files
authored
Match remaining "Updated" events with filters and treat failing matches as removals (#131)
1 parent 3a26ff2 commit 7158fe7

20 files changed

+136
-48
lines changed

stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkFolderListImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ internal class BookmarkFolderListImpl(
4545

4646
private val _state: BookmarkFolderListStateImpl = BookmarkFolderListStateImpl(query)
4747

48-
private val eventHandler = BookmarkFolderListEventHandler(_state)
48+
private val eventHandler = BookmarkFolderListEventHandler(query.filter, _state)
4949

5050
init {
5151
subscriptionManager.subscribe(eventHandler)

stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkListImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ internal class BookmarkListImpl(
4444

4545
private val _state: BookmarkListStateImpl = BookmarkListStateImpl(query)
4646

47-
private val eventHandler = BookmarkListEventHandler(_state)
47+
private val eventHandler = BookmarkListEventHandler(query.filter, _state)
4848

4949
init {
5050
subscriptionManager.subscribe(eventHandler)

stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/ActivityListEventHandler.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ internal class ActivityListEventHandler(
3838
is StateUpdateEvent.ActivityUpdated -> {
3939
if (event.activity matches filter) {
4040
state.onActivityUpserted(event.activity)
41+
} else {
42+
// We remove elements that used to match the filter but no longer do
43+
state.onActivityRemoved(event.activity.id)
4144
}
4245
}
4346

stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/BookmarkFolderListEventHandler.kt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,30 @@
1515
*/
1616
package io.getstream.feeds.android.client.internal.state.event.handler
1717

18+
import io.getstream.feeds.android.client.api.state.query.BookmarkFoldersFilter
1819
import io.getstream.feeds.android.client.internal.state.BookmarkFolderListStateUpdates
1920
import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent
21+
import io.getstream.feeds.android.client.internal.state.query.matches
2022
import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener
2123

22-
internal class BookmarkFolderListEventHandler(private val state: BookmarkFolderListStateUpdates) :
23-
StateUpdateEventListener {
24+
internal class BookmarkFolderListEventHandler(
25+
private val filter: BookmarkFoldersFilter?,
26+
private val state: BookmarkFolderListStateUpdates,
27+
) : StateUpdateEventListener {
2428

2529
override fun onEvent(event: StateUpdateEvent) {
2630
when (event) {
2731
is StateUpdateEvent.BookmarkFolderDeleted ->
2832
state.onBookmarkFolderRemoved(event.folderId)
29-
is StateUpdateEvent.BookmarkFolderUpdated -> state.onBookmarkFolderUpdated(event.folder)
33+
34+
is StateUpdateEvent.BookmarkFolderUpdated -> {
35+
if (event.folder matches filter) {
36+
state.onBookmarkFolderUpdated(event.folder)
37+
} else {
38+
// We remove elements that used to match the filter but no longer do
39+
state.onBookmarkFolderRemoved(event.folder.id)
40+
}
41+
}
3042
else -> {}
3143
}
3244
}

stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/BookmarkListEventHandler.kt

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,39 @@
1515
*/
1616
package io.getstream.feeds.android.client.internal.state.event.handler
1717

18+
import io.getstream.feeds.android.client.api.state.query.BookmarksFilter
1819
import io.getstream.feeds.android.client.internal.state.BookmarkListStateUpdates
1920
import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent
21+
import io.getstream.feeds.android.client.internal.state.query.matches
2022
import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener
2123

22-
internal class BookmarkListEventHandler(private val state: BookmarkListStateUpdates) :
23-
StateUpdateEventListener {
24+
internal class BookmarkListEventHandler(
25+
private val filter: BookmarksFilter?,
26+
private val state: BookmarkListStateUpdates,
27+
) : StateUpdateEventListener {
2428

2529
override fun onEvent(event: StateUpdateEvent) {
2630
when (event) {
2731
is StateUpdateEvent.BookmarkFolderDeleted ->
2832
state.onBookmarkFolderRemoved(event.folderId)
2933

3034
is StateUpdateEvent.BookmarkFolderUpdated -> state.onBookmarkFolderUpdated(event.folder)
31-
is StateUpdateEvent.BookmarkAdded -> state.onBookmarkUpserted(event.bookmark)
35+
is StateUpdateEvent.BookmarkAdded -> {
36+
if (event.bookmark matches filter) {
37+
state.onBookmarkUpserted(event.bookmark)
38+
}
39+
}
40+
3241
is StateUpdateEvent.BookmarkDeleted -> state.onBookmarkRemoved(event.bookmark)
33-
is StateUpdateEvent.BookmarkUpdated -> state.onBookmarkUpserted(event.bookmark)
42+
is StateUpdateEvent.BookmarkUpdated -> {
43+
if (event.bookmark matches filter) {
44+
state.onBookmarkUpserted(event.bookmark)
45+
} else {
46+
// We remove elements that used to match the filter but no longer do
47+
state.onBookmarkRemoved(event.bookmark)
48+
}
49+
}
50+
3451
else -> {}
3552
}
3653
}

stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/CommentListEventHandler.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,14 @@ internal class CommentListEventHandler(
3535
}
3636

3737
is StateUpdateEvent.CommentDeleted -> state.onCommentRemoved(event.comment.id)
38-
is StateUpdateEvent.CommentUpdated -> state.onCommentUpserted(event.comment)
38+
is StateUpdateEvent.CommentUpdated -> {
39+
if (event.comment matches filter) {
40+
state.onCommentUpserted(event.comment)
41+
} else {
42+
// We remove elements that used to match the filter but no longer do
43+
state.onCommentRemoved(event.comment.id)
44+
}
45+
}
3946
is StateUpdateEvent.CommentReactionDeleted ->
4047
state.onCommentReactionRemoved(event.comment, event.reaction)
4148

stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/FeedEventHandler.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,13 @@ internal class FeedEventHandler(
5858
}
5959

6060
is StateUpdateEvent.ActivityUpdated -> {
61-
if (event.fid == fid.rawValue && event.activity matches activityFilter) {
62-
state.onActivityUpserted(event.activity)
61+
if (event.fid == fid.rawValue) {
62+
if (event.activity matches activityFilter) {
63+
state.onActivityUpserted(event.activity)
64+
} else {
65+
// We remove elements that used to match the filter but no longer do
66+
state.onActivityRemoved(event.activity.id)
67+
}
6368
}
6469
}
6570

stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/FeedListEventHandler.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ internal class FeedListEventHandler(
4141
is StateUpdateEvent.FeedUpdated -> {
4242
if (event.feed matches filter) {
4343
state.onFeedUpserted(event.feed)
44+
} else {
45+
// We remove elements that used to match the filter but no longer do
46+
state.onFeedRemoved(event.feed.fid.rawValue)
4447
}
4548
}
4649

stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/FollowListEventHandler.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ internal class FollowListEventHandler(
4141
is StateUpdateEvent.FollowUpdated -> {
4242
if (event.follow matches filter) {
4343
state.onFollowUpserted(event.follow)
44+
} else {
45+
// We remove elements that used to match the filter but no longer do
46+
state.onFollowRemoved(event.follow)
4447
}
4548
}
4649

stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/MemberListEventHandler.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,13 @@ internal class MemberListEventHandler(
4242
}
4343

4444
is StateUpdateEvent.FeedMemberUpdated -> {
45-
if (event.fid == fid.rawValue && event.member matches filter) {
46-
state.onMemberUpserted(event.member)
45+
if (event.fid == fid.rawValue) {
46+
if (event.member matches filter) {
47+
state.onMemberUpserted(event.member)
48+
} else {
49+
// We remove elements that used to match the filter but no longer do
50+
state.onMemberRemoved(event.member.id)
51+
}
4752
}
4853
}
4954

0 commit comments

Comments
 (0)