From b37de97d6bbd199a10d7d2cbe70b6fe28f607a81 Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 30 Nov 2022 12:09:00 +0700 Subject: [PATCH] TF-437 Handle `Mailbox/changes` in background/terminated --- .../mailbox_dashboard_controller.dart | 9 +++++++ .../get_mailbox_state_to_refresh_state.dart | 25 +++++++++++++++++++ ...t_mailbox_state_to_refresh_interactor.dart | 22 ++++++++++++++++ .../bindings/fcm_interactor_bindings.dart | 3 +++ 4 files changed, 59 insertions(+) create mode 100644 lib/features/push_notification/domain/state/get_mailbox_state_to_refresh_state.dart create mode 100644 lib/features/push_notification/domain/usecases/get_mailbox_state_to_refresh_interactor.dart diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index b1cad58e3..b90d17f9e 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -68,8 +68,10 @@ import 'package:tmail_ui_user/features/manage_account/presentation/model/account import 'package:tmail_ui_user/features/manage_account/presentation/model/manage_account_arguments.dart'; import 'package:tmail_ui_user/features/network_status_handle/presentation/network_connnection_controller.dart'; import 'package:tmail_ui_user/features/push_notification/domain/state/get_email_state_to_refresh_state.dart'; +import 'package:tmail_ui_user/features/push_notification/domain/state/get_mailbox_state_to_refresh_state.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/delete_email_state_to_refresh_interactor.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_email_state_to_refresh_interactor.dart'; +import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_mailbox_state_to_refresh_interactor.dart'; import 'package:tmail_ui_user/features/push_notification/presentation/controller/fcm_controller.dart'; import 'package:tmail_ui_user/features/push_notification/presentation/services/fcm_service.dart'; import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart'; @@ -118,6 +120,7 @@ class MailboxDashBoardController extends ReloadableController { UpdateVacationInteractor? _updateVacationInteractor; GetEmailStateToRefreshInteractor? _getEmailStateToRefreshInteractor; DeleteEmailStateToRefreshInteractor? _deleteEmailStateToRefreshInteractor; + GetMailboxStateToRefreshInteractor? _getMailboxStateToRefreshInteractor; final scaffoldKey = GlobalKey(); final selectedMailbox = Rxn(); @@ -231,6 +234,8 @@ class MailboxDashBoardController extends ReloadableController { } else if (success is GetEmailStateToRefreshSuccess) { dispatchAction(RefreshChangeEmailAction(success.storedState)); _deleteEmailStateToRefreshAction(); + } else if (success is GetMailboxStateToRefreshSuccess) { + dispatchAction(RefreshChangeMailboxAction(success.storedState)); } } ); @@ -1287,12 +1292,16 @@ class MailboxDashBoardController extends ReloadableController { log('MailboxDashBoardController::_handleRefreshActionWhenBackToApp():'); try { _getEmailStateToRefreshInteractor = getBinding(); + _getMailboxStateToRefreshInteractor = getBinding(); } catch (e) { logError('MailboxDashBoardController::_handleRefreshActionWhenBackToApp(): $e'); } if (_getEmailStateToRefreshInteractor != null) { consumeState(_getEmailStateToRefreshInteractor!.execute()); } + if (_getMailboxStateToRefreshInteractor != null) { + consumeState(_getMailboxStateToRefreshInteractor!.execute()); + } } void _deleteEmailStateToRefreshAction() { diff --git a/lib/features/push_notification/domain/state/get_mailbox_state_to_refresh_state.dart b/lib/features/push_notification/domain/state/get_mailbox_state_to_refresh_state.dart new file mode 100644 index 000000000..f5adaff5d --- /dev/null +++ b/lib/features/push_notification/domain/state/get_mailbox_state_to_refresh_state.dart @@ -0,0 +1,25 @@ + +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; + +class GetMailboxStateToRefreshLoading extends UIState {} + +class GetMailboxStateToRefreshSuccess extends UIState { + + final jmap.State storedState; + + GetMailboxStateToRefreshSuccess(this.storedState); + + @override + List get props => [storedState]; +} + +class GetMailboxStateToRefreshFailure extends FeatureFailure { + final dynamic exception; + + GetMailboxStateToRefreshFailure(this.exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/push_notification/domain/usecases/get_mailbox_state_to_refresh_interactor.dart b/lib/features/push_notification/domain/usecases/get_mailbox_state_to_refresh_interactor.dart new file mode 100644 index 000000000..28d8e30d3 --- /dev/null +++ b/lib/features/push_notification/domain/usecases/get_mailbox_state_to_refresh_interactor.dart @@ -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:fcm/model/type_name.dart'; +import 'package:tmail_ui_user/features/push_notification/domain/repository/fcm_repository.dart'; +import 'package:tmail_ui_user/features/push_notification/domain/state/get_mailbox_state_to_refresh_state.dart'; + +class GetMailboxStateToRefreshInteractor { + final FCMRepository _fcmRepository; + + GetMailboxStateToRefreshInteractor(this._fcmRepository); + + Stream> execute() async* { + try { + yield Right(GetMailboxStateToRefreshLoading()); + final storedState = await _fcmRepository.getStateToRefresh(TypeName.mailboxType); + yield Right(GetMailboxStateToRefreshSuccess(storedState)); + } catch (e) { + yield Left(GetMailboxStateToRefreshFailure(e)); + } + } +} \ No newline at end of file diff --git a/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart b/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart index ca36ab09c..0b9f9abd3 100644 --- a/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart +++ b/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart @@ -13,6 +13,8 @@ import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_dev import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_email_changes_to_push_notification_interactor.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_email_state_to_refresh_interactor.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_firebase_subscription_interactor.dart'; +import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_fcm_token_cache_interactor.dart'; +import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_mailbox_state_to_refresh_interactor.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_stored_email_delivery_state_interactor.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/register_new_token_interactor.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/store_device_id_interactor.dart'; @@ -64,6 +66,7 @@ class FcmInteractorBindings extends InteractorsBindings { Get.lazyPut(() => RegisterNewTokenInteractor(Get.find())); Get.lazyPut(() => GetDeviceIdInteractor(Get.find())); Get.lazyPut(() => StoreMailboxStateToRefreshInteractor(Get.find())); + Get.lazyPut(() => GetMailboxStateToRefreshInteractor(Get.find())); } @override