TF-3480 Handle reopen multiple composer when reload page or session expired

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-02-28 01:29:38 +07:00
committed by Dat H. Pham
parent 810d86b100
commit cfc72a6f4f
24 changed files with 318 additions and 101 deletions
@@ -37,6 +37,8 @@ class SaveComposerCacheOnWebInteractor {
hasRequestReadReceipt: createEmailRequest.hasRequestReadReceipt, hasRequestReadReceipt: createEmailRequest.hasRequestReadReceipt,
isMarkAsImportant: createEmailRequest.isMarkAsImportant, isMarkAsImportant: createEmailRequest.isMarkAsImportant,
displayMode: createEmailRequest.displayMode displayMode: createEmailRequest.displayMode
composerIndex: createEmailRequest.composerIndex,
composerId: createEmailRequest.composerId,
)); ));
return Right(SaveComposerCacheSuccess()); return Right(SaveComposerCacheSuccess());
} catch (exception) { } catch (exception) {
@@ -52,7 +52,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/session
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/composer_cache_repository_impl.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/composer_cache_repository_impl.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_on_web_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/preferences/bindings/preferences_interactors_bindings.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/preferences/bindings/preferences_interactors_bindings.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identity_interactors_bindings.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identity_interactors_bindings.dart';
@@ -260,7 +260,7 @@ class ComposerBindings extends BaseBindings {
tag: composerId, tag: composerId,
); );
Get.lazyPut( Get.lazyPut(
() => RemoveComposerCacheOnWebInteractor(Get.find<ComposerCacheRepository>(tag: composerId)), () => RemoveComposerCacheByIdOnWebInteractor(Get.find<ComposerCacheRepository>(tag: composerId)),
tag: composerId, tag: composerId,
); );
Get.lazyPut(() => SaveComposerCacheOnWebInteractor( Get.lazyPut(() => SaveComposerCacheOnWebInteractor(
@@ -313,7 +313,7 @@ class ComposerBindings extends BaseBindings {
Get.find<GetEmailContentInteractor>(tag: composerId), Get.find<GetEmailContentInteractor>(tag: composerId),
Get.find<GetAllIdentitiesInteractor>(tag: composerId), Get.find<GetAllIdentitiesInteractor>(tag: composerId),
Get.find<UploadController>(tag: composerId), Get.find<UploadController>(tag: composerId),
Get.find<RemoveComposerCacheOnWebInteractor>(tag: composerId), Get.find<RemoveComposerCacheByIdOnWebInteractor>(tag: composerId),
Get.find<SaveComposerCacheOnWebInteractor>(tag: composerId), Get.find<SaveComposerCacheOnWebInteractor>(tag: composerId),
Get.find<DownloadImageAsBase64Interactor>(tag: composerId), Get.find<DownloadImageAsBase64Interactor>(tag: composerId),
Get.find<TransformHtmlEmailContentInteractor>(tag: composerId), Get.find<TransformHtmlEmailContentInteractor>(tag: composerId),
@@ -379,7 +379,7 @@ class ComposerBindings extends BaseBindings {
Get.delete<LocalImagePickerInteractor>(tag: composerId); Get.delete<LocalImagePickerInteractor>(tag: composerId);
Get.delete<UploadAttachmentInteractor>(tag: composerId); Get.delete<UploadAttachmentInteractor>(tag: composerId);
Get.delete<GetEmailContentInteractor>(tag: composerId); Get.delete<GetEmailContentInteractor>(tag: composerId);
Get.delete<RemoveComposerCacheOnWebInteractor>(tag: composerId); Get.delete<RemoveComposerCacheByIdOnWebInteractor>(tag: composerId);
Get.delete<SaveComposerCacheOnWebInteractor>(tag: composerId); Get.delete<SaveComposerCacheOnWebInteractor>(tag: composerId);
Get.delete<DownloadImageAsBase64Interactor>(tag: composerId); Get.delete<DownloadImageAsBase64Interactor>(tag: composerId);
Get.delete<TransformHtmlEmailContentInteractor>(tag: composerId); Get.delete<TransformHtmlEmailContentInteractor>(tag: composerId);
@@ -88,7 +88,7 @@ import 'package:tmail_ui_user/features/email/presentation/extensions/presentatio
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart'; import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart'; import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart'; import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_on_web_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/open_and_close_composer_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/open_and_close_composer_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/draggable_app_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/draggable_app_state.dart';
@@ -149,7 +149,7 @@ class ComposerController extends BaseController
final GetEmailContentInteractor _getEmailContentInteractor; final GetEmailContentInteractor _getEmailContentInteractor;
final GetAllIdentitiesInteractor _getAllIdentitiesInteractor; final GetAllIdentitiesInteractor _getAllIdentitiesInteractor;
final UploadController uploadController; final UploadController uploadController;
final RemoveComposerCacheOnWebInteractor _removeComposerCacheOnWebInteractor; final RemoveComposerCacheByIdOnWebInteractor _removeComposerCacheByIdOnWebInteractor;
final SaveComposerCacheOnWebInteractor _saveComposerCacheOnWebInteractor; final SaveComposerCacheOnWebInteractor _saveComposerCacheOnWebInteractor;
final DownloadImageAsBase64Interactor _downloadImageAsBase64Interactor; final DownloadImageAsBase64Interactor _downloadImageAsBase64Interactor;
final TransformHtmlEmailContentInteractor _transformHtmlEmailContentInteractor; final TransformHtmlEmailContentInteractor _transformHtmlEmailContentInteractor;
@@ -243,7 +243,7 @@ class ComposerController extends BaseController
this._getEmailContentInteractor, this._getEmailContentInteractor,
this._getAllIdentitiesInteractor, this._getAllIdentitiesInteractor,
this.uploadController, this.uploadController,
this._removeComposerCacheOnWebInteractor, this._removeComposerCacheByIdOnWebInteractor,
this._saveComposerCacheOnWebInteractor, this._saveComposerCacheOnWebInteractor,
this._downloadImageAsBase64Interactor, this._downloadImageAsBase64Interactor,
this._transformHtmlEmailContentInteractor, this._transformHtmlEmailContentInteractor,
@@ -421,7 +421,15 @@ class ComposerController extends BaseController
@override @override
Future<void> onUnloadBrowserListener(html.Event event) async { Future<void> onUnloadBrowserListener(html.Event event) async {
await _removeComposerCacheOnWebInteractor.execute(); final username = mailboxDashBoardController.sessionCurrent?.username;
final accountId = mailboxDashBoardController.accountId.value;
if (composerId != null && username != null && accountId != null) {
await _removeComposerCacheByIdOnWebInteractor.execute(
accountId,
username,
composerId!,
);
}
await _saveComposerCacheOnWebAction(); await _saveComposerCacheOnWebAction();
} }
@@ -504,6 +512,10 @@ class ComposerController extends BaseController
final emailContent = await getContentInEditor(); final emailContent = await getContentInEditor();
final uploadUri = _getUploadUriFromSession(session, accountId); final uploadUri = _getUploadUriFromSession(session, accountId);
final composerIndex = composerId != null
? mailboxDashBoardController.composerManager.getComposerIndex(composerId!)
: null;
return CreateEmailRequest( return CreateEmailRequest(
session: session, session: session,
accountId: accountId, accountId: accountId,
@@ -531,6 +543,8 @@ class ComposerController extends BaseController
emailSendingQueue: arguments.sendingEmail, emailSendingQueue: arguments.sendingEmail,
displayMode: screenDisplayMode.value, displayMode: screenDisplayMode.value,
uploadUri: uploadUri, uploadUri: uploadUri,
composerIndex: composerIndex,
composerId: composerId,
); );
} }
@@ -1363,9 +1377,12 @@ class ComposerController extends BaseController
isEmailChanged.value = draftEmailHash != emptyDraftEmailHash; isEmailChanged.value = draftEmailHash != emptyDraftEmailHash;
if (composerArguments.value?.emailActionType == EmailActionType.compose || final emailActionType = composerArguments.value?.emailActionType;
composerArguments.value?.emailActionType == EmailActionType.editDraft) { if (emailActionType == EmailActionType.compose
|| emailActionType == EmailActionType.editDraft) {
_savedEmailDraftHash = draftEmailHash; _savedEmailDraftHash = draftEmailHash;
} else if (emailActionType == EmailActionType.reopenComposerBrowser) {
_savedEmailDraftHash = emptyDraftEmailHash;
} }
} }
@@ -1468,7 +1485,7 @@ class ComposerController extends BaseController
required AccountId accountId, required AccountId accountId,
required String downloadUrl required String downloadUrl
}) { }) {
_restoreEmailInlineImagesInteractor = getBinding<RestoreEmailInlineImagesInteractor>(); _restoreEmailInlineImagesInteractor = getBinding<RestoreEmailInlineImagesInteractor>(tag: composerId);
if (_restoreEmailInlineImagesInteractor == null) return; if (_restoreEmailInlineImagesInteractor == null) return;
consumeState(_restoreEmailInlineImagesInteractor!.execute( consumeState(_restoreEmailInlineImagesInteractor!.execute(
htmlContent: htmlContent, htmlContent: htmlContent,
@@ -30,6 +30,27 @@ class ComposerManager extends GetxController {
_arrangeComposerIfNeeded(); _arrangeComposerIfNeeded();
} }
void addListComposer(List<ComposerArguments> listArguments) {
for (var argument in listArguments) {
final composerId = argument.composerId;
if (composerId == null) continue;
ComposerBindings(
composerId: composerId,
composerArguments: argument,
).dependencies();
composers[composerId] = ComposerView(
key: Key(composerId),
composerId: composerId,
);
composerIdsQueue.add(composerId);
}
_syncQueueIfNeeded();
}
void removeComposer(String id) { void removeComposer(String id) {
log('ComposerManager::removeComposer:Id = $id'); log('ComposerManager::removeComposer:Id = $id');
if (!composers.containsKey(id)) return; if (!composers.containsKey(id)) return;
@@ -252,6 +273,8 @@ class ComposerManager extends GetxController {
.toList(); .toList();
} }
int getComposerIndex(String id) => composerIdsQueue.toList().indexOf(id);
void showComposerIfHidden(String composerId) { void showComposerIfHidden(String composerId) {
log('ComposerManager::showComposerIfHidden:Id = $composerId'); log('ComposerManager::showComposerIfHidden:Id = $composerId');
if (!composers.containsKey(composerId)) return; if (!composers.containsKey(composerId)) return;
@@ -39,6 +39,8 @@ class CreateEmailRequest with EquatableMixin {
final SendingEmail? emailSendingQueue; final SendingEmail? emailSendingQueue;
final ScreenDisplayMode displayMode; final ScreenDisplayMode displayMode;
final Uri? uploadUri; final Uri? uploadUri;
final int? composerIndex;
final String? composerId;
CreateEmailRequest({ CreateEmailRequest({
required this.session, required this.session,
@@ -67,6 +69,8 @@ class CreateEmailRequest with EquatableMixin {
this.emailSendingQueue, this.emailSendingQueue,
this.displayMode = ScreenDisplayMode.normal, this.displayMode = ScreenDisplayMode.normal,
this.uploadUri, this.uploadUri,
this.composerIndex,
this.composerId,
}); });
@override @override
@@ -97,5 +101,7 @@ class CreateEmailRequest with EquatableMixin {
emailSendingQueue, emailSendingQueue,
displayMode, displayMode,
uploadUri, uploadUri,
composerIndex,
composerId,
]; ];
} }
@@ -34,6 +34,7 @@ class ComposerArguments extends RouterArguments {
final List<EmailAddress>? cc; final List<EmailAddress>? cc;
final List<EmailAddress>? bcc; final List<EmailAddress>? bcc;
final String? listPost; final String? listPost;
final String? composerId;
ComposerArguments({ ComposerArguments({
this.emailActionType = EmailActionType.compose, this.emailActionType = EmailActionType.compose,
@@ -58,6 +59,7 @@ class ComposerArguments extends RouterArguments {
this.bcc, this.bcc,
this.listPost, this.listPost,
this.isMarkAsImportant, this.isMarkAsImportant,
this.composerId,
}); });
factory ComposerArguments.fromSendingEmail(SendingEmail sendingEmail) => factory ComposerArguments.fromSendingEmail(SendingEmail sendingEmail) =>
@@ -122,6 +124,7 @@ class ComposerArguments extends RouterArguments {
hasRequestReadReceipt: composerCache.hasRequestReadReceipt, hasRequestReadReceipt: composerCache.hasRequestReadReceipt,
displayMode: composerCache.displayMode, displayMode: composerCache.displayMode,
isMarkAsImportant: composerCache.isMarkAsImportant, isMarkAsImportant: composerCache.isMarkAsImportant,
composerId: composerCache.composerId,
); );
factory ComposerArguments.replyEmail({ factory ComposerArguments.replyEmail({
@@ -242,6 +245,7 @@ class ComposerArguments extends RouterArguments {
cc, cc,
bcc, bcc,
listPost, listPost,
composerId,
]; ];
ComposerArguments copyWith({ ComposerArguments copyWith({
@@ -267,6 +271,7 @@ class ComposerArguments extends RouterArguments {
List<EmailAddress>? cc, List<EmailAddress>? cc,
List<EmailAddress>? bcc, List<EmailAddress>? bcc,
String? listPost, String? listPost,
String? composerId,
}) { }) {
return ComposerArguments( return ComposerArguments(
emailActionType: emailActionType ?? this.emailActionType, emailActionType: emailActionType ?? this.emailActionType,
@@ -291,6 +296,7 @@ class ComposerArguments extends RouterArguments {
cc: cc ?? this.cc, cc: cc ?? this.cc,
bcc: bcc ?? this.bcc, bcc: bcc ?? this.bcc,
listPost: listPost ?? this.listPost, listPost: listPost ?? this.listPost,
composerId: composerId ?? this.composerId,
); );
} }
} }
@@ -10,11 +10,20 @@ abstract class SessionStorageComposerDatasource {
required ComposerCache composerCache, required ComposerCache composerCache,
}); });
Future<ComposerCache> getComposerCacheOnWeb( Future<List<ComposerCache>> getComposerCacheOnWeb(
AccountId accountId, AccountId accountId,
UserName userName); UserName userName);
Future<void> removeComposerCacheOnWeb(); Future<void> removeAllComposerCacheOnWeb(
AccountId accountId,
UserName userName,
);
Future<void> removeComposerCacheByIdOnWeb(
AccountId accountId,
UserName userName,
String composerId,
);
Future<String> restoreEmailInlineImages( Future<String> restoreEmailInlineImages(
String htmlContent, String htmlContent,
@@ -1,11 +1,11 @@
import 'dart:convert'; import 'dart:convert';
import 'package:collection/collection.dart';
import 'package:core/domain/exceptions/web_session_exception.dart'; import 'package:core/domain/exceptions/web_session_exception.dart';
import 'package:core/presentation/utils/html_transformer/html_transform.dart'; import 'package:core/presentation/utils/html_transformer/html_transform.dart';
import 'package:core/presentation/utils/html_transformer/transform_configuration.dart'; import 'package:core/presentation/utils/html_transformer/transform_configuration.dart';
import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:model/model.dart'; import 'package:model/email/email_action_type.dart';
import 'package:model/extensions/account_id_extensions.dart';
import 'package:tmail_ui_user/features/caching/utils/cache_utils.dart'; import 'package:tmail_ui_user/features/caching/utils/cache_utils.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cache.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cache.dart';
@@ -20,7 +20,7 @@ class SessionStorageComposerDatasourceImpl
final ExceptionThrower _exceptionThrower; final ExceptionThrower _exceptionThrower;
@override @override
Future<ComposerCache> getComposerCacheOnWeb( Future<List<ComposerCache>> getComposerCacheOnWeb(
AccountId accountId, AccountId accountId,
UserName userName UserName userName
) async { ) async {
@@ -30,24 +30,20 @@ class SessionStorageComposerDatasourceImpl
accountId.asString, accountId.asString,
userName.value).toString(); userName.value).toString();
final result = html.window.sessionStorage.entries.firstWhereOrNull( final listEntries = html.window.sessionStorage.entries.where(
(entry) => entry.key == keyWithIdentity); (entry) => entry.key.startsWith(keyWithIdentity),
if (result != null) { );
return ComposerCache.fromJson(jsonDecode(result.value));
if (listEntries.isNotEmpty) {
return listEntries
.map((entry) => ComposerCache.fromJson(jsonDecode(entry.value)))
.toList();
} else { } else {
throw NotFoundInWebSessionException(); throw NotFoundInWebSessionException();
} }
}).catchError(_exceptionThrower.throwException); }).catchError(_exceptionThrower.throwException);
} }
@override
Future<void> removeComposerCacheOnWeb() async {
return Future.sync(() {
html.window.sessionStorage.removeWhere(
(key, value) => key.startsWith(EmailActionType.reopenComposerBrowser.name));
}).catchError(_exceptionThrower.throwException);
}
@override @override
Future<void> saveComposerCacheOnWeb({ Future<void> saveComposerCacheOnWeb({
required AccountId accountId, required AccountId accountId,
@@ -58,7 +54,9 @@ class SessionStorageComposerDatasourceImpl
final composerCacheKey = TupleKey( final composerCacheKey = TupleKey(
EmailActionType.reopenComposerBrowser.name, EmailActionType.reopenComposerBrowser.name,
accountId.asString, accountId.asString,
userName.value).toString(); userName.value,
composerCache.composerId,
).toString();
Map<String, String> entries = { Map<String, String> entries = {
composerCacheKey: jsonEncode(composerCache.toJson()) composerCacheKey: jsonEncode(composerCache.toJson())
}; };
@@ -78,4 +76,31 @@ class SessionStorageComposerDatasourceImpl
mapCidImageDownloadUrl: mapUrlDownloadCID); mapCidImageDownloadUrl: mapUrlDownloadCID);
}).catchError(_exceptionThrower.throwException); }).catchError(_exceptionThrower.throwException);
} }
@override
Future<void> removeAllComposerCacheOnWeb(AccountId accountId, UserName userName) {
return Future.sync(() {
final keyWithIdentity = TupleKey(
EmailActionType.reopenComposerBrowser.name,
accountId.asString,
userName.value,
).toString();
html.window.sessionStorage.removeWhere((key, value) => key.startsWith(keyWithIdentity));
}).catchError(_exceptionThrower.throwException);
}
@override
Future<void> removeComposerCacheByIdOnWeb(AccountId accountId, UserName userName, String composerId) {
return Future.sync(() {
final keyWithIdentity = TupleKey(
EmailActionType.reopenComposerBrowser.name,
accountId.asString,
userName.value,
composerId,
).toString();
html.window.sessionStorage.removeWhere((key, value) => key == keyWithIdentity);
}).catchError(_exceptionThrower.throwException);
}
} }
@@ -12,12 +12,16 @@ class ComposerCache with EquatableMixin {
final bool? hasRequestReadReceipt; final bool? hasRequestReadReceipt;
final bool? isMarkAsImportant; final bool? isMarkAsImportant;
final ScreenDisplayMode displayMode; final ScreenDisplayMode displayMode;
final int? composerIndex;
final String? composerId;
ComposerCache({ ComposerCache({
this.email, this.email,
this.hasRequestReadReceipt, this.hasRequestReadReceipt,
this.isMarkAsImportant, this.isMarkAsImportant,
this.displayMode = ScreenDisplayMode.normal this.displayMode = ScreenDisplayMode.normal
this.composerIndex,
this.composerId,
}); });
factory ComposerCache.fromJson(Map<String, dynamic> json) => _$ComposerCacheFromJson(json); factory ComposerCache.fromJson(Map<String, dynamic> json) => _$ComposerCacheFromJson(json);
@@ -30,5 +34,7 @@ class ComposerCache with EquatableMixin {
hasRequestReadReceipt, hasRequestReadReceipt,
isMarkAsImportant, isMarkAsImportant,
displayMode displayMode
composerIndex,
composerId,
]; ];
} }
@@ -12,7 +12,7 @@ class ComposerCacheRepositoryImpl extends ComposerCacheRepository {
ComposerCacheRepositoryImpl(this.composerCacheDataSource); ComposerCacheRepositoryImpl(this.composerCacheDataSource);
@override @override
Future<ComposerCache> getComposerCacheOnWeb( Future<List<ComposerCache>> getComposerCacheOnWeb(
AccountId accountId, AccountId accountId,
UserName userName UserName userName
) { ) {
@@ -20,8 +20,13 @@ class ComposerCacheRepositoryImpl extends ComposerCacheRepository {
} }
@override @override
Future<void> removeComposerCacheOnWeb() { Future<void> removeAllComposerCacheOnWeb(AccountId accountId, UserName userName) {
return composerCacheDataSource.removeComposerCacheOnWeb(); return composerCacheDataSource.removeAllComposerCacheOnWeb(accountId, userName);
}
@override
Future<void> removeComposerCacheByIdOnWeb(AccountId accountId, UserName userName, String composerId) {
return composerCacheDataSource.removeComposerCacheByIdOnWeb(accountId, userName, composerId);
} }
@override @override
@@ -10,11 +10,20 @@ abstract class ComposerCacheRepository {
required ComposerCache composerCache, required ComposerCache composerCache,
}); });
Future<ComposerCache> getComposerCacheOnWeb( Future<List<ComposerCache>> getComposerCacheOnWeb(
AccountId accountId, AccountId accountId,
UserName userName); UserName userName);
Future<void> removeComposerCacheOnWeb(); Future<void> removeAllComposerCacheOnWeb(
AccountId accountId,
UserName userName,
);
Future<void> removeComposerCacheByIdOnWeb(
AccountId accountId,
UserName userName,
String composerId,
);
Future<String> restoreEmailInlineImages( Future<String> restoreEmailInlineImages(
String htmlContent, String htmlContent,
@@ -4,12 +4,12 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cac
class GetComposerCacheSuccess extends UIState { class GetComposerCacheSuccess extends UIState {
final ComposerCache composerCache; final List<ComposerCache> listComposerCache;
GetComposerCacheSuccess(this.composerCache); GetComposerCacheSuccess(this.listComposerCache);
@override @override
List<Object> get props => [composerCache]; List<Object> get props => [listComposerCache];
} }
class GetComposerCacheFailure extends FeatureFailure { class GetComposerCacheFailure extends FeatureFailure {
@@ -13,8 +13,11 @@ class GetComposerCacheOnWebInteractor {
Stream<Either<Failure, Success>> execute(AccountId accountId, UserName userName) async* { Stream<Either<Failure, Success>> execute(AccountId accountId, UserName userName) async* {
try { try {
final data = await composerCacheRepository.getComposerCacheOnWeb(accountId, userName); final listComposerCache = await composerCacheRepository.getComposerCacheOnWeb(
yield Right(GetComposerCacheSuccess(data)); accountId,
userName,
);
yield Right(GetComposerCacheSuccess(listComposerCache));
} catch (exception) { } catch (exception) {
yield Left(GetComposerCacheFailure(exception)); yield Left(GetComposerCacheFailure(exception));
} }
@@ -0,0 +1,22 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_composer_cache_state.dart';
class RemoveAllComposerCacheOnWebInteractor {
final ComposerCacheRepository composerCacheRepository;
RemoveAllComposerCacheOnWebInteractor(this.composerCacheRepository);
Future<Either<Failure, Success>> execute(AccountId accountId, UserName userName) async {
try {
composerCacheRepository.removeAllComposerCacheOnWeb(accountId, userName);
return Right(RemoveComposerCacheSuccess());
} catch (exception) {
return Left(RemoveComposerCacheFailure(exception));
}
}
}
@@ -0,0 +1,30 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_composer_cache_state.dart';
class RemoveComposerCacheByIdOnWebInteractor {
final ComposerCacheRepository composerCacheRepository;
RemoveComposerCacheByIdOnWebInteractor(this.composerCacheRepository);
Future<Either<Failure, Success>> execute(
AccountId accountId,
UserName userName,
String composerId,
) async {
try {
composerCacheRepository.removeComposerCacheByIdOnWeb(
accountId,
userName,
composerId,
);
return Right(RemoveComposerCacheSuccess());
} catch (exception) {
return Left(RemoveComposerCacheFailure(exception));
}
}
}
@@ -1,19 +0,0 @@
import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_composer_cache_state.dart';
class RemoveComposerCacheOnWebInteractor {
final ComposerCacheRepository composerCacheRepository;
RemoveComposerCacheOnWebInteractor(this.composerCacheRepository);
Future<Either<Failure, Success>> execute() async {
try {
composerCacheRepository.removeComposerCacheOnWeb();
return Right(RemoveComposerCacheSuccess());
} catch (exception) {
return Left(RemoveComposerCacheFailure(exception));
}
}
}
@@ -81,7 +81,8 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_com
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_mailbox_cached_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_mailbox_cached_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_report_state_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_report_state_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_on_web_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_last_time_dismissed_spam_reported_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_last_time_dismissed_spam_reported_interactor.dart';
@@ -194,7 +195,8 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<UnsubscribeEmailInteractor>(), Get.find<UnsubscribeEmailInteractor>(),
Get.find<RestoredDeletedMessageInteractor>(), Get.find<RestoredDeletedMessageInteractor>(),
Get.find<GetRestoredDeletedMessageInterator>(), Get.find<GetRestoredDeletedMessageInterator>(),
Get.find<RemoveComposerCacheOnWebInteractor>(), Get.find<RemoveAllComposerCacheOnWebInteractor>(),
Get.find<RemoveComposerCacheByIdOnWebInteractor>(),
Get.find<GetAllIdentitiesInteractor>(), Get.find<GetAllIdentitiesInteractor>(),
)); ));
Get.put(AdvancedFilterController()); Get.put(AdvancedFilterController());
@@ -308,7 +310,8 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.lazyPut(() => QuickSearchEmailInteractor(Get.find<ThreadRepository>())); Get.lazyPut(() => QuickSearchEmailInteractor(Get.find<ThreadRepository>()));
Get.lazyPut(() => MarkAsMailboxReadInteractor(Get.find<MailboxRepository>())); Get.lazyPut(() => MarkAsMailboxReadInteractor(Get.find<MailboxRepository>()));
Get.lazyPut(() => GetComposerCacheOnWebInteractor(Get.find<ComposerCacheRepository>())); Get.lazyPut(() => GetComposerCacheOnWebInteractor(Get.find<ComposerCacheRepository>()));
Get.lazyPut(() => RemoveComposerCacheOnWebInteractor(Get.find<ComposerCacheRepository>())); Get.lazyPut(() => RemoveComposerCacheByIdOnWebInteractor(Get.find<ComposerCacheRepository>()));
Get.lazyPut(() => RemoveAllComposerCacheOnWebInteractor(Get.find<ComposerCacheRepository>()));
Get.lazyPut(() => MarkAsEmailReadInteractor(Get.find<EmailRepository>())); Get.lazyPut(() => MarkAsEmailReadInteractor(Get.find<EmailRepository>()));
Get.lazyPut(() => MarkAsStarEmailInteractor(Get.find<EmailRepository>())); Get.lazyPut(() => MarkAsStarEmailInteractor(Get.find<EmailRepository>()));
Get.lazyPut(() => MarkAsMultipleEmailReadInteractor( Get.lazyPut(() => MarkAsMultipleEmailReadInteractor(
@@ -92,7 +92,8 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_repor
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_composer_cache_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_composer_cache_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_email_drafts_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_email_drafts_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_on_web_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart';
@@ -102,6 +103,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/delete_emails_in_mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/delete_emails_in_mailbox_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_preferences_setting_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_preferences_setting_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/open_and_close_composer_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/open_and_close_composer_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/reopen_composer_cache_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/set_error_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/set_error_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_current_emails_flags_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_current_emails_flags_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/user_setting_popup_menu_mixin.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/user_setting_popup_menu_mixin.dart';
@@ -213,7 +215,8 @@ class MailboxDashBoardController extends ReloadableController
final UnsubscribeEmailInteractor _unsubscribeEmailInteractor; final UnsubscribeEmailInteractor _unsubscribeEmailInteractor;
final RestoredDeletedMessageInteractor _restoreDeletedMessageInteractor; final RestoredDeletedMessageInteractor _restoreDeletedMessageInteractor;
final GetRestoredDeletedMessageInterator _getRestoredDeletedMessageInteractor; final GetRestoredDeletedMessageInterator _getRestoredDeletedMessageInteractor;
final RemoveComposerCacheOnWebInteractor _removeComposerCacheOnWebInteractor; final RemoveComposerCacheByIdOnWebInteractor _removeComposerCacheByIdOnWebInteractor;
final RemoveAllComposerCacheOnWebInteractor _removeAllComposerCacheOnWebInteractor;
final GetAllIdentitiesInteractor _getAllIdentitiesInteractor; final GetAllIdentitiesInteractor _getAllIdentitiesInteractor;
GetAllVacationInteractor? _getAllVacationInteractor; GetAllVacationInteractor? _getAllVacationInteractor;
@@ -304,7 +307,8 @@ class MailboxDashBoardController extends ReloadableController
this._unsubscribeEmailInteractor, this._unsubscribeEmailInteractor,
this._restoreDeletedMessageInteractor, this._restoreDeletedMessageInteractor,
this._getRestoredDeletedMessageInteractor, this._getRestoredDeletedMessageInteractor,
this._removeComposerCacheOnWebInteractor, this._removeAllComposerCacheOnWebInteractor,
this._removeComposerCacheByIdOnWebInteractor,
this._getAllIdentitiesInteractor, this._getAllIdentitiesInteractor,
); );
@@ -433,8 +437,7 @@ class MailboxDashBoardController extends ReloadableController
} else if (success is GetAllIdentitiesSuccess) { } else if (success is GetAllIdentitiesSuccess) {
_handleGetAllIdentitiesSuccess(success); _handleGetAllIdentitiesSuccess(success);
} else if (success is GetComposerCacheSuccess) { } else if (success is GetComposerCacheSuccess) {
removeComposerCacheOnWeb(); handleGetComposerCacheSuccess(success);
openComposer(ComposerArguments.fromSessionStorageBrowser(success.composerCache));
} else if (success is GetIdentityCacheOnWebSuccess) { } else if (success is GetIdentityCacheOnWebSuccess) {
goToSettings(); goToSettings();
} else if (success is MarkAsStarEmailSuccess) { } else if (success is MarkAsStarEmailSuccess) {
@@ -3058,8 +3061,23 @@ class MailboxDashBoardController extends ReloadableController
isRecoveringDeletedMessage.value = true; isRecoveringDeletedMessage.value = true;
} }
Future<void> _removeComposerCacheOnWeb() async { Future<void> removeComposerCacheByIdOnWeb(String composerId) async {
await _removeComposerCacheOnWebInteractor.execute(); if (accountId.value == null || sessionCurrent == null) return;
await _removeComposerCacheByIdOnWebInteractor.execute(
accountId.value!,
sessionCurrent!.username,
composerId,
);
}
Future<void> removeAllComposerCacheOnWeb() async {
if (accountId.value == null || sessionCurrent == null) return;
await _removeAllComposerCacheOnWebInteractor.execute(
accountId.value!,
sessionCurrent!.username,
);
} }
bool validateSendingEmailFailedWhenNetworkIsLostOnMobile(dynamic failure) { bool validateSendingEmailFailedWhenNetworkIsLostOnMobile(dynamic failure) {
@@ -30,6 +30,20 @@ extension OpenAndCloseComposerExtension on MailboxDashBoardController {
} }
} }
void openListComposer(List<ComposerArguments> listArguments) {
final newListArguments = listArguments
.map((argument) => argument.withIdentity(
identities: List.from(listIdentities),
selectedIdentityId: argument.selectedIdentityId,
))
.toList();
composerManager.addListComposer(newListArguments);
if (!twakeAppManager.hasComposer) {
twakeAppManager.setHasComposer(true);
}
}
void _openComposerOnWeb(ComposerArguments composerArguments) { void _openComposerOnWeb(ComposerArguments composerArguments) {
composerManager.addComposer(composerArguments); composerManager.addComposer(composerArguments);
if (!twakeAppManager.hasComposer) { if (!twakeAppManager.hasComposer) {
@@ -99,7 +113,9 @@ extension OpenAndCloseComposerExtension on MailboxDashBoardController {
_handleResultAfterCloseComposer(result); _handleResultAfterCloseComposer(result);
await removeComposerCacheOnWeb(); if (composerId != null) {
await removeComposerCacheByIdOnWeb(composerId);
}
} }
void _handleResultAfterCloseComposer(dynamic result) { void _handleResultAfterCloseComposer(dynamic result) {
@@ -0,0 +1,21 @@
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_composer_cache_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/open_and_close_composer_extension.dart';
extension ReopenComposerCacheExtension on MailboxDashBoardController {
void handleGetComposerCacheSuccess(GetComposerCacheSuccess success) {
removeAllComposerCacheOnWeb();
final listComposerCacheSortByIndex = success.listComposerCache
..sort((a, b) => (a.composerIndex ?? 0).compareTo(b.composerIndex ?? 0));
final listArguments = listComposerCacheSortByIndex
.map((composerCache) => ComposerArguments.fromSessionStorageBrowser(composerCache))
.toList();
openListComposer(listArguments);
}
}
@@ -51,7 +51,7 @@ import 'package:tmail_ui_user/features/email/presentation/model/composer_argumen
import 'package:tmail_ui_user/features/login/data/network/interceptors/authorization_interceptors.dart'; import 'package:tmail_ui_user/features/login/data/network/interceptors/authorization_interceptors.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/delete_authority_oidc_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/delete_authority_oidc_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_on_web_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/draggable_app_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/draggable_app_state.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart'; import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
@@ -156,7 +156,7 @@ class MockMailboxDashBoardController extends Mock implements MailboxDashBoardCon
MockSpec<GetEmailContentInteractor>(), MockSpec<GetEmailContentInteractor>(),
MockSpec<GetAllIdentitiesInteractor>(), MockSpec<GetAllIdentitiesInteractor>(),
MockSpec<UploadController>(fallbackGenerators: fallbackGenerators), MockSpec<UploadController>(fallbackGenerators: fallbackGenerators),
MockSpec<RemoveComposerCacheOnWebInteractor>(), MockSpec<RemoveComposerCacheByIdOnWebInteractor>(),
MockSpec<SaveComposerCacheOnWebInteractor>(), MockSpec<SaveComposerCacheOnWebInteractor>(),
MockSpec<DownloadImageAsBase64Interactor>(), MockSpec<DownloadImageAsBase64Interactor>(),
MockSpec<TransformHtmlEmailContentInteractor>(), MockSpec<TransformHtmlEmailContentInteractor>(),
@@ -199,7 +199,7 @@ void main() {
late MockGetEmailContentInteractor mockGetEmailContentInteractor; late MockGetEmailContentInteractor mockGetEmailContentInteractor;
late MockGetAllIdentitiesInteractor mockGetAllIdentitiesInteractor; late MockGetAllIdentitiesInteractor mockGetAllIdentitiesInteractor;
late MockUploadController mockUploadController; late MockUploadController mockUploadController;
late MockRemoveComposerCacheOnWebInteractor mockRemoveComposerCacheOnWebInteractor; late MockRemoveComposerCacheByIdOnWebInteractor mockRemoveComposerCacheByIdOnWebInteractor;
late MockSaveComposerCacheOnWebInteractor mockSaveComposerCacheOnWebInteractor; late MockSaveComposerCacheOnWebInteractor mockSaveComposerCacheOnWebInteractor;
late MockDownloadImageAsBase64Interactor mockDownloadImageAsBase64Interactor; late MockDownloadImageAsBase64Interactor mockDownloadImageAsBase64Interactor;
late MockTransformHtmlEmailContentInteractor mockTransformHtmlEmailContentInteractor; late MockTransformHtmlEmailContentInteractor mockTransformHtmlEmailContentInteractor;
@@ -267,7 +267,7 @@ void main() {
mockGetEmailContentInteractor = MockGetEmailContentInteractor(); mockGetEmailContentInteractor = MockGetEmailContentInteractor();
mockGetAllIdentitiesInteractor = MockGetAllIdentitiesInteractor(); mockGetAllIdentitiesInteractor = MockGetAllIdentitiesInteractor();
mockUploadController = MockUploadController(); mockUploadController = MockUploadController();
mockRemoveComposerCacheOnWebInteractor = MockRemoveComposerCacheOnWebInteractor(); mockRemoveComposerCacheByIdOnWebInteractor = MockRemoveComposerCacheByIdOnWebInteractor();
mockSaveComposerCacheOnWebInteractor = MockSaveComposerCacheOnWebInteractor(); mockSaveComposerCacheOnWebInteractor = MockSaveComposerCacheOnWebInteractor();
mockDownloadImageAsBase64Interactor = MockDownloadImageAsBase64Interactor(); mockDownloadImageAsBase64Interactor = MockDownloadImageAsBase64Interactor();
mockTransformHtmlEmailContentInteractor = MockTransformHtmlEmailContentInteractor(); mockTransformHtmlEmailContentInteractor = MockTransformHtmlEmailContentInteractor();
@@ -282,7 +282,7 @@ void main() {
mockGetEmailContentInteractor, mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor, mockGetAllIdentitiesInteractor,
mockUploadController, mockUploadController,
mockRemoveComposerCacheOnWebInteractor, mockRemoveComposerCacheByIdOnWebInteractor,
mockSaveComposerCacheOnWebInteractor, mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor, mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor, mockTransformHtmlEmailContentInteractor,
@@ -415,7 +415,7 @@ void main() {
mockGetEmailContentInteractor, mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor, mockGetAllIdentitiesInteractor,
mockUploadController, mockUploadController,
mockRemoveComposerCacheOnWebInteractor, mockRemoveComposerCacheByIdOnWebInteractor,
mockSaveComposerCacheOnWebInteractor, mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor, mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor, mockTransformHtmlEmailContentInteractor,
@@ -476,7 +476,7 @@ void main() {
mockGetEmailContentInteractor, mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor, mockGetAllIdentitiesInteractor,
mockUploadController, mockUploadController,
mockRemoveComposerCacheOnWebInteractor, mockRemoveComposerCacheByIdOnWebInteractor,
mockSaveComposerCacheOnWebInteractor, mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor, mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor, mockTransformHtmlEmailContentInteractor,
@@ -538,7 +538,7 @@ void main() {
mockGetEmailContentInteractor, mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor, mockGetAllIdentitiesInteractor,
mockUploadController, mockUploadController,
mockRemoveComposerCacheOnWebInteractor, mockRemoveComposerCacheByIdOnWebInteractor,
mockSaveComposerCacheOnWebInteractor, mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor, mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor, mockTransformHtmlEmailContentInteractor,
@@ -599,7 +599,7 @@ void main() {
mockGetEmailContentInteractor, mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor, mockGetAllIdentitiesInteractor,
mockUploadController, mockUploadController,
mockRemoveComposerCacheOnWebInteractor, mockRemoveComposerCacheByIdOnWebInteractor,
mockSaveComposerCacheOnWebInteractor, mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor, mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor, mockTransformHtmlEmailContentInteractor,
@@ -901,7 +901,7 @@ void main() {
mockGetEmailContentInteractor, mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor, mockGetAllIdentitiesInteractor,
mockUploadController, mockUploadController,
mockRemoveComposerCacheOnWebInteractor, mockRemoveComposerCacheByIdOnWebInteractor,
mockSaveComposerCacheOnWebInteractor, mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor, mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor, mockTransformHtmlEmailContentInteractor,
@@ -973,7 +973,7 @@ void main() {
mockGetEmailContentInteractor, mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor, mockGetAllIdentitiesInteractor,
mockUploadController, mockUploadController,
mockRemoveComposerCacheOnWebInteractor, mockRemoveComposerCacheByIdOnWebInteractor,
mockSaveComposerCacheOnWebInteractor, mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor, mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor, mockTransformHtmlEmailContentInteractor,
@@ -1047,7 +1047,7 @@ void main() {
mockGetEmailContentInteractor, mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor, mockGetAllIdentitiesInteractor,
mockUploadController, mockUploadController,
mockRemoveComposerCacheOnWebInteractor, mockRemoveComposerCacheByIdOnWebInteractor,
mockSaveComposerCacheOnWebInteractor, mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor, mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor, mockTransformHtmlEmailContentInteractor,
@@ -1125,7 +1125,7 @@ void main() {
mockGetEmailContentInteractor, mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor, mockGetAllIdentitiesInteractor,
mockUploadController, mockUploadController,
mockRemoveComposerCacheOnWebInteractor, mockRemoveComposerCacheByIdOnWebInteractor,
mockSaveComposerCacheOnWebInteractor, mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor, mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor, mockTransformHtmlEmailContentInteractor,
@@ -1490,7 +1490,7 @@ void main() {
mockGetEmailContentInteractor, mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor, mockGetAllIdentitiesInteractor,
mockUploadController, mockUploadController,
mockRemoveComposerCacheOnWebInteractor, mockRemoveComposerCacheByIdOnWebInteractor,
mockSaveComposerCacheOnWebInteractor, mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor, mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor, mockTransformHtmlEmailContentInteractor,
@@ -1542,7 +1542,7 @@ void main() {
mockGetEmailContentInteractor, mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor, mockGetAllIdentitiesInteractor,
mockUploadController, mockUploadController,
mockRemoveComposerCacheOnWebInteractor, mockRemoveComposerCacheByIdOnWebInteractor,
mockSaveComposerCacheOnWebInteractor, mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor, mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor, mockTransformHtmlEmailContentInteractor,
@@ -1595,7 +1595,7 @@ void main() {
mockGetEmailContentInteractor, mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor, mockGetAllIdentitiesInteractor,
mockUploadController, mockUploadController,
mockRemoveComposerCacheOnWebInteractor, mockRemoveComposerCacheByIdOnWebInteractor,
mockSaveComposerCacheOnWebInteractor, mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor, mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor, mockTransformHtmlEmailContentInteractor,
@@ -1652,7 +1652,7 @@ void main() {
mockGetEmailContentInteractor, mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor, mockGetAllIdentitiesInteractor,
mockUploadController, mockUploadController,
mockRemoveComposerCacheOnWebInteractor, mockRemoveComposerCacheByIdOnWebInteractor,
mockSaveComposerCacheOnWebInteractor, mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor, mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor, mockTransformHtmlEmailContentInteractor,
@@ -56,7 +56,8 @@ import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_na
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_on_web_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart';
@@ -173,7 +174,8 @@ const fallbackGenerators = {
MockSpec<Uuid>(), MockSpec<Uuid>(),
MockSpec<CachingManager>(), MockSpec<CachingManager>(),
MockSpec<LanguageCacheManager>(), MockSpec<LanguageCacheManager>(),
MockSpec<RemoveComposerCacheOnWebInteractor>(), MockSpec<RemoveAllComposerCacheOnWebInteractor>(),
MockSpec<RemoveComposerCacheByIdOnWebInteractor>(),
MockSpec<ApplicationManager>(), MockSpec<ApplicationManager>(),
MockSpec<ToastManager>(), MockSpec<ToastManager>(),
MockSpec<TwakeAppManager>(), MockSpec<TwakeAppManager>(),
@@ -263,7 +265,8 @@ void main() {
final verifyNameInteractor = MockVerifyNameInteractor(); final verifyNameInteractor = MockVerifyNameInteractor();
final getAllMailboxInteractor = MockGetAllMailboxInteractor(); final getAllMailboxInteractor = MockGetAllMailboxInteractor();
final refreshAllMailboxInteractor = MockRefreshAllMailboxInteractor(); final refreshAllMailboxInteractor = MockRefreshAllMailboxInteractor();
final removeComposerCacheOnWebInteractor = MockRemoveComposerCacheOnWebInteractor(); final removeAllComposerCacheOnWebInteractor = MockRemoveAllComposerCacheOnWebInteractor();
final removeComposerCacheByIdOnWebInteractor = MockRemoveComposerCacheByIdOnWebInteractor();
final getAllIdentitiesInteractor = MockGetAllIdentitiesInteractor(); final getAllIdentitiesInteractor = MockGetAllIdentitiesInteractor();
final composerManager = MockComposerManager(); final composerManager = MockComposerManager();
late MailboxController mailboxController; late MailboxController mailboxController;
@@ -316,7 +319,8 @@ void main() {
Get.put<GetAuthenticatedAccountInteractor>(getAuthenticatedAccountInteractor); Get.put<GetAuthenticatedAccountInteractor>(getAuthenticatedAccountInteractor);
Get.put<UpdateAccountCacheInteractor>(updateAccountCacheInteractor); Get.put<UpdateAccountCacheInteractor>(updateAccountCacheInteractor);
Get.put<GetAllIdentitiesInteractor>(getAllIdentitiesInteractor); Get.put<GetAllIdentitiesInteractor>(getAllIdentitiesInteractor);
Get.put<RemoveComposerCacheOnWebInteractor>(removeComposerCacheOnWebInteractor); Get.put<RemoveAllComposerCacheOnWebInteractor>(removeAllComposerCacheOnWebInteractor);
Get.put<RemoveComposerCacheByIdOnWebInteractor>(removeComposerCacheByIdOnWebInteractor);
Get.put<ComposerManager>(composerManager); Get.put<ComposerManager>(composerManager);
searchController = SearchController( searchController = SearchController(
@@ -351,7 +355,8 @@ void main() {
unsubscribeEmailInteractor, unsubscribeEmailInteractor,
restoreDeletedMessageInteractor, restoreDeletedMessageInteractor,
getRestoredDeletedMessageInteractor, getRestoredDeletedMessageInteractor,
removeComposerCacheOnWebInteractor, removeAllComposerCacheOnWebInteractor,
removeComposerCacheByIdOnWebInteractor,
getAllIdentitiesInteractor, getAllIdentitiesInteractor,
); );
}); });
@@ -55,7 +55,8 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_repor
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_on_web_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart';
@@ -174,7 +175,8 @@ const fallbackGenerators = {
MockSpec<Uuid>(), MockSpec<Uuid>(),
MockSpec<CachingManager>(), MockSpec<CachingManager>(),
MockSpec<LanguageCacheManager>(), MockSpec<LanguageCacheManager>(),
MockSpec<RemoveComposerCacheOnWebInteractor>(), MockSpec<RemoveAllComposerCacheOnWebInteractor>(),
MockSpec<RemoveComposerCacheByIdOnWebInteractor>(),
MockSpec<ApplicationManager>(), MockSpec<ApplicationManager>(),
MockSpec<GetAllIdentitiesInteractor>(), MockSpec<GetAllIdentitiesInteractor>(),
MockSpec<GetQuotasInteractor>(), MockSpec<GetQuotasInteractor>(),
@@ -250,7 +252,8 @@ void main() {
final verifyNameInteractor = MockVerifyNameInteractor(); final verifyNameInteractor = MockVerifyNameInteractor();
final getAllMailboxInteractor = MockGetAllMailboxInteractor(); final getAllMailboxInteractor = MockGetAllMailboxInteractor();
final refreshAllMailboxInteractor = MockRefreshAllMailboxInteractor(); final refreshAllMailboxInteractor = MockRefreshAllMailboxInteractor();
final removeComposerCacheOnWebInteractor = MockRemoveComposerCacheOnWebInteractor(); final removeAllComposerCacheOnWebInteractor = MockRemoveAllComposerCacheOnWebInteractor();
final removeComposerCacheByIdOnWebInteractor = MockRemoveComposerCacheByIdOnWebInteractor();
final getAllIdentitiesInteractor = MockGetAllIdentitiesInteractor(); final getAllIdentitiesInteractor = MockGetAllIdentitiesInteractor();
final composerManager = MockComposerManager(); final composerManager = MockComposerManager();
@@ -314,7 +317,8 @@ void main() {
Get.put<GetAuthenticatedAccountInteractor>(getAuthenticatedAccountInteractor); Get.put<GetAuthenticatedAccountInteractor>(getAuthenticatedAccountInteractor);
Get.put<UpdateAccountCacheInteractor>(updateAccountCacheInteractor); Get.put<UpdateAccountCacheInteractor>(updateAccountCacheInteractor);
Get.put<GetAllIdentitiesInteractor>(getAllIdentitiesInteractor); Get.put<GetAllIdentitiesInteractor>(getAllIdentitiesInteractor);
Get.put<RemoveComposerCacheOnWebInteractor>(removeComposerCacheOnWebInteractor); Get.put<RemoveAllComposerCacheOnWebInteractor>(removeAllComposerCacheOnWebInteractor);
Get.put<RemoveComposerCacheByIdOnWebInteractor>(removeComposerCacheByIdOnWebInteractor);
Get.put<ComposerManager>(composerManager); Get.put<ComposerManager>(composerManager);
when(emailReceiveManager.pendingSharedFileInfo).thenAnswer((_) => BehaviorSubject.seeded([])); when(emailReceiveManager.pendingSharedFileInfo).thenAnswer((_) => BehaviorSubject.seeded([]));
@@ -350,7 +354,8 @@ void main() {
unsubscribeEmailInteractor, unsubscribeEmailInteractor,
restoreDeletedMessageInteractor, restoreDeletedMessageInteractor,
getRestoredDeletedMessageInteractor, getRestoredDeletedMessageInteractor,
removeComposerCacheOnWebInteractor, removeAllComposerCacheOnWebInteractor,
removeComposerCacheByIdOnWebInteractor,
getAllIdentitiesInteractor, getAllIdentitiesInteractor,
); );
Get.put(mailboxDashboardController); Get.put(mailboxDashboardController);
@@ -42,7 +42,8 @@ import 'package:tmail_ui_user/features/mailbox/domain/usecases/mark_as_mailbox_r
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_on_web_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart';
@@ -152,7 +153,8 @@ const fallbackGenerators = {
MockSpec<RestoredDeletedMessageInteractor>(), MockSpec<RestoredDeletedMessageInteractor>(),
MockSpec<GetRestoredDeletedMessageInterator>(), MockSpec<GetRestoredDeletedMessageInterator>(),
MockSpec<GetIdentityCacheOnWebInteractor>(), MockSpec<GetIdentityCacheOnWebInteractor>(),
MockSpec<RemoveComposerCacheOnWebInteractor>(), MockSpec<RemoveAllComposerCacheOnWebInteractor>(),
MockSpec<RemoveComposerCacheByIdOnWebInteractor>(),
MockSpec<GetAllIdentitiesInteractor>(), MockSpec<GetAllIdentitiesInteractor>(),
MockSpec<ComposerManager>(fallbackGenerators: fallbackGenerators), MockSpec<ComposerManager>(fallbackGenerators: fallbackGenerators),
]) ])
@@ -209,7 +211,8 @@ void main() {
late MockUnsubscribeEmailInteractor unsubscribeEmailInteractor; late MockUnsubscribeEmailInteractor unsubscribeEmailInteractor;
late MockRestoredDeletedMessageInteractor restoreDeletedMessageInteractor; late MockRestoredDeletedMessageInteractor restoreDeletedMessageInteractor;
late MockGetRestoredDeletedMessageInterator getRestoredDeletedMessageInteractor; late MockGetRestoredDeletedMessageInterator getRestoredDeletedMessageInteractor;
late MockRemoveComposerCacheOnWebInteractor removeComposerCacheOnWebInteractor; late MockRemoveAllComposerCacheOnWebInteractor removeAllComposerCacheOnWebInteractor;
late MockRemoveComposerCacheByIdOnWebInteractor removeComposerCacheByIdOnWebInteractor;
late MockGetAllIdentitiesInteractor getAllIdentitiesInteractor; late MockGetAllIdentitiesInteractor getAllIdentitiesInteractor;
// Declaration base controller // Declaration base controller
@@ -301,7 +304,8 @@ void main() {
unsubscribeEmailInteractor = MockUnsubscribeEmailInteractor(); unsubscribeEmailInteractor = MockUnsubscribeEmailInteractor();
restoreDeletedMessageInteractor = MockRestoredDeletedMessageInteractor(); restoreDeletedMessageInteractor = MockRestoredDeletedMessageInteractor();
getRestoredDeletedMessageInteractor = MockGetRestoredDeletedMessageInterator(); getRestoredDeletedMessageInteractor = MockGetRestoredDeletedMessageInterator();
removeComposerCacheOnWebInteractor = MockRemoveComposerCacheOnWebInteractor(); removeAllComposerCacheOnWebInteractor = MockRemoveAllComposerCacheOnWebInteractor();
removeComposerCacheByIdOnWebInteractor = MockRemoveComposerCacheByIdOnWebInteractor();
getAllIdentitiesInteractor = MockGetAllIdentitiesInteractor(); getAllIdentitiesInteractor = MockGetAllIdentitiesInteractor();
searchController = SearchController( searchController = SearchController(
@@ -346,7 +350,8 @@ void main() {
unsubscribeEmailInteractor, unsubscribeEmailInteractor,
restoreDeletedMessageInteractor, restoreDeletedMessageInteractor,
getRestoredDeletedMessageInteractor, getRestoredDeletedMessageInteractor,
removeComposerCacheOnWebInteractor, removeAllComposerCacheOnWebInteractor,
removeComposerCacheByIdOnWebInteractor,
getAllIdentitiesInteractor, getAllIdentitiesInteractor,
); );