From dd47db04dde5ed888a9e8967bc6dc98e5d27cdae Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Wed, 6 Jul 2022 18:13:15 +0530 Subject: [PATCH] feat(llc): add support for AttachmentFileUploaderProvider. (#1246) * feat(llc): add support for `AttachmentFileUploaderProvider`. Signed-off-by: xsahil03x * chore(llc): update CHANGELOG.md Signed-off-by: xsahil03x --- packages/stream_chat/CHANGELOG.md | 9 ++++++++ .../stream_chat/lib/src/client/channel.dart | 1 - .../stream_chat/lib/src/client/client.dart | 23 ++++++++++++++++--- .../core/api/attachment_file_uploader.dart | 5 ++++ .../lib/src/core/api/stream_chat_api.dart | 8 ++++--- packages/stream_chat/lib/stream_chat.dart | 6 ++--- packages/stream_chat/test/src/fakes.dart | 1 - 7 files changed, 42 insertions(+), 11 deletions(-) diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index d336e017..11e630fb 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -4,6 +4,15 @@ - Fix WebSocket contemporary connection calls while disconnecting +βœ… Added + +- Export `StreamAttachmentFileUploader`. + +πŸ”„ Changed + +- Deprecated `StreamChatClient.attachmentFileUploader`, + Use `StreamChatClient.attachmentFileUploaderProvider` instead. + ## 4.3.0 🐞 Fixed diff --git a/packages/stream_chat/lib/src/client/channel.dart b/packages/stream_chat/lib/src/client/channel.dart index b4e1379d..64c20d6b 100644 --- a/packages/stream_chat/lib/src/client/channel.dart +++ b/packages/stream_chat/lib/src/client/channel.dart @@ -3,7 +3,6 @@ import 'dart:math'; import 'package:collection/collection.dart' show IterableExtension, ListEquality; -import 'package:dio/dio.dart'; import 'package:rxdart/rxdart.dart'; import 'package:stream_chat/src/client/retry_queue.dart'; import 'package:stream_chat/src/core/util/utils.dart'; diff --git a/packages/stream_chat/lib/src/client/client.dart b/packages/stream_chat/lib/src/client/client.dart index 0b31db9e..a8c4dd7b 100644 --- a/packages/stream_chat/lib/src/client/client.dart +++ b/packages/stream_chat/lib/src/client/client.dart @@ -70,8 +70,15 @@ class StreamChatClient { Duration receiveTimeout = const Duration(seconds: 6), StreamChatApi? chatApi, WebSocket? ws, - AttachmentFileUploader? attachmentFileUploader, - }) { + @Deprecated('Use [attachmentFileUploaderProvider] instead') + AttachmentFileUploader? attachmentFileUploader, + AttachmentFileUploaderProvider? attachmentFileUploaderProvider, + }) : assert( + attachmentFileUploader == null || + attachmentFileUploaderProvider == null, + 'You can only use one of [attachmentFileUploader] ' + 'or [attachmentFileUploaderProvider]', + ) { logger.info('Initiating new StreamChatClient'); final options = StreamHttpClientOptions( @@ -81,13 +88,23 @@ class StreamChatClient { headers: {'X-Stream-Client': defaultUserAgent}, ); + // TODO: simplify this once we remove the deprecated field. + final AttachmentFileUploaderProvider fileUploaderProvider; + if (attachmentFileUploaderProvider != null) { + fileUploaderProvider = attachmentFileUploaderProvider; + } else if (attachmentFileUploader != null) { + fileUploaderProvider = (httpClient) => attachmentFileUploader; + } else { + fileUploaderProvider = StreamAttachmentFileUploader.new; + } + _chatApi = chatApi ?? StreamChatApi( apiKey, options: options, tokenManager: _tokenManager, connectionIdManager: _connectionIdManager, - attachmentFileUploader: attachmentFileUploader, + attachmentFileUploaderProvider: fileUploaderProvider, logger: detachedLogger('πŸ•ΈοΈ'), ); diff --git a/packages/stream_chat/lib/src/core/api/attachment_file_uploader.dart b/packages/stream_chat/lib/src/core/api/attachment_file_uploader.dart index 096b2c2d..c851d114 100644 --- a/packages/stream_chat/lib/src/core/api/attachment_file_uploader.dart +++ b/packages/stream_chat/lib/src/core/api/attachment_file_uploader.dart @@ -3,6 +3,11 @@ import 'package:stream_chat/src/core/api/responses.dart'; import 'package:stream_chat/src/core/http/stream_http_client.dart'; import 'package:stream_chat/src/core/models/attachment_file.dart'; +/// Signature for a function which provides instance of [AttachmentFileUploader] +typedef AttachmentFileUploaderProvider = AttachmentFileUploader Function( + StreamHttpClient httpClient, +); + /// Class responsible for uploading images and files to a given channel abstract class AttachmentFileUploader { /// Uploads a [image] to the given channel. diff --git a/packages/stream_chat/lib/src/core/api/stream_chat_api.dart b/packages/stream_chat/lib/src/core/api/stream_chat_api.dart index bcf041c1..cf6c0bad 100644 --- a/packages/stream_chat/lib/src/core/api/stream_chat_api.dart +++ b/packages/stream_chat/lib/src/core/api/stream_chat_api.dart @@ -22,9 +22,10 @@ class StreamChatApi { StreamHttpClientOptions? options, TokenManager? tokenManager, ConnectionIdManager? connectionIdManager, - AttachmentFileUploader? attachmentFileUploader, + AttachmentFileUploaderProvider? attachmentFileUploaderProvider, Logger? logger, - }) : _fileUploader = attachmentFileUploader, + }) : _fileUploaderProvider = + attachmentFileUploaderProvider ?? StreamAttachmentFileUploader.new, _client = client ?? StreamHttpClient( apiKey, @@ -35,6 +36,7 @@ class StreamChatApi { ); final StreamHttpClient _client; + final AttachmentFileUploaderProvider _fileUploaderProvider; UserApi? _user; @@ -75,5 +77,5 @@ class StreamChatApi { /// Class responsible for uploading images and files to a given channel AttachmentFileUploader get fileUploader => - _fileUploader ??= StreamAttachmentFileUploader(_client); + _fileUploader ??= _fileUploaderProvider.call(_client); } diff --git a/packages/stream_chat/lib/stream_chat.dart b/packages/stream_chat/lib/stream_chat.dart index 0479a378..27ba68cc 100644 --- a/packages/stream_chat/lib/stream_chat.dart +++ b/packages/stream_chat/lib/stream_chat.dart @@ -1,6 +1,7 @@ library stream_chat; export 'package:async/async.dart'; +export 'package:dio/src/cancel_token.dart'; export 'package:dio/src/dio_error.dart'; export 'package:dio/src/multipart_file.dart'; export 'package:dio/src/options.dart'; @@ -9,8 +10,7 @@ export 'package:logging/logging.dart' show Logger, Level, LogRecord; export 'package:rate_limiter/rate_limiter.dart'; export 'package:uuid/uuid.dart'; -export './src/core/api/attachment_file_uploader.dart' - show AttachmentFileUploader; +export './src/core/api/attachment_file_uploader.dart'; export './src/core/api/requests.dart'; export './src/core/api/requests.dart'; export './src/core/api/responses.dart'; @@ -44,7 +44,7 @@ export 'src/core/api/attachment_file_uploader.dart' show AttachmentFileUploader; export 'src/core/api/requests.dart'; export 'src/core/api/requests.dart'; export 'src/core/api/responses.dart'; -export 'src/core/api/stream_chat_api.dart' show PushProvider; +export 'src/core/api/stream_chat_api.dart'; export 'src/core/error/error.dart'; export 'src/core/models/action.dart'; export 'src/core/models/attachment.dart'; diff --git a/packages/stream_chat/test/src/fakes.dart b/packages/stream_chat/test/src/fakes.dart index 409418cd..ddbf4887 100644 --- a/packages/stream_chat/test/src/fakes.dart +++ b/packages/stream_chat/test/src/fakes.dart @@ -8,7 +8,6 @@ import 'package:stream_chat/src/core/api/general_api.dart'; import 'package:stream_chat/src/core/api/guest_api.dart'; import 'package:stream_chat/src/core/api/message_api.dart'; import 'package:stream_chat/src/core/api/moderation_api.dart'; -import 'package:stream_chat/src/core/api/stream_chat_api.dart'; import 'package:stream_chat/src/core/api/user_api.dart'; import 'package:stream_chat/src/core/http/token.dart'; import 'package:stream_chat/src/core/http/token_manager.dart';