fix(llc): fix user, channel unreadCount

Signed-off-by: xsahil03x <[email protected]>
This commit is contained in:
Sahil Kumar
2021-11-30 23:39:22 +05:30
committed by xsahil03x
parent f7e7c897c8
commit 5826074f3d
2 changed files with 23 additions and 16 deletions
@@ -1466,8 +1466,6 @@ class ChannelClientState {
_listenMemberRemoved();
_computeUnread();
_startCleaning();
_startCleaningPinnedMessages();
@@ -1490,15 +1488,6 @@ class ChannelClientState {
final _subscriptions = <StreamSubscription>[];
void _computeUnread() {
final userRead = channelState.read.firstWhereOrNull(
(r) => r.user.id == _channel._client.state.currentUser?.id,
);
if (userRead != null && userRead.unreadMessages > 0) {
unreadCount = userRead.unreadMessages;
}
}
void _checkExpiredAttachmentMessages(ChannelState channelState) async {
final expiredAttachmentMessagesId = channelState.messages
.where((m) =>
@@ -1850,15 +1839,31 @@ class ChannelClientState {
/// Channel read list as a stream.
Stream<List<Read>> get readStream => channelStateStream.map((cs) => cs.read);
final BehaviorSubject<int> _unreadCountController = BehaviorSubject.seeded(0);
bool _isCurrentUserRead(Read read) =>
read.user.id == _channel._client.state.currentUser!.id;
set unreadCount(int value) => _unreadCountController.add(value);
/// Channel read for the logged in user.
Read? get currentUserRead => read.firstWhereOrNull(_isCurrentUserRead);
/// Channel read for the logged in user as a stream.
Stream<Read?> get currentUserReadStream =>
readStream.map((read) => read.firstWhereOrNull(_isCurrentUserRead));
/// Unread count getter as a stream.
Stream<int> get unreadCountStream => _unreadCountController.stream.distinct();
Stream<int> get unreadCountStream =>
currentUserReadStream.map((read) => read?.unreadMessages ?? 0);
/// Unread count getter.
int get unreadCount => _unreadCountController.value;
int get unreadCount => currentUserRead?.unreadMessages ?? 0;
/// Setter for unread count.
set unreadCount(int count) {
final reads = [..._channelState.read];
final currentUserReadIndex = reads.indexWhere(_isCurrentUserRead);
reads[currentUserReadIndex] =
reads[currentUserReadIndex].copyWith(unreadMessages: count);
_channelState = _channelState.copyWith(read: reads);
}
bool _countMessageAsUnread(Message message) {
final userId = _channel.client.state.currentUser?.id;
@@ -2118,7 +2123,6 @@ class ChannelClientState {
/// Call this method to dispose this object.
void dispose() {
_debouncedUpdatePersistenceChannelState.cancel();
_unreadCountController.close();
_retryQueue.dispose();
_subscriptions.forEach((s) => s.cancel());
_channelStateController.close();
@@ -395,6 +395,9 @@ class StreamChatClient {
}
void _handleHealthCheckEvent(Event event) {
final user = event.me;
if (user != null) state.currentUser = user;
final connectionId = event.connectionId;
if (connectionId != null) {
_connectionIdManager.setConnectionId(connectionId);