diff --git a/lib/features/email/data/datasource/email_datasource.dart b/lib/features/email/data/datasource/email_datasource.dart index 4667207cc..05c236aff 100644 --- a/lib/features/email/data/datasource/email_datasource.dart +++ b/lib/features/email/data/datasource/email_datasource.dart @@ -58,7 +58,8 @@ abstract class EmailDataSource { AccountId accountId, String baseDownloadUrl, AccountRequest accountRequest, - StreamController> onReceiveController + StreamController> onReceiveController, + {CancelToken? cancelToken} ); Future> moveToMailbox(Session session, AccountId accountId, MoveToMailboxRequest moveRequest); diff --git a/lib/features/email/data/datasource_impl/email_datasource_impl.dart b/lib/features/email/data/datasource_impl/email_datasource_impl.dart index 57c3e6be3..3983a16df 100644 --- a/lib/features/email/data/datasource_impl/email_datasource_impl.dart +++ b/lib/features/email/data/datasource_impl/email_datasource_impl.dart @@ -134,7 +134,8 @@ class EmailDataSourceImpl extends EmailDataSource { AccountId accountId, String baseDownloadUrl, AccountRequest accountRequest, - StreamController> onReceiveController + StreamController> onReceiveController, + {CancelToken? cancelToken} ) { return Future.sync(() async { return await emailAPI.downloadAttachmentForWeb( @@ -143,7 +144,8 @@ class EmailDataSourceImpl extends EmailDataSource { accountId, baseDownloadUrl, accountRequest, - onReceiveController); + onReceiveController, + cancelToken: cancelToken); }).catchError(_exceptionThrower.throwException); } diff --git a/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart b/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart index cad48ac12..ae2c3d25f 100644 --- a/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart +++ b/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart @@ -81,7 +81,15 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource { } @override - Future downloadAttachmentForWeb(DownloadTaskId taskId, Attachment attachment, AccountId accountId, String baseDownloadUrl, AccountRequest accountRequest, StreamController> onReceiveController) { + Future downloadAttachmentForWeb( + DownloadTaskId taskId, + Attachment attachment, + AccountId accountId, + String baseDownloadUrl, + AccountRequest accountRequest, + StreamController> onReceiveController, + {CancelToken? cancelToken} + ) { throw UnimplementedError(); } diff --git a/lib/features/email/data/network/email_api.dart b/lib/features/email/data/network/email_api.dart index c2409188d..94c71e57e 100644 --- a/lib/features/email/data/network/email_api.dart +++ b/lib/features/email/data/network/email_api.dart @@ -336,6 +336,7 @@ class EmailAPI with HandleSetErrorMixin { String baseDownloadUrl, AccountRequest accountRequest, StreamController> onReceiveController, + {CancelToken? cancelToken} ) async { final authentication = accountRequest.authenticationType == AuthenticationType.oidc ? accountRequest.bearerToken @@ -352,6 +353,7 @@ class EmailAPI with HandleSetErrorMixin { options: Options( headers: headerParam, responseType: ResponseType.bytes), + cancelToken: cancelToken, onReceiveProgress: (downloaded, total) { log('EmailAPI::downloadFileForWeb(): downloaded = $downloaded | total: $total'); double progress = 0; diff --git a/lib/features/email/data/repository/email_repository_impl.dart b/lib/features/email/data/repository/email_repository_impl.dart index fda620f2d..91f9f1e75 100644 --- a/lib/features/email/data/repository/email_repository_impl.dart +++ b/lib/features/email/data/repository/email_repository_impl.dart @@ -153,7 +153,8 @@ class EmailRepositoryImpl extends EmailRepository { AccountId accountId, String baseDownloadUrl, AccountRequest accountRequest, - StreamController> onReceiveController + StreamController> onReceiveController, + {CancelToken? cancelToken} ) { return emailDataSource[DataSourceType.network]!.downloadAttachmentForWeb( taskId, @@ -161,7 +162,8 @@ class EmailRepositoryImpl extends EmailRepository { accountId, baseDownloadUrl, accountRequest, - onReceiveController); + onReceiveController, + cancelToken: cancelToken); } @override diff --git a/lib/features/email/domain/repository/email_repository.dart b/lib/features/email/domain/repository/email_repository.dart index 1e4bbf5b3..acedd1006 100644 --- a/lib/features/email/domain/repository/email_repository.dart +++ b/lib/features/email/domain/repository/email_repository.dart @@ -60,7 +60,8 @@ abstract class EmailRepository { AccountId accountId, String baseDownloadUrl, AccountRequest accountRequest, - StreamController> onReceiveController + StreamController> onReceiveController, + {CancelToken? cancelToken} ); Future> moveToMailbox(Session session, AccountId accountId, MoveToMailboxRequest moveRequest); diff --git a/lib/features/email/domain/usecases/download_attachment_for_web_interactor.dart b/lib/features/email/domain/usecases/download_attachment_for_web_interactor.dart index 3715d7647..106d95dc0 100644 --- a/lib/features/email/domain/usecases/download_attachment_for_web_interactor.dart +++ b/lib/features/email/domain/usecases/download_attachment_for_web_interactor.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:dartz/dartz.dart'; +import 'package:dio/dio.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:model/account/account_request.dart'; @@ -33,7 +34,8 @@ class DownloadAttachmentForWebInteractor { Attachment attachment, AccountId accountId, String baseDownloadUrl, - StreamController> onReceiveController + StreamController> onReceiveController, + {CancelToken? cancelToken} ) async* { try { yield Right(StartDownloadAttachmentForWeb(taskId, attachment)); @@ -59,7 +61,8 @@ class DownloadAttachmentForWebInteractor { accountId, baseDownloadUrl, accountRequest, - onReceiveController + onReceiveController, + cancelToken: cancelToken ); yield Right(