Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,8 @@ internal class FeedsClientImpl(
commentsRepository = commentsRepository,
feedsRepository = feedsRepository,
pollsRepository = pollsRepository,
subscriptionManager = feedsEventsSubscriptionManager,
socketSubscriptionManager = feedsEventsSubscriptionManager,
subscriptionManager = stateEventsSubscriptionManager,
feedWatchHandler = feedWatchHandler,
)

Expand All @@ -211,7 +212,7 @@ internal class FeedsClientImpl(
FollowListImpl(
query = query,
feedsRepository = feedsRepository,
subscriptionManager = feedsEventsSubscriptionManager,
subscriptionManager = stateEventsSubscriptionManager,
)

override fun activity(activityId: String, fid: FeedId): Activity =
Expand Down Expand Up @@ -243,7 +244,7 @@ internal class FeedsClientImpl(
query = query,
currentUserId = user.id,
activitiesRepository = activitiesRepository,
subscriptionManager = feedsEventsSubscriptionManager,
subscriptionManager = stateEventsSubscriptionManager,
)

override fun activityReactionList(query: ActivityReactionsQuery): ActivityReactionList =
Expand Down Expand Up @@ -303,7 +304,7 @@ internal class FeedsClientImpl(
query = query,
currentUserId = user.id,
commentsRepository = commentsRepository,
subscriptionManager = feedsEventsSubscriptionManager,
subscriptionManager = stateEventsSubscriptionManager,
)

override fun commentReactionList(query: CommentReactionsQuery): CommentReactionList =
Expand All @@ -317,21 +318,21 @@ internal class FeedsClientImpl(
MemberListImpl(
query = query,
feedsRepository = feedsRepository,
subscriptionManager = feedsEventsSubscriptionManager,
subscriptionManager = stateEventsSubscriptionManager,
)

override fun pollVoteList(query: PollVotesQuery): PollVoteList =
PollVoteListImpl(
query = query,
repository = pollsRepository,
subscriptionManager = feedsEventsSubscriptionManager,
subscriptionManager = stateEventsSubscriptionManager,
)

override fun pollList(query: PollsQuery): PollList =
PollListImpl(
query = query,
pollsRepository = pollsRepository,
subscriptionManager = feedsEventsSubscriptionManager,
subscriptionManager = stateEventsSubscriptionManager,
)

override fun moderationConfigList(query: ModerationConfigsQuery): ModerationConfigList =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import io.getstream.feeds.android.client.api.state.ActivityListState
import io.getstream.feeds.android.client.api.state.query.ActivitiesQuery
import io.getstream.feeds.android.client.internal.repository.ActivitiesRepository
import io.getstream.feeds.android.client.internal.state.event.handler.ActivityListEventHandler
import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener
import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener

/**
* A paginated list of activities that supports real-time updates and filtering.
Expand All @@ -42,7 +42,7 @@ internal class ActivityListImpl(
override val query: ActivitiesQuery,
private val currentUserId: String,
private val activitiesRepository: ActivitiesRepository,
private val subscriptionManager: StreamSubscriptionManager<FeedsEventListener>,
private val subscriptionManager: StreamSubscriptionManager<StateUpdateEventListener>,
) : ActivityList {

private val _state: ActivityListStateImpl = ActivityListStateImpl(query, currentUserId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import io.getstream.feeds.android.client.api.state.CommentReplyListState
import io.getstream.feeds.android.client.api.state.query.CommentRepliesQuery
import io.getstream.feeds.android.client.internal.repository.CommentsRepository
import io.getstream.feeds.android.client.internal.state.event.handler.CommentReplyListEventHandler
import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener
import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener

/**
* A class representing a paginated list of replies for a specific comment.
Expand All @@ -41,7 +41,7 @@ internal class CommentReplyListImpl(
override val query: CommentRepliesQuery,
private val currentUserId: String,
private val commentsRepository: CommentsRepository,
private val subscriptionManager: StreamSubscriptionManager<FeedsEventListener>,
private val subscriptionManager: StreamSubscriptionManager<StateUpdateEventListener>,
) : CommentReplyList {

private val _state: CommentReplyListStateImpl = CommentReplyListStateImpl(query, currentUserId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import io.getstream.feeds.android.client.internal.repository.FeedsRepository
import io.getstream.feeds.android.client.internal.repository.PollsRepository
import io.getstream.feeds.android.client.internal.state.event.handler.FeedEventHandler
import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener
import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener
import io.getstream.feeds.android.client.internal.utils.flatMap
import io.getstream.feeds.android.network.models.AcceptFollowRequest
import io.getstream.feeds.android.network.models.AddActivityRequest
Expand Down Expand Up @@ -81,7 +82,8 @@ import io.getstream.feeds.android.network.models.UpdateFeedRequest
* @property commentsRepository The [CommentsRepository] used to manage comments in the feed.
* @property feedsRepository The [FeedsRepository] used to manage feed data and operations.
* @property pollsRepository The [PollsRepository] used to manage polls in the feed.
* @property subscriptionManager The [StreamSubscriptionManager] used to manage WebSocket
* @property subscriptionManager The manager for state update subscriptions.
* @param socketSubscriptionManager The [StreamSubscriptionManager] used to manage WebSocket
* subscriptions for feed events.
*/
internal class FeedImpl(
Expand All @@ -92,7 +94,8 @@ internal class FeedImpl(
private val commentsRepository: CommentsRepository,
private val feedsRepository: FeedsRepository,
private val pollsRepository: PollsRepository,
private val subscriptionManager: StreamSubscriptionManager<FeedsEventListener>,
private val subscriptionManager: StreamSubscriptionManager<StateUpdateEventListener>,
socketSubscriptionManager: StreamSubscriptionManager<FeedsEventListener>,
private val feedWatchHandler: FeedWatchHandler,
) : Feed {

Expand All @@ -113,7 +116,7 @@ internal class FeedImpl(
private val eventHandler = FeedEventHandler(fid = fid, state = _state)

init {
subscriptionManager.subscribe(eventHandler)
socketSubscriptionManager.subscribe(eventHandler)
}

private val group: String
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import io.getstream.feeds.android.client.api.state.query.FollowsQuery
import io.getstream.feeds.android.client.api.state.query.toRequest
import io.getstream.feeds.android.client.internal.repository.FeedsRepository
import io.getstream.feeds.android.client.internal.state.event.handler.FollowListEventHandler
import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener
import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener

/**
* A class that manages a paginated list of follows.
Expand All @@ -40,7 +40,7 @@ import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener
internal class FollowListImpl(
override val query: FollowsQuery,
private val feedsRepository: FeedsRepository,
private val subscriptionManager: StreamSubscriptionManager<FeedsEventListener>,
private val subscriptionManager: StreamSubscriptionManager<StateUpdateEventListener>,
) : FollowList {

private val _state: FollowListStateImpl = FollowListStateImpl(query)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import io.getstream.feeds.android.client.api.state.query.MembersQuery
import io.getstream.feeds.android.client.api.state.query.toRequest
import io.getstream.feeds.android.client.internal.repository.FeedsRepository
import io.getstream.feeds.android.client.internal.state.event.handler.MemberListEventHandler
import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener
import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener

/**
* A class that manages a paginated list of feed members.
Expand All @@ -40,7 +40,7 @@ import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener
internal class MemberListImpl(
override val query: MembersQuery,
private val feedsRepository: FeedsRepository,
private val subscriptionManager: StreamSubscriptionManager<FeedsEventListener>,
private val subscriptionManager: StreamSubscriptionManager<StateUpdateEventListener>,
) : MemberList {

private val _state: MemberListStateImpl = MemberListStateImpl(query)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import io.getstream.feeds.android.client.api.state.PollListState
import io.getstream.feeds.android.client.api.state.query.PollsQuery
import io.getstream.feeds.android.client.internal.repository.PollsRepository
import io.getstream.feeds.android.client.internal.state.event.handler.PollListEventHandler
import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener
import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener

/**
* Implementation of [PollList] that manages the state of a list of polls.
Expand All @@ -41,7 +41,7 @@ import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener
internal class PollListImpl(
override val query: PollsQuery,
private val pollsRepository: PollsRepository,
private val subscriptionManager: StreamSubscriptionManager<FeedsEventListener>,
private val subscriptionManager: StreamSubscriptionManager<StateUpdateEventListener>,
private val _state: PollListStateImpl = PollListStateImpl(query),
) : PollList {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import io.getstream.feeds.android.client.api.state.PollVoteListState
import io.getstream.feeds.android.client.api.state.query.PollVotesQuery
import io.getstream.feeds.android.client.internal.repository.PollsRepository
import io.getstream.feeds.android.client.internal.state.event.handler.PollVoteListEventHandler
import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener
import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener

/**
* An implementation of [PollVoteList] that manages the state and queries for poll votes.
Expand All @@ -41,7 +41,7 @@ import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener
internal class PollVoteListImpl(
override val query: PollVotesQuery,
private val repository: PollsRepository,
private val subscriptionManager: StreamSubscriptionManager<FeedsEventListener>,
private val subscriptionManager: StreamSubscriptionManager<StateUpdateEventListener>,
private val _state: PollVoteListStateImpl = PollVoteListStateImpl(query),
) : PollVoteList {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,21 @@
*/
package io.getstream.feeds.android.client.internal.state.event

import io.getstream.feeds.android.client.api.model.ActivityData
import io.getstream.feeds.android.client.api.model.BookmarkData
import io.getstream.feeds.android.client.api.model.BookmarkFolderData
import io.getstream.feeds.android.client.api.model.CommentData
import io.getstream.feeds.android.client.api.model.FeedData
import io.getstream.feeds.android.client.api.model.FeedMemberData
import io.getstream.feeds.android.client.api.model.FeedsReactionData
import io.getstream.feeds.android.client.api.model.FollowData
import io.getstream.feeds.android.client.api.model.PollData
import io.getstream.feeds.android.client.api.model.PollVoteData
import io.getstream.feeds.android.client.api.model.toModel
import io.getstream.feeds.android.network.models.ActivityDeletedEvent
import io.getstream.feeds.android.network.models.ActivityReactionAddedEvent
import io.getstream.feeds.android.network.models.ActivityReactionDeletedEvent
import io.getstream.feeds.android.network.models.BookmarkAddedEvent
import io.getstream.feeds.android.network.models.BookmarkDeletedEvent
import io.getstream.feeds.android.network.models.BookmarkFolderDeletedEvent
import io.getstream.feeds.android.network.models.BookmarkFolderUpdatedEvent
Expand All @@ -33,7 +40,18 @@ import io.getstream.feeds.android.network.models.CommentReactionAddedEvent
import io.getstream.feeds.android.network.models.CommentReactionDeletedEvent
import io.getstream.feeds.android.network.models.CommentUpdatedEvent
import io.getstream.feeds.android.network.models.FeedDeletedEvent
import io.getstream.feeds.android.network.models.FeedMemberAddedEvent
import io.getstream.feeds.android.network.models.FeedMemberRemovedEvent
import io.getstream.feeds.android.network.models.FeedMemberUpdatedEvent
import io.getstream.feeds.android.network.models.FeedUpdatedEvent
import io.getstream.feeds.android.network.models.FollowDeletedEvent
import io.getstream.feeds.android.network.models.FollowUpdatedEvent
import io.getstream.feeds.android.network.models.PollClosedFeedEvent
import io.getstream.feeds.android.network.models.PollDeletedFeedEvent
import io.getstream.feeds.android.network.models.PollUpdatedFeedEvent
import io.getstream.feeds.android.network.models.PollVoteCastedFeedEvent
import io.getstream.feeds.android.network.models.PollVoteChangedFeedEvent
import io.getstream.feeds.android.network.models.PollVoteRemovedFeedEvent
import io.getstream.feeds.android.network.models.WSEvent

/**
Expand All @@ -42,10 +60,14 @@ import io.getstream.feeds.android.network.models.WSEvent
*/
internal sealed interface StateUpdateEvent {

data class ActivityDeleted(val activity: ActivityData) : StateUpdateEvent

data class ActivityReactionAdded(val reaction: FeedsReactionData) : StateUpdateEvent

data class ActivityReactionDeleted(val reaction: FeedsReactionData) : StateUpdateEvent

data class BookmarkAdded(val bookmark: BookmarkData) : StateUpdateEvent

data class BookmarkDeleted(val bookmark: BookmarkData) : StateUpdateEvent

data class BookmarkUpdated(val bookmark: BookmarkData) : StateUpdateEvent
Expand All @@ -69,15 +91,44 @@ internal sealed interface StateUpdateEvent {
data class FeedUpdated(val feed: FeedData) : StateUpdateEvent

data class FeedDeleted(val fid: String) : StateUpdateEvent

data class FeedMemberAdded(val fid: String, val member: FeedMemberData) : StateUpdateEvent

data class FeedMemberRemoved(val fid: String, val memberId: String) : StateUpdateEvent

data class FeedMemberUpdated(val fid: String, val member: FeedMemberData) : StateUpdateEvent

data class FollowUpdated(val follow: FollowData) : StateUpdateEvent

data class FollowDeleted(val follow: FollowData) : StateUpdateEvent

data class PollClosed(val fid: String, val poll: PollData) : StateUpdateEvent

data class PollDeleted(val fid: String, val pollId: String) : StateUpdateEvent

data class PollUpdated(val fid: String, val poll: PollData) : StateUpdateEvent

data class PollVoteCasted(val fid: String, val pollId: String, val vote: PollVoteData) :
StateUpdateEvent

data class PollVoteChanged(val fid: String, val pollId: String, val vote: PollVoteData) :
StateUpdateEvent

data class PollVoteRemoved(val fid: String, val pollId: String, val vote: PollVoteData) :
StateUpdateEvent
}

internal fun WSEvent.toModel(): StateUpdateEvent? =
when (this) {
is ActivityDeletedEvent -> StateUpdateEvent.ActivityDeleted(activity.toModel())

is ActivityReactionAddedEvent -> StateUpdateEvent.ActivityReactionAdded(reaction.toModel())

is ActivityReactionDeletedEvent ->
StateUpdateEvent.ActivityReactionDeleted(reaction.toModel())

is BookmarkAddedEvent -> StateUpdateEvent.BookmarkAdded(bookmark.toModel())

is BookmarkDeletedEvent -> StateUpdateEvent.BookmarkDeleted(bookmark.toModel())

is BookmarkUpdatedEvent -> StateUpdateEvent.BookmarkUpdated(bookmark.toModel())
Expand All @@ -103,5 +154,30 @@ internal fun WSEvent.toModel(): StateUpdateEvent? =

is FeedDeletedEvent -> StateUpdateEvent.FeedDeleted(fid)

is FollowUpdatedEvent -> StateUpdateEvent.FollowUpdated(follow.toModel())

is FollowDeletedEvent -> StateUpdateEvent.FollowDeleted(follow.toModel())

is FeedMemberAddedEvent -> StateUpdateEvent.FeedMemberAdded(fid, member.toModel())

is FeedMemberRemovedEvent -> StateUpdateEvent.FeedMemberRemoved(fid, memberId)

is FeedMemberUpdatedEvent -> StateUpdateEvent.FeedMemberUpdated(fid, member.toModel())

is PollClosedFeedEvent -> StateUpdateEvent.PollClosed(fid, poll.toModel())

is PollDeletedFeedEvent -> StateUpdateEvent.PollDeleted(fid, poll.id)

is PollUpdatedFeedEvent -> StateUpdateEvent.PollUpdated(fid, poll.toModel())

is PollVoteCastedFeedEvent ->
StateUpdateEvent.PollVoteCasted(fid, poll.id, pollVote.toModel())

is PollVoteChangedFeedEvent ->
StateUpdateEvent.PollVoteChanged(fid, poll.id, pollVote.toModel())

is PollVoteRemovedFeedEvent ->
StateUpdateEvent.PollVoteRemoved(fid, poll.id, pollVote.toModel())

else -> null
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,30 +15,22 @@
*/
package io.getstream.feeds.android.client.internal.state.event.handler

import io.getstream.feeds.android.client.api.model.toModel
import io.getstream.feeds.android.client.internal.state.ActivityListStateUpdates
import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener
import io.getstream.feeds.android.network.models.ActivityDeletedEvent
import io.getstream.feeds.android.network.models.ActivityReactionAddedEvent
import io.getstream.feeds.android.network.models.ActivityReactionDeletedEvent
import io.getstream.feeds.android.network.models.BookmarkAddedEvent
import io.getstream.feeds.android.network.models.BookmarkDeletedEvent
import io.getstream.feeds.android.network.models.CommentAddedEvent
import io.getstream.feeds.android.network.models.CommentDeletedEvent
import io.getstream.feeds.android.network.models.WSEvent
import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent
import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener

internal class ActivityListEventHandler(private val state: ActivityListStateUpdates) :
FeedsEventListener {
StateUpdateEventListener {

override fun onEvent(event: WSEvent) {
override fun onEvent(event: StateUpdateEvent) {
when (event) {
is ActivityDeletedEvent -> state.onActivityRemoved(event.activity.toModel())
is ActivityReactionAddedEvent -> state.onReactionAdded(event.reaction.toModel())
is ActivityReactionDeletedEvent -> state.onReactionRemoved(event.reaction.toModel())
is BookmarkAddedEvent -> state.onBookmarkAdded(event.bookmark.toModel())
is BookmarkDeletedEvent -> state.onBookmarkRemoved(event.bookmark.toModel())
is CommentAddedEvent -> state.onCommentAdded(event.comment.toModel())
is CommentDeletedEvent -> state.onCommentRemoved(event.comment.toModel())
is StateUpdateEvent.ActivityDeleted -> state.onActivityRemoved(event.activity)
is StateUpdateEvent.ActivityReactionAdded -> state.onReactionAdded(event.reaction)
is StateUpdateEvent.ActivityReactionDeleted -> state.onReactionRemoved(event.reaction)
is StateUpdateEvent.BookmarkAdded -> state.onBookmarkAdded(event.bookmark)
is StateUpdateEvent.BookmarkDeleted -> state.onBookmarkRemoved(event.bookmark)
is StateUpdateEvent.CommentAdded -> state.onCommentAdded(event.comment)
is StateUpdateEvent.CommentDeleted -> state.onCommentRemoved(event.comment)
else -> {
// No action needed for other event types
}
Expand Down
Loading