From cef1b56c586c9233baf17168f00e7a904e5880c4 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 5 Mar 2021 09:56:00 +0100 Subject: [PATCH] fix(llc): update member presence and add skip_push to message (#314) * update member presence * add skip_push to message * fix tests --- packages/stream_chat/lib/src/api/channel.dart | 25 ++++++++++++++++++ .../stream_chat/lib/src/api/requests.g.dart | 2 +- .../stream_chat/lib/src/models/message.dart | 7 +++++ .../stream_chat/lib/src/models/message.g.dart | 2 ++ .../test/src/models/channel_state_test.dart | 26 +++++++++++++++++++ .../test/src/models/message_test.dart | 1 + 6 files changed, 62 insertions(+), 1 deletion(-) diff --git a/packages/stream_chat/lib/src/api/channel.dart b/packages/stream_chat/lib/src/api/channel.dart index 00508c1d..c05ba49a 100644 --- a/packages/stream_chat/lib/src/api/channel.dart +++ b/packages/stream_chat/lib/src/api/channel.dart @@ -1761,6 +1761,31 @@ class ChannelClientState { } }, ), + ) + ..add( + _channel + .on() + .where((event) => + event.user != null && + members?.any((m) => m.userId == event.user.id) == true) + .listen( + (event) { + final newMembers = List.from(members); + final oldMemberIndex = + newMembers.indexWhere((m) => m.userId == event.user.id); + if (oldMemberIndex > -1) { + final oldMember = newMembers.removeAt(oldMemberIndex); + updateChannelState(ChannelState( + members: [ + ...newMembers, + oldMember.copyWith( + user: event.user, + ), + ], + )); + } + }, + ), ); } diff --git a/packages/stream_chat/lib/src/api/requests.g.dart b/packages/stream_chat/lib/src/api/requests.g.dart index ef790776..f020c1ea 100644 --- a/packages/stream_chat/lib/src/api/requests.g.dart +++ b/packages/stream_chat/lib/src/api/requests.g.dart @@ -6,7 +6,7 @@ part of 'requests.dart'; // JsonSerializableGenerator // ************************************************************************** -Map _$SortOptionToJson(SortOption instance) => +Map _$SortOptionToJson(SortOption instance) => { 'field': instance.field, 'direction': instance.direction, diff --git a/packages/stream_chat/lib/src/models/message.dart b/packages/stream_chat/lib/src/models/message.dart index d402836f..a89324a7 100644 --- a/packages/stream_chat/lib/src/models/message.dart +++ b/packages/stream_chat/lib/src/models/message.dart @@ -72,6 +72,7 @@ class Message { this.extraData, this.deletedAt, this.status = MessageSendingStatus.sent, + this.skipPush, }) : id = id ?? Uuid().v4(), pinExpires = pinExpires?.toUtc(); @@ -143,6 +144,9 @@ class Message { /// If true the message is silent final bool silent; + /// If true the message will not send a push notification + final bool skipPush; + /// If true the message is shadowed @JsonKey(includeIfNull: false, toJson: Serialization.readOnly) final bool shadowed; @@ -226,6 +230,7 @@ class Message { 'pinned_at', 'pin_expires', 'pinned_by', + 'skip_push', ]; /// Serialize to json @@ -262,6 +267,7 @@ class Message { User pinnedBy, Map extraData, MessageSendingStatus status, + bool skipPush, }) { assert(() { if (pinExpires is! DateTime && @@ -300,6 +306,7 @@ class Message { pinnedAt: pinnedAt ?? this.pinnedAt, pinnedBy: pinnedBy ?? this.pinnedBy, pinExpires: pinExpires == _pinExpires ? this.pinExpires : pinExpires, + skipPush: skipPush ?? this.skipPush, ); } diff --git a/packages/stream_chat/lib/src/models/message.g.dart b/packages/stream_chat/lib/src/models/message.g.dart index f8ac0c3d..80df1589 100644 --- a/packages/stream_chat/lib/src/models/message.g.dart +++ b/packages/stream_chat/lib/src/models/message.g.dart @@ -93,6 +93,7 @@ Message _$MessageFromJson(Map json) { deletedAt: json['deleted_at'] == null ? null : DateTime.parse(json['deleted_at'] as String), + skipPush: json['skip_push'] as bool, ); } @@ -123,6 +124,7 @@ Map _$MessageToJson(Message instance) { writeNotNull('thread_participants', readonly(instance.threadParticipants)); val['show_in_channel'] = instance.showInChannel; val['silent'] = instance.silent; + val['skip_push'] = instance.skipPush; writeNotNull('shadowed', readonly(instance.shadowed)); writeNotNull('command', readonly(instance.command)); writeNotNull('created_at', readonly(instance.createdAt)); diff --git a/packages/stream_chat/test/src/models/channel_state_test.dart b/packages/stream_chat/test/src/models/channel_state_test.dart index 538f1812..0a14cb76 100644 --- a/packages/stream_chat/test/src/models/channel_state_test.dart +++ b/packages/stream_chat/test/src/models/channel_state_test.dart @@ -897,6 +897,7 @@ void main() { "show_in_channel": null, "mentioned_users": [], "status": "SENT", + "skip_push": null, "silent": false, "pinned": false, "pinned_at": null, @@ -913,6 +914,7 @@ void main() { "show_in_channel": null, "mentioned_users": [], "status": "SENT", + "skip_push": null, "silent": false, "pinned": false, "pinned_at": null, @@ -922,6 +924,7 @@ void main() { { "id": "dry-meadow-0-53e6299f-9b97-4a9c-a27e-7e2dde49b7e0", "text": "test message", + "skip_push": null, "attachments": [], "parent_id": null, "quoted_message": null, @@ -944,6 +947,7 @@ void main() { "quoted_message_id": null, "show_in_channel": null, "mentioned_users": [], + "skip_push": null, "status": "SENT", "silent": false, "pinned": false, @@ -955,6 +959,7 @@ void main() { "id": "dry-meadow-0-64d7970f-ede8-4b31-9738-1bc1756d2bfe", "text": "test", "attachments": [], + "skip_push": null, "parent_id": null, "quoted_message": null, "quoted_message_id": null, @@ -972,6 +977,7 @@ void main() { "text": "hi", "attachments": [], "parent_id": null, + "skip_push": null, "quoted_message": null, "quoted_message_id": null, "show_in_channel": null, @@ -989,6 +995,7 @@ void main() { "attachments": [], "parent_id": null, "quoted_message": null, + "skip_push": null, "quoted_message_id": null, "show_in_channel": null, "mentioned_users": [], @@ -1011,6 +1018,7 @@ void main() { "status": "SENT", "silent": false, "pinned": false, + "skip_push": null, "pinned_at": null, "pin_expires": null, "pinned_by": null @@ -1028,6 +1036,7 @@ void main() { "silent": false, "pinned": false, "pinned_at": null, + "skip_push": null, "pin_expires": null, "pinned_by": null }, @@ -1039,6 +1048,7 @@ void main() { "quoted_message": null, "quoted_message_id": null, "show_in_channel": null, + "skip_push": null, "mentioned_users": [], "status": "SENT", "silent": false, @@ -1056,6 +1066,7 @@ void main() { "quoted_message_id": null, "show_in_channel": null, "mentioned_users": [], + "skip_push": null, "status": "SENT", "silent": false, "pinned": false, @@ -1074,6 +1085,7 @@ void main() { "mentioned_users": [], "status": "SENT", "silent": false, + "skip_push": null, "pinned": false, "pinned_at": null, "pin_expires": null, @@ -1083,6 +1095,7 @@ void main() { "id": "icy-recipe-7-935c396e-ddf8-4a9a-951c-0a12fa5bf055", "text": "what are you doing?", "attachments": [], + "skip_push": null, "parent_id": null, "quoted_message": null, "quoted_message_id": null, @@ -1100,6 +1113,7 @@ void main() { "text": "👍", "attachments": [], "parent_id": null, + "skip_push": null, "quoted_message": null, "quoted_message_id": null, "show_in_channel": null, @@ -1115,6 +1129,7 @@ void main() { "id": "snowy-credit-3-3e0c1a0d-d22f-42ee-b2a1-f9f49477bf21", "text": "sdasas", "attachments": [], + "skip_push": null, "parent_id": null, "quoted_message": null, "quoted_message_id": null, @@ -1135,6 +1150,7 @@ void main() { "quoted_message": null, "quoted_message_id": null, "show_in_channel": null, + "skip_push": null, "mentioned_users": [], "status": "SENT", "silent": false, @@ -1147,6 +1163,7 @@ void main() { "id": "snowy-credit-3-cfaf0b46-1daa-49c5-947c-b16d6697487d", "text": "nhisagdhsadz", "attachments": [], + "skip_push": null, "parent_id": null, "quoted_message": null, "quoted_message_id": null, @@ -1165,6 +1182,7 @@ void main() { "attachments": [], "parent_id": null, "quoted_message": null, + "skip_push": null, "quoted_message_id": null, "show_in_channel": null, "mentioned_users": [], @@ -1181,6 +1199,7 @@ void main() { "attachments": [], "parent_id": null, "quoted_message": null, + "skip_push": null, "quoted_message_id": null, "show_in_channel": null, "mentioned_users": [], @@ -1188,6 +1207,7 @@ void main() { "silent": false, "pinned": false, "pinned_at": null, + "skip_push": null, "pin_expires": null, "pinned_by": null }, @@ -1204,6 +1224,7 @@ void main() { "silent": false, "pinned": false, "pinned_at": null, + "skip_push": null, "pin_expires": null, "pinned_by": null }, @@ -1220,6 +1241,7 @@ void main() { "silent": false, "pinned": false, "pinned_at": null, + "skip_push": null, "pin_expires": null, "pinned_by": null }, @@ -1236,6 +1258,7 @@ void main() { "silent": false, "pinned": false, "pinned_at": null, + "skip_push": null, "pin_expires": null, "pinned_by": null }, @@ -1252,6 +1275,7 @@ void main() { "silent": false, "pinned": false, "pinned_at": null, + "skip_push": null, "pin_expires": null, "pinned_by": null }, @@ -1268,6 +1292,7 @@ void main() { "silent": false, "pinned": false, "pinned_at": null, + "skip_push": null, "pin_expires": null, "pinned_by": null }, @@ -1284,6 +1309,7 @@ void main() { "silent": false, "pinned": false, "pinned_at": null, + "skip_push": null, "pin_expires": null, "pinned_by": null } diff --git a/packages/stream_chat/test/src/models/message_test.dart b/packages/stream_chat/test/src/models/message_test.dart index fe8fc44a..3541b2c0 100644 --- a/packages/stream_chat/test/src/models/message_test.dart +++ b/packages/stream_chat/test/src/models/message_test.dart @@ -134,6 +134,7 @@ void main() { "id": "4637f7e4-a06b-42db-ba5a-8d8270dd926f", "text": "https://giphy.com/gifs/the-lion-king-live-action-5zvN79uTGfLMOVfQaA", "silent": false, + "skip_push": null, "attachments": [ { "type": "video",