save mail when reload page

This commit is contained in:
ManhNTX
2022-07-11 01:40:54 +07:00
committed by Dat H. Pham
parent 1cde4b5d5b
commit 2add68d760
13 changed files with 289 additions and 0 deletions
@@ -29,6 +29,8 @@ import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
import 'package:tmail_ui_user/features/email/data/repository/email_repository_impl.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/get_email_content_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_cache_on_web.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_email_cache_on_web.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_account_datasource.dart';
import 'package:tmail_ui_user/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart';
@@ -141,6 +143,8 @@ class ComposerBindings extends BaseBindings {
Get.find<UpdateEmailDraftsInteractor>(),
Get.find<GetAllIdentitiesInteractor>(),
Get.find<UploadController>(),
Get.find<RemoveEmailCacheOnWebInteractor>(),
Get.find<SaveEmailCacheOnWebInteractor>(),
));
}
@@ -39,6 +39,8 @@ import 'package:tmail_ui_user/features/composer/presentation/model/screen_displa
import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/get_email_content_interactor.dart';
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_cache_on_web.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_email_cache_on_web.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_identities_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
@@ -49,6 +51,7 @@ import 'package:tmail_ui_user/features/upload/presentation/controller/upload_con
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:uuid/uuid.dart';
import 'package:universal_html/html.dart' as html;
class ComposerController extends BaseController {
@@ -82,6 +85,8 @@ class ComposerController extends BaseController {
final UpdateEmailDraftsInteractor _updateEmailDraftsInteractor;
final GetAllIdentitiesInteractor _getAllIdentitiesInteractor;
final UploadController uploadController;
final RemoveEmailCacheOnWebInteractor _removeEmailCacheOnWebInteractor;
final SaveEmailCacheOnWebInteractor _saveEmailCacheOnWebInteractor;
List<EmailAddress> listToEmailAddress = <EmailAddress>[];
List<EmailAddress> listCcEmailAddress = <EmailAddress>[];
@@ -148,6 +153,8 @@ class ComposerController extends BaseController {
this._updateEmailDraftsInteractor,
this._getAllIdentitiesInteractor,
this.uploadController,
this._removeEmailCacheOnWebInteractor,
this._saveEmailCacheOnWebInteractor,
);
@override
@@ -157,6 +164,8 @@ class ComposerController extends BaseController {
WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
await FkUserAgent.init();
});
} else {
_listenBrowserTabRefresh();
}
}
@@ -236,6 +245,20 @@ class ComposerController extends BaseController {
popBack();
}
void _listenBrowserTabRefresh() {
html.window.onBeforeUnload.listen((event) async {
final userProfile = mailboxDashBoardController.userProfile.value;
_removeEmailCacheOnWebInteractor.execute();
if (userProfile != null) {
final draftEmail = await _generateEmail(
mailboxDashBoardController.mapDefaultMailboxId,
userProfile,
);
_saveEmailCacheOnWebInteractor.execute(draftEmail);
}
});
}
void _initEmail() {
final arguments = kIsWeb ? mailboxDashBoardController.routerArguments : Get.arguments;
if (arguments is ComposerArguments) {