diff --git a/lib/features/composer/data/datasource/composer_datasource.dart b/lib/features/composer/data/datasource/composer_datasource.dart deleted file mode 100644 index 2b82ecb51..000000000 --- a/lib/features/composer/data/datasource/composer_datasource.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:model/model.dart'; - -abstract class ComposerDataSource { - Future uploadAttachment(UploadRequest uploadRequest); -} \ No newline at end of file diff --git a/lib/features/composer/data/datasource_impl/composer_datasource_impl.dart b/lib/features/composer/data/datasource_impl/composer_datasource_impl.dart deleted file mode 100644 index f2410d3e0..000000000 --- a/lib/features/composer/data/datasource_impl/composer_datasource_impl.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:model/model.dart'; -import 'package:tmail_ui_user/features/composer/data/datasource/composer_datasource.dart'; -import 'package:tmail_ui_user/features/composer/data/network/composer_api.dart'; - -class ComposerDataSourceImpl extends ComposerDataSource { - - final ComposerAPI _composerAPI; - - ComposerDataSourceImpl(this._composerAPI); - - @override - Future uploadAttachment(UploadRequest uploadRequest) { - return Future.sync(() async { - final uploadResponse = await _composerAPI.uploadAttachment(uploadRequest); - return uploadResponse.toAttachmentFile(uploadRequest.fileInfo.fileName); - }).catchError((error) { - throw error; - }); - } -} \ No newline at end of file diff --git a/lib/features/composer/data/network/composer_api.dart b/lib/features/composer/data/network/composer_api.dart deleted file mode 100644 index 79a295838..000000000 --- a/lib/features/composer/data/network/composer_api.dart +++ /dev/null @@ -1,29 +0,0 @@ - -import 'dart:convert'; -import 'dart:io'; - -import 'package:core/core.dart'; -import 'package:dio/dio.dart'; -import 'package:model/model.dart'; - -class ComposerAPI { - - final DioClient _dioClient; - - ComposerAPI(this._dioClient); - - Future uploadAttachment(UploadRequest uploadRequest) async { - final headerParam = _dioClient.getHeaders(); - headerParam[HttpHeaders.contentTypeHeader] = uploadRequest.fileInfo.mimeType; - headerParam[HttpHeaders.contentLengthHeader] = uploadRequest.fileInfo.fileSize; - - final resultJson = await _dioClient.post( - Uri.decodeFull(uploadRequest.uploadUrl.toString()), - options: Options(headers: headerParam), - data: uploadRequest.fileInfo.readStream); - - final decodeJson = resultJson is Map ? resultJson : jsonDecode(resultJson); - - return UploadResponse.fromJson(decodeJson); - } -} \ No newline at end of file diff --git a/lib/features/composer/data/repository/composer_repository_impl.dart b/lib/features/composer/data/repository/composer_repository_impl.dart index 187a43694..6578f4ebc 100644 --- a/lib/features/composer/data/repository/composer_repository_impl.dart +++ b/lib/features/composer/data/repository/composer_repository_impl.dart @@ -1,17 +1,18 @@ -import 'package:model/email/attachment.dart'; -import 'package:model/upload/upload_request.dart'; -import 'package:tmail_ui_user/features/composer/data/datasource/composer_datasource.dart'; +import 'package:dio/dio.dart'; +import 'package:model/upload/file_info.dart'; import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart'; +import 'package:tmail_ui_user/features/upload/data/datasource/attachment_upload_datasource.dart'; +import 'package:tmail_ui_user/features/upload/domain/model/upload_attachment.dart'; class ComposerRepositoryImpl extends ComposerRepository { - final ComposerDataSource composerDataSource; + final AttachmentUploadDataSource _attachmentUploadDataSource; - ComposerRepositoryImpl(this.composerDataSource); + ComposerRepositoryImpl(this._attachmentUploadDataSource); @override - Future uploadAttachment(UploadRequest uploadRequest) { - return composerDataSource.uploadAttachment(uploadRequest); + UploadAttachment uploadAttachment(FileInfo fileInfo, Uri uploadUri, {CancelToken? cancelToken}) { + return _attachmentUploadDataSource.uploadAttachment(fileInfo, uploadUri, cancelToken: cancelToken); } } \ No newline at end of file diff --git a/lib/features/composer/domain/repository/composer_repository.dart b/lib/features/composer/domain/repository/composer_repository.dart index 21346337f..ee0b3be5f 100644 --- a/lib/features/composer/domain/repository/composer_repository.dart +++ b/lib/features/composer/domain/repository/composer_repository.dart @@ -1,5 +1,7 @@ +import 'package:dio/dio.dart'; import 'package:model/model.dart'; +import 'package:tmail_ui_user/features/upload/domain/model/upload_attachment.dart'; abstract class ComposerRepository { - Future uploadAttachment(UploadRequest uploadRequest); + UploadAttachment uploadAttachment(FileInfo fileInfo, Uri uploadUri, {CancelToken? cancelToken}); } \ No newline at end of file diff --git a/lib/features/composer/domain/usecases/upload_attachment_interactor.dart b/lib/features/composer/domain/usecases/upload_attachment_interactor.dart index 5f521d7ad..ccb925399 100644 --- a/lib/features/composer/domain/usecases/upload_attachment_interactor.dart +++ b/lib/features/composer/domain/usecases/upload_attachment_interactor.dart @@ -1,22 +1,14 @@ -import 'package:core/core.dart'; -import 'package:dartz/dartz.dart'; -import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:dio/dio.dart'; import 'package:model/model.dart'; import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart'; -import 'package:tmail_ui_user/features/composer/domain/state/upload_attachment_state.dart'; +import 'package:tmail_ui_user/features/upload/domain/model/upload_attachment.dart'; class UploadAttachmentInteractor { final ComposerRepository _composerRepository; UploadAttachmentInteractor(this._composerRepository); - Stream> execute(FileInfo fileInfo, AccountId accountId, Uri uploadUrl) async* { - try { - final result = await _composerRepository.uploadAttachment( - UploadRequest(uploadUrl, accountId, fileInfo)); - yield Right(UploadAttachmentSuccess(result)); - } catch (e) { - yield Left(UploadAttachmentFailure(e)); - } + UploadAttachment execute(FileInfo fileInfo, Uri uploadUri, {CancelToken? cancelToken}) { + return _composerRepository.uploadAttachment(fileInfo, uploadUri, cancelToken: cancelToken); } } \ No newline at end of file diff --git a/lib/features/composer/domain/usecases/upload_mutiple_attachment_interactor.dart b/lib/features/composer/domain/usecases/upload_mutiple_attachment_interactor.dart deleted file mode 100644 index 27cc579fa..000000000 --- a/lib/features/composer/domain/usecases/upload_mutiple_attachment_interactor.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:core/core.dart'; -import 'package:dartz/dartz.dart'; -import 'package:jmap_dart_client/jmap/account_id.dart'; -import 'package:model/model.dart'; -import 'package:tmail_ui_user/features/composer/domain/state/upload_attachment_state.dart'; -import 'package:tmail_ui_user/features/composer/domain/usecases/upload_attachment_interactor.dart'; - -class UploadMultipleAttachmentInteractor { - final UploadAttachmentInteractor _uploadAttachmentInteractor; - - UploadMultipleAttachmentInteractor(this._uploadAttachmentInteractor); - - Stream> execute(List listFiles, AccountId accountId, Uri uploadUrl) async* { - try { - yield Right(UploadingAttachmentState()); - final listResult = await Future.wait( - listFiles.map((fileInfo) async { - final result = await _uploadAttachmentInteractor.execute(fileInfo, accountId, uploadUrl).toList(); - return result.first; - }) - ); - if (listResult.length == 1) { - yield listResult.first; - } else { - final listResultSuccess = listResult.where((either) => either.isRight()).toList(); - if (listResultSuccess.length == listResult.length) { - yield Right(UploadMultipleAttachmentAllSuccess(listResultSuccess)); - } else if (listResultSuccess.isEmpty) { - yield Left(UploadMultipleAttachmentAllFailure(listResult)); - } else { - yield Right(UploadMultipleAttachmentHasSomeFailure(listResultSuccess)); - } - } - } catch (e) { - yield Left(UploadMultipleAttachmentFailure(e)); - } - } -} \ No newline at end of file