TF-3480 Handle reopen multiple composer when reload page or session expired
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -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/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/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/presentation/preferences/bindings/preferences_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,
|
||||
);
|
||||
Get.lazyPut(
|
||||
() => RemoveComposerCacheOnWebInteractor(Get.find<ComposerCacheRepository>(tag: composerId)),
|
||||
() => RemoveComposerCacheByIdOnWebInteractor(Get.find<ComposerCacheRepository>(tag: composerId)),
|
||||
tag: composerId,
|
||||
);
|
||||
Get.lazyPut(() => SaveComposerCacheOnWebInteractor(
|
||||
@@ -313,7 +313,7 @@ class ComposerBindings extends BaseBindings {
|
||||
Get.find<GetEmailContentInteractor>(tag: composerId),
|
||||
Get.find<GetAllIdentitiesInteractor>(tag: composerId),
|
||||
Get.find<UploadController>(tag: composerId),
|
||||
Get.find<RemoveComposerCacheOnWebInteractor>(tag: composerId),
|
||||
Get.find<RemoveComposerCacheByIdOnWebInteractor>(tag: composerId),
|
||||
Get.find<SaveComposerCacheOnWebInteractor>(tag: composerId),
|
||||
Get.find<DownloadImageAsBase64Interactor>(tag: composerId),
|
||||
Get.find<TransformHtmlEmailContentInteractor>(tag: composerId),
|
||||
@@ -379,7 +379,7 @@ class ComposerBindings extends BaseBindings {
|
||||
Get.delete<LocalImagePickerInteractor>(tag: composerId);
|
||||
Get.delete<UploadAttachmentInteractor>(tag: composerId);
|
||||
Get.delete<GetEmailContentInteractor>(tag: composerId);
|
||||
Get.delete<RemoveComposerCacheOnWebInteractor>(tag: composerId);
|
||||
Get.delete<RemoveComposerCacheByIdOnWebInteractor>(tag: composerId);
|
||||
Get.delete<SaveComposerCacheOnWebInteractor>(tag: composerId);
|
||||
Get.delete<DownloadImageAsBase64Interactor>(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/utils/email_utils.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/extensions/open_and_close_composer_extension.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 GetAllIdentitiesInteractor _getAllIdentitiesInteractor;
|
||||
final UploadController uploadController;
|
||||
final RemoveComposerCacheOnWebInteractor _removeComposerCacheOnWebInteractor;
|
||||
final RemoveComposerCacheByIdOnWebInteractor _removeComposerCacheByIdOnWebInteractor;
|
||||
final SaveComposerCacheOnWebInteractor _saveComposerCacheOnWebInteractor;
|
||||
final DownloadImageAsBase64Interactor _downloadImageAsBase64Interactor;
|
||||
final TransformHtmlEmailContentInteractor _transformHtmlEmailContentInteractor;
|
||||
@@ -243,7 +243,7 @@ class ComposerController extends BaseController
|
||||
this._getEmailContentInteractor,
|
||||
this._getAllIdentitiesInteractor,
|
||||
this.uploadController,
|
||||
this._removeComposerCacheOnWebInteractor,
|
||||
this._removeComposerCacheByIdOnWebInteractor,
|
||||
this._saveComposerCacheOnWebInteractor,
|
||||
this._downloadImageAsBase64Interactor,
|
||||
this._transformHtmlEmailContentInteractor,
|
||||
@@ -421,7 +421,15 @@ class ComposerController extends BaseController
|
||||
|
||||
@override
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -504,6 +512,10 @@ class ComposerController extends BaseController
|
||||
final emailContent = await getContentInEditor();
|
||||
final uploadUri = _getUploadUriFromSession(session, accountId);
|
||||
|
||||
final composerIndex = composerId != null
|
||||
? mailboxDashBoardController.composerManager.getComposerIndex(composerId!)
|
||||
: null;
|
||||
|
||||
return CreateEmailRequest(
|
||||
session: session,
|
||||
accountId: accountId,
|
||||
@@ -531,6 +543,8 @@ class ComposerController extends BaseController
|
||||
emailSendingQueue: arguments.sendingEmail,
|
||||
displayMode: screenDisplayMode.value,
|
||||
uploadUri: uploadUri,
|
||||
composerIndex: composerIndex,
|
||||
composerId: composerId,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1363,9 +1377,12 @@ class ComposerController extends BaseController
|
||||
|
||||
isEmailChanged.value = draftEmailHash != emptyDraftEmailHash;
|
||||
|
||||
if (composerArguments.value?.emailActionType == EmailActionType.compose ||
|
||||
composerArguments.value?.emailActionType == EmailActionType.editDraft) {
|
||||
final emailActionType = composerArguments.value?.emailActionType;
|
||||
if (emailActionType == EmailActionType.compose
|
||||
|| emailActionType == EmailActionType.editDraft) {
|
||||
_savedEmailDraftHash = draftEmailHash;
|
||||
} else if (emailActionType == EmailActionType.reopenComposerBrowser) {
|
||||
_savedEmailDraftHash = emptyDraftEmailHash;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1468,7 +1485,7 @@ class ComposerController extends BaseController
|
||||
required AccountId accountId,
|
||||
required String downloadUrl
|
||||
}) {
|
||||
_restoreEmailInlineImagesInteractor = getBinding<RestoreEmailInlineImagesInteractor>();
|
||||
_restoreEmailInlineImagesInteractor = getBinding<RestoreEmailInlineImagesInteractor>(tag: composerId);
|
||||
if (_restoreEmailInlineImagesInteractor == null) return;
|
||||
consumeState(_restoreEmailInlineImagesInteractor!.execute(
|
||||
htmlContent: htmlContent,
|
||||
|
||||
@@ -30,6 +30,27 @@ class ComposerManager extends GetxController {
|
||||
_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) {
|
||||
log('ComposerManager::removeComposer:Id = $id');
|
||||
if (!composers.containsKey(id)) return;
|
||||
@@ -252,6 +273,8 @@ class ComposerManager extends GetxController {
|
||||
.toList();
|
||||
}
|
||||
|
||||
int getComposerIndex(String id) => composerIdsQueue.toList().indexOf(id);
|
||||
|
||||
void showComposerIfHidden(String composerId) {
|
||||
log('ComposerManager::showComposerIfHidden:Id = $composerId');
|
||||
if (!composers.containsKey(composerId)) return;
|
||||
|
||||
@@ -39,6 +39,8 @@ class CreateEmailRequest with EquatableMixin {
|
||||
final SendingEmail? emailSendingQueue;
|
||||
final ScreenDisplayMode displayMode;
|
||||
final Uri? uploadUri;
|
||||
final int? composerIndex;
|
||||
final String? composerId;
|
||||
|
||||
CreateEmailRequest({
|
||||
required this.session,
|
||||
@@ -67,6 +69,8 @@ class CreateEmailRequest with EquatableMixin {
|
||||
this.emailSendingQueue,
|
||||
this.displayMode = ScreenDisplayMode.normal,
|
||||
this.uploadUri,
|
||||
this.composerIndex,
|
||||
this.composerId,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -97,5 +101,7 @@ class CreateEmailRequest with EquatableMixin {
|
||||
emailSendingQueue,
|
||||
displayMode,
|
||||
uploadUri,
|
||||
composerIndex,
|
||||
composerId,
|
||||
];
|
||||
}
|
||||
Reference in New Issue
Block a user