From 1782eb3bea8311c0820667ae61d7e653db7c29d1 Mon Sep 17 00:00:00 2001 From: Leandro Borges Ferreira Date: Mon, 30 Jan 2023 12:55:12 +0100 Subject: [PATCH] Adding start/stop watching event --- .../stream_chat/lib/src/client/channel.dart | 33 +++++++++++++++++++ packages/stream_chat/lib/src/event_type.dart | 6 ++++ 2 files changed, 39 insertions(+) diff --git a/packages/stream_chat/lib/src/client/channel.dart b/packages/stream_chat/lib/src/client/channel.dart index bfaae76a..8b132f02 100644 --- a/packages/stream_chat/lib/src/client/channel.dart +++ b/packages/stream_chat/lib/src/client/channel.dart @@ -1754,6 +1754,26 @@ class ChannelClientState { )); } + void _listenUserStartWatching() { + _subscriptions.add( + _channel.on(EventType.userWatchingStart).listen((event) { + if (event.user != null) { + _incrementWatcher(event.user!); + } + }), + ); + } + + void _listenUserStopWatching() { + _subscriptions.add( + _channel.on(EventType.userWatchingStop).listen((event) { + if (event.user != null) { + channelState.watchers?.remove(event.user); + } + }), + ); + } + void _listenMemberUnbanned() { _subscriptions.add(_channel .on(EventType.userUnbanned) @@ -1770,6 +1790,19 @@ class ChannelClientState { )); } + void _incrementWatcher(User user) { + List newWatchers; + + if (channelState.watchers == null) { + channelState.watchers!.add(user); + newWatchers = channelState.watchers!; + } else { + newWatchers = [user]; + } + + channelState.copyWith(watchers: newWatchers); + } + void _updateMember(Member member) { final currentMembers = [...members]; final memberIndex = currentMembers.indexWhere( diff --git a/packages/stream_chat/lib/src/event_type.dart b/packages/stream_chat/lib/src/event_type.dart index b553943e..f8fb7ed7 100644 --- a/packages/stream_chat/lib/src/event_type.dart +++ b/packages/stream_chat/lib/src/event_type.dart @@ -36,6 +36,12 @@ class EventType { /// Event sent when updating a message static const String messageUpdated = 'message.updated'; + /// Event sent when a user starts watching a channel + static const String userWatchingStart = 'user.watching.start'; + + /// Event sent when a user stops watching a channel + static const String userWatchingStop = 'user.watching.stop'; + /// Event sent when reading a message static const String messageRead = 'message.read';