From afc8026547ef91cdd233cd75ade60b30b2957e8f Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Wed, 10 Nov 2021 17:56:35 +0530 Subject: [PATCH 1/6] feat: Added a queryAround implementation --- .../lib/src/core/api/requests.dart | 22 ++++++++++++++++ .../lib/src/core/api/requests.g.dart | 6 +++++ .../lib/src/stream_channel.dart | 26 ++++++++++++++----- 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/packages/stream_chat/lib/src/core/api/requests.dart b/packages/stream_chat/lib/src/core/api/requests.dart index 14995b10..76272241 100644 --- a/packages/stream_chat/lib/src/core/api/requests.dart +++ b/packages/stream_chat/lib/src/core/api/requests.dart @@ -60,8 +60,11 @@ class PaginationParams extends Equatable { /// ``` const PaginationParams({ this.limit = 10, + this.before = 10, + this.after = 10, this.offset, this.next, + this.aroundId, this.greaterThan, this.greaterThanOrEqual, this.lessThan, @@ -78,12 +81,22 @@ class PaginationParams extends Equatable { /// The amount of items requested from the APIs. final int limit; + /// The amount of items requested before message ID from the APIs. + final int before; + + /// The amount of items requested after message ID from the APIs. + final int after; + /// The offset of requesting items. final int? offset; /// A key used to paginate. final String? next; + /// Message ID to fetch messages around + @JsonKey(name: 'around_id') + final String? aroundId; + /// Filter on ids greater than the given value. @JsonKey(name: 'id_gt') final String? greaterThan; @@ -106,7 +119,10 @@ class PaginationParams extends Equatable { /// Creates a copy of [PaginationParams] with specified attributes overridden. PaginationParams copyWith({ int? limit, + int? before, + int? after, int? offset, + String? aroundId, String? next, String? greaterThan, String? greaterThanOrEqual, @@ -115,7 +131,10 @@ class PaginationParams extends Equatable { }) => PaginationParams( limit: limit ?? this.limit, + before: before ?? this.before, + after: limit ?? this.after, offset: offset ?? this.offset, + aroundId: aroundId ?? this.aroundId, next: next ?? this.next, greaterThan: greaterThan ?? this.greaterThan, greaterThanOrEqual: greaterThanOrEqual ?? this.greaterThanOrEqual, @@ -126,8 +145,11 @@ class PaginationParams extends Equatable { @override List get props => [ limit, + before, + after, offset, next, + aroundId, greaterThan, greaterThanOrEqual, lessThan, diff --git a/packages/stream_chat/lib/src/core/api/requests.g.dart b/packages/stream_chat/lib/src/core/api/requests.g.dart index ef995997..5a9e67bd 100644 --- a/packages/stream_chat/lib/src/core/api/requests.g.dart +++ b/packages/stream_chat/lib/src/core/api/requests.g.dart @@ -21,8 +21,11 @@ Map _$SortOptionToJson(SortOption instance) => PaginationParams _$PaginationParamsFromJson(Map json) => PaginationParams( limit: json['limit'] as int? ?? 10, + before: json['before'] as int? ?? 10, + after: json['after'] as int? ?? 10, offset: json['offset'] as int?, next: json['next'] as String?, + aroundId: json['around_id'] as String?, greaterThan: json['id_gt'] as String?, greaterThanOrEqual: json['id_gte'] as String?, lessThan: json['id_lt'] as String?, @@ -32,6 +35,8 @@ PaginationParams _$PaginationParamsFromJson(Map json) => Map _$PaginationParamsToJson(PaginationParams instance) { final val = { 'limit': instance.limit, + 'before': instance.before, + 'after': instance.after, }; void writeNotNull(String key, dynamic value) { @@ -42,6 +47,7 @@ Map _$PaginationParamsToJson(PaginationParams instance) { writeNotNull('offset', instance.offset); writeNotNull('next', instance.next); + writeNotNull('around_id', instance.aroundId); writeNotNull('id_gt', instance.greaterThan); writeNotNull('id_gte', instance.greaterThanOrEqual); writeNotNull('id_lt', instance.lessThan); diff --git a/packages/stream_chat_flutter_core/lib/src/stream_channel.dart b/packages/stream_chat_flutter_core/lib/src/stream_channel.dart index 8117a26e..62dc8a4a 100644 --- a/packages/stream_chat_flutter_core/lib/src/stream_channel.dart +++ b/packages/stream_chat_flutter_core/lib/src/stream_channel.dart @@ -249,19 +249,31 @@ class StreamChannelState extends State { } return Future.wait([ - queryBeforeMessage( + queryAroundMessage( messageId, - limit: before, - preferOffline: preferOffline, - ), - queryAfterMessage( - messageId, - limit: after, + before: before, + after: after, preferOffline: preferOffline, ), ]); } + /// + Future queryAroundMessage( + String messageId, { + int before = 20, + int after = 20, + bool preferOffline = false, + }) => + channel.query( + messagesPagination: PaginationParams( + aroundId: messageId, + before: before, + after: after, + ), + preferOffline: preferOffline, + ); + /// Future queryBeforeMessage( String messageId, { From 013316af73d642a27df7f00876fc3e8b3adabab1 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Wed, 10 Nov 2021 18:07:42 +0530 Subject: [PATCH 2/6] feat: Added a queryAround implementation --- .../stream_chat_flutter_core/lib/src/stream_channel.dart | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/stream_chat_flutter_core/lib/src/stream_channel.dart b/packages/stream_chat_flutter_core/lib/src/stream_channel.dart index 62dc8a4a..26d67642 100644 --- a/packages/stream_chat_flutter_core/lib/src/stream_channel.dart +++ b/packages/stream_chat_flutter_core/lib/src/stream_channel.dart @@ -264,8 +264,10 @@ class StreamChannelState extends State { int before = 20, int after = 20, bool preferOffline = false, - }) => - channel.query( + }) { + // TODO: REMOVE (TEMP FOR TEST HERE) + print('CALLED AROUND'); + return channel.query( messagesPagination: PaginationParams( aroundId: messageId, before: before, @@ -273,6 +275,7 @@ class StreamChannelState extends State { ), preferOffline: preferOffline, ); + } /// Future queryBeforeMessage( From 085d8cf344b3655235012e91275240d1b3ad33f7 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Wed, 10 Nov 2021 18:12:27 +0530 Subject: [PATCH 3/6] feat: Added a queryAround implementation --- .../stream_chat_flutter_core/lib/src/stream_channel.dart | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/stream_chat_flutter_core/lib/src/stream_channel.dart b/packages/stream_chat_flutter_core/lib/src/stream_channel.dart index 26d67642..fc4160e8 100644 --- a/packages/stream_chat_flutter_core/lib/src/stream_channel.dart +++ b/packages/stream_chat_flutter_core/lib/src/stream_channel.dart @@ -219,13 +219,16 @@ class StreamChannelState extends State { int before = 20, int after = 20, bool preferOffline = false, - }) => - _queryAtMessage( + }) { + // TODO: REMOVE (TEMP FOR TEST HERE) + print('CALLED AROUND'); + return _queryAtMessage( messageId: messageId, before: before, after: after, preferOffline: preferOffline, ); + } Future> _queryAtMessage({ String? messageId, From bfacbaa1adf75506048cc00a8f5d7f4705e12a59 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Wed, 10 Nov 2021 18:16:16 +0530 Subject: [PATCH 4/6] feat: Added a queryAround implementation --- .../lib/src/stream_channel.dart | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/packages/stream_chat_flutter_core/lib/src/stream_channel.dart b/packages/stream_chat_flutter_core/lib/src/stream_channel.dart index fc4160e8..62dc8a4a 100644 --- a/packages/stream_chat_flutter_core/lib/src/stream_channel.dart +++ b/packages/stream_chat_flutter_core/lib/src/stream_channel.dart @@ -219,16 +219,13 @@ class StreamChannelState extends State { int before = 20, int after = 20, bool preferOffline = false, - }) { - // TODO: REMOVE (TEMP FOR TEST HERE) - print('CALLED AROUND'); - return _queryAtMessage( + }) => + _queryAtMessage( messageId: messageId, before: before, after: after, preferOffline: preferOffline, ); - } Future> _queryAtMessage({ String? messageId, @@ -267,10 +264,8 @@ class StreamChannelState extends State { int before = 20, int after = 20, bool preferOffline = false, - }) { - // TODO: REMOVE (TEMP FOR TEST HERE) - print('CALLED AROUND'); - return channel.query( + }) => + channel.query( messagesPagination: PaginationParams( aroundId: messageId, before: before, @@ -278,7 +273,6 @@ class StreamChannelState extends State { ), preferOffline: preferOffline, ); - } /// Future queryBeforeMessage( From 9f9f0f510d62b2fbb77ce9ebf6c0083947bc5bfa Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Wed, 10 Nov 2021 18:34:15 +0530 Subject: [PATCH 5/6] added changelog --- packages/stream_chat/CHANGELOG.md | 6 ++++++ packages/stream_chat_flutter/CHANGELOG.md | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index 4b409536..5b8641b9 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -1,3 +1,9 @@ +## Upcoming + +✅ Added + +- Extra properties added to `PaginationParams` to aid in fetching messages. + ## 3.2.0 🐞 Fixed diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index 00f8412b..2dc2de1c 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -1,3 +1,9 @@ +## Upcoming + +✅ Added + +- `StreamChannel` can now fetch messages around a message ID with the `queryAroundMessage` call. + ## 3.2.0 - Updated Dart SDK constraints to `>=2.14.0 <3.0.0` From be8b319691c641757c951793c8c68da0845bd055 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Wed, 10 Nov 2021 20:01:02 +0530 Subject: [PATCH 6/6] fixes name --- .../lib/src/core/api/requests.dart | 12 +++++----- .../lib/src/core/api/requests.g.dart | 4 ++-- .../lib/src/stream_channel.dart | 22 +++++++++---------- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/packages/stream_chat/lib/src/core/api/requests.dart b/packages/stream_chat/lib/src/core/api/requests.dart index 76272241..6f00b374 100644 --- a/packages/stream_chat/lib/src/core/api/requests.dart +++ b/packages/stream_chat/lib/src/core/api/requests.dart @@ -64,7 +64,7 @@ class PaginationParams extends Equatable { this.after = 10, this.offset, this.next, - this.aroundId, + this.idAround, this.greaterThan, this.greaterThanOrEqual, this.lessThan, @@ -94,8 +94,8 @@ class PaginationParams extends Equatable { final String? next; /// Message ID to fetch messages around - @JsonKey(name: 'around_id') - final String? aroundId; + @JsonKey(name: 'id_around') + final String? idAround; /// Filter on ids greater than the given value. @JsonKey(name: 'id_gt') @@ -122,7 +122,7 @@ class PaginationParams extends Equatable { int? before, int? after, int? offset, - String? aroundId, + String? idAround, String? next, String? greaterThan, String? greaterThanOrEqual, @@ -134,7 +134,7 @@ class PaginationParams extends Equatable { before: before ?? this.before, after: limit ?? this.after, offset: offset ?? this.offset, - aroundId: aroundId ?? this.aroundId, + idAround: idAround ?? this.idAround, next: next ?? this.next, greaterThan: greaterThan ?? this.greaterThan, greaterThanOrEqual: greaterThanOrEqual ?? this.greaterThanOrEqual, @@ -149,7 +149,7 @@ class PaginationParams extends Equatable { after, offset, next, - aroundId, + idAround, greaterThan, greaterThanOrEqual, lessThan, diff --git a/packages/stream_chat/lib/src/core/api/requests.g.dart b/packages/stream_chat/lib/src/core/api/requests.g.dart index 5a9e67bd..7d45ee86 100644 --- a/packages/stream_chat/lib/src/core/api/requests.g.dart +++ b/packages/stream_chat/lib/src/core/api/requests.g.dart @@ -25,7 +25,7 @@ PaginationParams _$PaginationParamsFromJson(Map json) => after: json['after'] as int? ?? 10, offset: json['offset'] as int?, next: json['next'] as String?, - aroundId: json['around_id'] as String?, + idAround: json['id_around'] as String?, greaterThan: json['id_gt'] as String?, greaterThanOrEqual: json['id_gte'] as String?, lessThan: json['id_lt'] as String?, @@ -47,7 +47,7 @@ Map _$PaginationParamsToJson(PaginationParams instance) { writeNotNull('offset', instance.offset); writeNotNull('next', instance.next); - writeNotNull('around_id', instance.aroundId); + writeNotNull('id_around', instance.idAround); writeNotNull('id_gt', instance.greaterThan); writeNotNull('id_gte', instance.greaterThanOrEqual); writeNotNull('id_lt', instance.lessThan); diff --git a/packages/stream_chat_flutter_core/lib/src/stream_channel.dart b/packages/stream_chat_flutter_core/lib/src/stream_channel.dart index 62dc8a4a..633c3137 100644 --- a/packages/stream_chat_flutter_core/lib/src/stream_channel.dart +++ b/packages/stream_chat_flutter_core/lib/src/stream_channel.dart @@ -227,13 +227,13 @@ class StreamChannelState extends State { preferOffline: preferOffline, ); - Future> _queryAtMessage({ + Future _queryAtMessage({ String? messageId, int before = 20, int after = 20, bool preferOffline = false, }) async { - if (channel.state == null) return []; + if (channel.state == null) return null; channel.state!.isUpToDate = false; channel.state!.truncate(); @@ -245,17 +245,15 @@ class StreamChannelState extends State { preferOffline: preferOffline, ); channel.state!.isUpToDate = true; - return []; + return null; } - return Future.wait([ - queryAroundMessage( - messageId, - before: before, - after: after, - preferOffline: preferOffline, - ), - ]); + return queryAroundMessage( + messageId, + before: before, + after: after, + preferOffline: preferOffline, + ); } /// @@ -267,7 +265,7 @@ class StreamChannelState extends State { }) => channel.query( messagesPagination: PaginationParams( - aroundId: messageId, + idAround: messageId, before: before, after: after, ),