From 75fbe69ca399d4af9c359acc322a9a1fa661b64c Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 10:09:42 +0100 Subject: [PATCH 1/9] fix search filter using channel.cid --- .../lib/src/channel_media_display_screen.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart b/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart index ab2e2055..968a8641 100644 --- a/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart +++ b/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart @@ -44,7 +44,7 @@ class _ChannelMediaDisplayScreenState extends State { messageSearchBloc.search( filter: { 'cid': { - r'$in': ['messaging:${StreamChannel.of(context).channel.id}'] + r'$in': [StreamChannel.of(context).channel.cid], } }, messageFilter: { From 208bdd92385b97866100e9657bf45d17215d1e69 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 10:11:07 +0100 Subject: [PATCH 2/9] fix search filter using channel.cid --- .../lib/src/channel_file_display_screen.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart b/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart index a010a500..1bc32bb6 100644 --- a/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart +++ b/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart @@ -38,7 +38,7 @@ class _ChannelFileDisplayScreenState extends State { messageSearchBloc.search( filter: { 'cid': { - r'$in': ['messaging:${StreamChannel.of(context).channel.id}'] + r'$in': [StreamChannel.of(context).channel.cid] } }, messageFilter: { From 3c595d98f73c50dffbb47a3944685684b098d877 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 10:11:58 +0100 Subject: [PATCH 3/9] fix search filter using channel.cid --- .../lib/src/channel_file_display_screen.dart | 2 +- .../lib/src/channel_media_display_screen.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart b/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart index 1bc32bb6..a6be5555 100644 --- a/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart +++ b/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart @@ -146,7 +146,7 @@ class _ChannelFileDisplayScreenState extends State { onEndOfPage: () => messageSearchBloc.loadMore( filter: { 'cid': { - r'$in': ['messaging:${StreamChannel.of(context).channel.id}'] + r'$in': [StreamChannel.of(context).channel.cid] } }, messageFilter: { diff --git a/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart b/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart index 968a8641..87ab2f3b 100644 --- a/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart +++ b/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart @@ -169,7 +169,7 @@ class _ChannelMediaDisplayScreenState extends State { onEndOfPage: () => messageSearchBloc.loadMore( filter: { 'cid': { - r'$in': ['messaging:${StreamChannel.of(context).channel.id}'] + r'$in': [StreamChannel.of(context).channel.cid] } }, messageFilter: { From 578c4efade12d83a2bb63fd5365ce535b06dcceb Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 10:12:41 +0100 Subject: [PATCH 4/9] fix ChannelState.addMessage --- packages/stream_chat/lib/src/api/channel.dart | 2 +- packages/stream_chat/lib/src/api/retry_queue.dart | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/stream_chat/lib/src/api/channel.dart b/packages/stream_chat/lib/src/api/channel.dart index 1f5da466..38f990b0 100644 --- a/packages/stream_chat/lib/src/api/channel.dart +++ b/packages/stream_chat/lib/src/api/channel.dart @@ -1441,7 +1441,7 @@ class ChannelClientState { final oldIndex = newMessages.indexWhere((m) => m.id == message.id); if (oldIndex != -1) { - newMessages[oldIndex] = newMessages[oldIndex].merge(message); + newMessages[oldIndex] = message; } else { newMessages.add(message); } diff --git a/packages/stream_chat/lib/src/api/retry_queue.dart b/packages/stream_chat/lib/src/api/retry_queue.dart index de3ca610..34046545 100644 --- a/packages/stream_chat/lib/src/api/retry_queue.dart +++ b/packages/stream_chat/lib/src/api/retry_queue.dart @@ -47,6 +47,7 @@ class RetryQueue { /// Add a list of messages void add(List messages) { + logger?.info('added ${messages.length} messages'); final messageList = _messageQueue.toList(); _messageQueue.addAll(messages .where((element) => !messageList.any((m) => m.id == element.id))); From ecb559f687f38f99e60226370b823be9103baa33 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 11:52:32 +0100 Subject: [PATCH 5/9] reduce calls to offlinestorage while uploading attachments using debounce --- packages/stream_chat/lib/src/api/channel.dart | 7 +++++- packages/stream_chat/lib/src/debounce.dart | 23 +++++++++++++++++++ packages/stream_chat_flutter/pubspec.yaml | 4 ++++ .../stream_chat_flutter_core/pubspec.yaml | 4 ++++ 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 packages/stream_chat/lib/src/debounce.dart diff --git a/packages/stream_chat/lib/src/api/channel.dart b/packages/stream_chat/lib/src/api/channel.dart index 38f990b0..c45ec409 100644 --- a/packages/stream_chat/lib/src/api/channel.dart +++ b/packages/stream_chat/lib/src/api/channel.dart @@ -7,6 +7,7 @@ import 'package:dio/dio.dart'; import 'package:logging/logging.dart'; import 'package:rxdart/rxdart.dart'; import 'package:stream_chat/src/api/retry_queue.dart'; +import 'package:stream_chat/src/debounce.dart'; import 'package:stream_chat/src/event_type.dart'; import 'package:stream_chat/src/models/attachment_file.dart'; import 'package:stream_chat/src/models/channel_state.dart'; @@ -1685,7 +1686,11 @@ class ChannelClientState { set _channelState(ChannelState v) { _channelStateController.add(v); - _channel._client.chatPersistenceClient?.updateChannelState(v); + debounce( + timeout: Duration(milliseconds: 500), + target: _channel._client.chatPersistenceClient?.updateChannelState, + arguments: [v], + ); } /// The channel threads related to this channel diff --git a/packages/stream_chat/lib/src/debounce.dart b/packages/stream_chat/lib/src/debounce.dart new file mode 100644 index 00000000..c0375cf5 --- /dev/null +++ b/packages/stream_chat/lib/src/debounce.dart @@ -0,0 +1,23 @@ +import 'dart:async'; + +import 'package:meta/meta.dart'; + +/// Map of timeouts being debounced +Map timeouts = {}; + +/// Runs a function avoiding calling it too many times in a [timeoutMS] window +void debounce({ + @required Duration timeout, + @required Function target, + @required List arguments, +}) { + if (timeouts.containsKey(target)) { + timeouts[target].cancel(); + } + + final timer = Timer(timeout, () { + Function.apply(target, arguments); + }); + + timeouts[target] = timer; +} diff --git a/packages/stream_chat_flutter/pubspec.yaml b/packages/stream_chat_flutter/pubspec.yaml index 36b561da..8ad0cd12 100644 --- a/packages/stream_chat_flutter/pubspec.yaml +++ b/packages/stream_chat_flutter/pubspec.yaml @@ -48,6 +48,10 @@ dependencies: path_provider: ^1.6.27 video_thumbnail: ^0.2.5+1 +dependencies_override: + stream_chat_flutter_core: + path: ../stream_chat_flutter_core + flutter: assets: - images/ diff --git a/packages/stream_chat_flutter_core/pubspec.yaml b/packages/stream_chat_flutter_core/pubspec.yaml index 2896ece3..f9c9a650 100644 --- a/packages/stream_chat_flutter_core/pubspec.yaml +++ b/packages/stream_chat_flutter_core/pubspec.yaml @@ -15,6 +15,10 @@ dependencies: sdk: flutter rxdart: ^0.25.0 +dependencies_override: + stream_chat: + path: ../stream_chat + dev_dependencies: mockito: ^4.1.4 flutter_test: From b36c31c9920a71242bc698fc24a9384c7ce83324 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 11:55:37 +0100 Subject: [PATCH 6/9] debounce updateAttachment --- packages/stream_chat/lib/src/api/channel.dart | 12 +++++++++--- packages/stream_chat/lib/src/debounce.dart | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/stream_chat/lib/src/api/channel.dart b/packages/stream_chat/lib/src/api/channel.dart index c45ec409..90cc2f4f 100644 --- a/packages/stream_chat/lib/src/api/channel.dart +++ b/packages/stream_chat/lib/src/api/channel.dart @@ -238,9 +238,15 @@ class Channel { } void onSendProgress(int sent, int total) { - updateAttachment(it.copyWith( - uploadState: UploadState.inProgress(uploaded: sent, total: total), - )); + debounce( + timeout: Duration(seconds: 1), + target: updateAttachment, + arguments: [ + it.copyWith( + uploadState: UploadState.inProgress(uploaded: sent, total: total), + ), + ], + ); } final isImage = it.type == 'image'; diff --git a/packages/stream_chat/lib/src/debounce.dart b/packages/stream_chat/lib/src/debounce.dart index c0375cf5..6bf90658 100644 --- a/packages/stream_chat/lib/src/debounce.dart +++ b/packages/stream_chat/lib/src/debounce.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:meta/meta.dart'; /// Map of timeouts being debounced -Map timeouts = {}; +Map timeouts = {}; /// Runs a function avoiding calling it too many times in a [timeoutMS] window void debounce({ From 074629a7f00b8532a3139c83847a2e9085613bbf Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 11:59:20 +0100 Subject: [PATCH 7/9] add support for named args --- packages/stream_chat/lib/src/api/channel.dart | 4 ++-- packages/stream_chat/lib/src/debounce.dart | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/stream_chat/lib/src/api/channel.dart b/packages/stream_chat/lib/src/api/channel.dart index 90cc2f4f..97ce9a96 100644 --- a/packages/stream_chat/lib/src/api/channel.dart +++ b/packages/stream_chat/lib/src/api/channel.dart @@ -241,7 +241,7 @@ class Channel { debounce( timeout: Duration(seconds: 1), target: updateAttachment, - arguments: [ + positionalArguments: [ it.copyWith( uploadState: UploadState.inProgress(uploaded: sent, total: total), ), @@ -1695,7 +1695,7 @@ class ChannelClientState { debounce( timeout: Duration(milliseconds: 500), target: _channel._client.chatPersistenceClient?.updateChannelState, - arguments: [v], + positionalArguments: [v], ); } diff --git a/packages/stream_chat/lib/src/debounce.dart b/packages/stream_chat/lib/src/debounce.dart index 6bf90658..f1cf05a4 100644 --- a/packages/stream_chat/lib/src/debounce.dart +++ b/packages/stream_chat/lib/src/debounce.dart @@ -9,14 +9,19 @@ Map timeouts = {}; void debounce({ @required Duration timeout, @required Function target, - @required List arguments, + List positionalArguments, + Map namedArguments, }) { if (timeouts.containsKey(target)) { timeouts[target].cancel(); } final timer = Timer(timeout, () { - Function.apply(target, arguments); + Function.apply( + target, + positionalArguments, + namedArguments, + ); }); timeouts[target] = timer; From 8d307e118523993450a147cd23ddbb7cb60bab0b Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 12:01:49 +0100 Subject: [PATCH 8/9] bump version --- packages/stream_chat/lib/version.dart | 2 +- packages/stream_chat/pubspec.yaml | 2 +- packages/stream_chat_flutter/pubspec.yaml | 6 +----- packages/stream_chat_flutter_core/pubspec.yaml | 8 ++------ 4 files changed, 5 insertions(+), 13 deletions(-) diff --git a/packages/stream_chat/lib/version.dart b/packages/stream_chat/lib/version.dart index 7eef0794..8af293af 100644 --- a/packages/stream_chat/lib/version.dart +++ b/packages/stream_chat/lib/version.dart @@ -2,4 +2,4 @@ import 'package:stream_chat/src/client.dart'; /// Current package version /// Used in [StreamChatClient] to build the `x-stream-client` header -const PACKAGE_VERSION = '1.3.0-beta'; +const PACKAGE_VERSION = '1.3.1-beta'; diff --git a/packages/stream_chat/pubspec.yaml b/packages/stream_chat/pubspec.yaml index 63ea95a9..63d41615 100644 --- a/packages/stream_chat/pubspec.yaml +++ b/packages/stream_chat/pubspec.yaml @@ -1,7 +1,7 @@ name: stream_chat homepage: https://getstream.io/ description: The official Dart client for Stream Chat, a service for building chat applications. -version: 1.3.0-beta +version: 1.3.1-beta repository: https://github.com/GetStream/stream-chat-flutter issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues diff --git a/packages/stream_chat_flutter/pubspec.yaml b/packages/stream_chat_flutter/pubspec.yaml index 8ad0cd12..b0192aa1 100644 --- a/packages/stream_chat_flutter/pubspec.yaml +++ b/packages/stream_chat_flutter/pubspec.yaml @@ -1,7 +1,7 @@ name: stream_chat_flutter homepage: https://github.com/GetStream/stream-chat-flutter description: Stream Chat official Flutter SDK. Build your own chat experience using Dart and Flutter. -version: 1.3.0-beta +version: 1.3.1-beta repository: https://github.com/GetStream/stream-chat-flutter issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues @@ -48,10 +48,6 @@ dependencies: path_provider: ^1.6.27 video_thumbnail: ^0.2.5+1 -dependencies_override: - stream_chat_flutter_core: - path: ../stream_chat_flutter_core - flutter: assets: - images/ diff --git a/packages/stream_chat_flutter_core/pubspec.yaml b/packages/stream_chat_flutter_core/pubspec.yaml index f9c9a650..bbb58a13 100644 --- a/packages/stream_chat_flutter_core/pubspec.yaml +++ b/packages/stream_chat_flutter_core/pubspec.yaml @@ -1,7 +1,7 @@ name: stream_chat_flutter_core homepage: https://github.com/GetStream/stream-chat-flutter description: Stream Chat official Flutter SDK Core. Build your own chat experience using Dart and Flutter. -version: 1.3.0-beta +version: 1.3.1-beta repository: https://github.com/GetStream/stream-chat-flutter issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues @@ -10,15 +10,11 @@ environment: flutter: ">=1.17.0" dependencies: - stream_chat: ^1.3.0-beta + stream_chat: ^1.3.1-beta flutter: sdk: flutter rxdart: ^0.25.0 -dependencies_override: - stream_chat: - path: ../stream_chat - dev_dependencies: mockito: ^4.1.4 flutter_test: From b25c30d8f13ed0a4c4ace97b2f1b320137ebc14a Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 12:04:07 +0100 Subject: [PATCH 9/9] update changelogs --- packages/stream_chat/CHANGELOG.md | 4 ++++ packages/stream_chat_flutter/CHANGELOG.md | 9 +++++++-- packages/stream_chat_flutter_core/CHANGELOG.md | 4 ++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index b0d0c658..30ae46f7 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.3.1-beta + +- Debounced frequent db calls + ## 1.3.0-beta - Save pinned messages in offline storage diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index 57cc011d..967536dd 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.3.1-beta + +- Updated `stream_chat_core` dependency +- Fixed minor bugs + ## 1.3.0-beta - Added `MessageInputTheme` @@ -5,12 +10,12 @@ - Delete only image on imagegallery - Close keyboard after sending a command - Exposed `customAttachmentBuilders` through `MessageListView` -- Update `stream_chat_core` dependency +- Updated `stream_chat_core` dependency ## 1.2.0-beta - Minor fixes -- Update `stream_chat_core` dependency +- Updated `stream_chat_core` dependency ## 1.1.1-beta diff --git a/packages/stream_chat_flutter_core/CHANGELOG.md b/packages/stream_chat_flutter_core/CHANGELOG.md index d9abfe21..bbf8b9f5 100644 --- a/packages/stream_chat_flutter_core/CHANGELOG.md +++ b/packages/stream_chat_flutter_core/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.3.1-beta + +* Update llc dependency + ## 1.3.0-beta * Update llc dependency