TF-1360 Fix can not add data to stream controller when re-login

This commit is contained in:
dab246
2023-01-09 14:11:19 +07:00
committed by Dat H. Pham
parent d2f03a9567
commit eadc0c4ddc
20 changed files with 260 additions and 148 deletions
@@ -5,7 +5,6 @@ import 'package:model/email/presentation_email.dart';
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
class DashBoardAction extends UIAction {
static final idle = DashBoardAction();
@@ -106,13 +105,6 @@ class ClearAllFieldOfAdvancedSearchAction extends DashBoardAction {
List<Object?> get props => [];
}
class SelectMailboxDefaultAction extends DashBoardAction {
SelectMailboxDefaultAction();
@override
List<Object?> get props => [];
}
class SelectEmailByIdAction extends DashBoardAction {
final NavigationRouter navigationRouter;
@@ -131,24 +123,4 @@ class SearchEmailByQueryAction extends DashBoardAction {
@override
List<Object?> get props => [navigationRouter];
}
class RefreshChangeEmailAction extends DashBoardAction {
final jmap.State? newState;
RefreshChangeEmailAction(this.newState);
@override
List<Object?> get props => [newState];
}
class RefreshChangeMailboxAction extends DashBoardAction {
final jmap.State? newState;
RefreshChangeMailboxAction(this.newState);
@override
List<Object?> get props => [newState];
}
@@ -20,6 +20,8 @@ import 'package:tmail_ui_user/features/email/domain/usecases/delete_multiple_ema
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_read_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_star_email_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/email/presentation/controller/email_supervisor_controller.dart';
import 'package:tmail_ui_user/features/email/presentation/controller/single_email_controller.dart';
import 'package:tmail_ui_user/features/email/presentation/email_bindings.dart';
import 'package:tmail_ui_user/features/login/data/datasource/account_datasource.dart';
import 'package:tmail_ui_user/features/login/data/datasource/authentication_oidc_datasource.dart';
@@ -51,6 +53,7 @@ import 'package:tmail_ui_user/features/mailbox/data/repository/mailbox_repositor
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/mark_as_mailbox_read_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_bindings.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/search_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/datasource_impl/search_datasource_impl.dart';
@@ -92,6 +95,7 @@ import 'package:tmail_ui_user/features/thread/domain/usecases/move_multiple_emai
import 'package:tmail_ui_user/features/thread/domain/usecases/search_email_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/search_more_email_interactor.dart';
import 'package:tmail_ui_user/features/thread/presentation/thread_bindings.dart';
import 'package:tmail_ui_user/features/thread/presentation/thread_controller.dart';
import 'package:tmail_ui_user/main/exceptions/cache_exception_thrower.dart';
import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
@@ -292,4 +296,12 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.lazyPut(() => AuthenticationOIDCRepositoryImpl(Get.find<AuthenticationOIDCDataSource>()));
Get.lazyPut(() => ComposerCacheRepositoryImpl(Get.find<SessionStorageComposerDatasource>()));
}
void deleteController() {
Get.delete<MailboxController>();
Get.delete<ThreadController>();
Get.delete<SingleEmailController>();
Get.delete<EmailSupervisorController>();
Get.delete<DownloadController>();
}
}
@@ -38,11 +38,13 @@ import 'package:tmail_ui_user/features/email/domain/usecases/delete_multiple_ema
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_read_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_star_email_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart';
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/delete_authority_oidc_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/mark_as_mailbox_read_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_action.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_app_dashboard_configuration_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_composer_cache_state.dart';
@@ -50,6 +52,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_ema
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_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/bindings/mailbox_dashboard_bindings.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/download/download_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
@@ -74,7 +77,6 @@ import 'package:tmail_ui_user/features/push_notification/domain/usecases/delete_
import 'package:tmail_ui_user/features/push_notification/domain/usecases/delete_mailbox_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/notification/local_notification_manager.dart';
import 'package:tmail_ui_user/features/push_notification/presentation/services/fcm_service.dart';
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart';
@@ -137,6 +139,8 @@ class MailboxDashBoardController extends ReloadableController {
final accountId = Rxn<AccountId>();
final userProfile = Rxn<UserProfile>();
final dashBoardAction = Rxn<UIAction>();
final mailboxUIAction = Rxn<MailboxUIAction>();
final emailUIAction = Rxn<EmailUIAction>();
final dashboardRoute = DashboardRoutes.waiting.obs;
final appInformation = Rxn<PackageInfo>();
final currentSelectMode = SelectMode.INACTIVE.obs;
@@ -166,7 +170,7 @@ class MailboxDashBoardController extends ReloadableController {
StreamController<RefreshActionViewEvent>.broadcast();
final _notificationManager = LocalNotificationManager.instance;
final _fcmController = FcmController.instance;
final _fcmService = FcmService.instance;
MailboxDashBoardController(
LogoutOidcInteractor logoutOidcInteractor,
@@ -245,10 +249,10 @@ class MailboxDashBoardController extends ReloadableController {
icon: _imagePaths.icSendToast);
}
} else if (success is GetEmailStateToRefreshSuccess) {
dispatchAction(RefreshChangeEmailAction(success.storedState));
dispatchEmailUIAction(RefreshChangeEmailAction(success.storedState));
_deleteEmailStateToRefreshAction();
} else if (success is GetMailboxStateToRefreshSuccess) {
dispatchAction(RefreshChangeMailboxAction(success.storedState));
dispatchMailboxUIAction(RefreshChangeMailboxAction(success.storedState));
_deleteMailboxStateToRefreshAction();
}
}
@@ -367,6 +371,10 @@ class MailboxDashBoardController extends ReloadableController {
.debounceTime(const Duration(milliseconds: FcmService.durationMessageComing))
.listen(_handleRefreshActionWhenBackToApp);
_registerLocalNotificationStreamListener();
}
void _registerLocalNotificationStreamListener() {
_notificationManager.localNotificationStream.listen(_handleClickLocalNotificationOnForeground);
}
@@ -425,6 +433,17 @@ class MailboxDashBoardController extends ReloadableController {
}
}
@override
void injectFCMBindings(Session? session, AccountId? accountId) async {
try {
super.injectFCMBindings(session, accountId);
await LocalNotificationManager.instance.recreateStreamController();
_registerLocalNotificationStreamListener();
} catch (e) {
logError('MailboxDashBoardController::injectFCMBindings(): $e');
}
}
Future<void> _getAppVersion() async {
final info = await PackageInfo.fromPlatform();
log('MailboxDashBoardController::_getAppVersion(): ${info.version}');
@@ -1086,6 +1105,16 @@ class MailboxDashBoardController extends ReloadableController {
dashBoardAction.value = action;
}
void dispatchMailboxUIAction(MailboxUIAction newAction) {
log('MailboxDashBoardController::dispatchMailboxUIAction():newAction: ${newAction.runtimeType}');
mailboxUIAction.value = newAction;
}
void dispatchEmailUIAction(EmailUIAction newAction) {
log('MailboxDashBoardController::dispatchEmailUIAction():newAction: ${newAction.runtimeType}');
emailUIAction.value = newAction;
}
void openComposerOverlay(RouterArguments? arguments) {
routerArguments = arguments;
ComposerBindings().dependencies();
@@ -1213,6 +1242,14 @@ class MailboxDashBoardController extends ReloadableController {
dashBoardAction.value = DashBoardAction.idle;
}
void clearMailboxUIAction() {
mailboxUIAction.value = MailboxUIAction.idle;
}
void clearEmailUIAction() {
emailUIAction.value = EmailUIAction.idle;
}
void goToSettings() async {
if (isDrawerOpen) {
closeMailboxMenuDrawer();
@@ -1424,8 +1461,8 @@ class MailboxDashBoardController extends ReloadableController {
Get.until((route) => Get.currentRoute == AppRoutes.dashboard);
}
void handleOnFocusGained() {
log('MailboxDashBoardController::handleOnFocusGained():');
void handleOnForegroundGained() {
log('MailboxDashBoardController::handleOnForegroundGained():');
if (!BuildUtils.isWeb) {
_updateTheme();
}
@@ -1446,9 +1483,9 @@ class MailboxDashBoardController extends ReloadableController {
_fileReceiveManagerStreamSubscription.cancel();
_progressStateController.close();
_refreshActionEventController.close();
Get.delete<DownloadController>();
_notificationManager.dispose();
_fcmController.dispose();
_notificationManager.closeStream();
_fcmService.closeStream();
MailboxDashBoardBindings().deleteController();
super.onClose();
}
}
@@ -29,7 +29,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
);
return FocusDetector(
onFocusGained: controller.handleOnFocusGained,
onForegroundGained: controller.handleOnForegroundGained,
child: Scaffold(
drawerEnableOpenDragGesture: responsiveUtils.hasLeftMenuDrawerActive(context),
body: Obx(() {