TF-1360 Fix can not add data to stream controller when re-login
This commit is contained in:
@@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||||
|
|
||||||
|
class EmailUIAction extends UIAction {
|
||||||
|
static final idle = EmailUIAction();
|
||||||
|
|
||||||
|
EmailUIAction() : super();
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [];
|
||||||
|
}
|
||||||
|
|
||||||
|
class RefreshChangeEmailAction extends EmailUIAction {
|
||||||
|
final jmap.State? newState;
|
||||||
|
|
||||||
|
RefreshChangeEmailAction(this.newState);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [newState];
|
||||||
|
}
|
||||||
@@ -50,8 +50,8 @@ import 'package:tmail_ui_user/features/email/domain/usecases/send_receipt_to_sen
|
|||||||
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/widgets/email_address_bottom_sheet_builder.dart';
|
import 'package:tmail_ui_user/features/email/presentation/widgets/email_address_bottom_sheet_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/widgets/email_address_dialog_builder.dart';
|
import 'package:tmail_ui_user/features/email/presentation/widgets/email_address_dialog_builder.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/presentation/model/mailbox_actions.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.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/dashboard_routes.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.dart';
|
||||||
@@ -101,7 +101,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
EmailId? _currentEmailId;
|
EmailId? _currentEmailId;
|
||||||
Identity? _identitySelected;
|
Identity? _identitySelected;
|
||||||
List<EmailContent>? initialEmailContents;
|
List<EmailContent>? initialEmailContents;
|
||||||
late Worker selectedEmailWorker, accountIdWorker;
|
|
||||||
|
|
||||||
final StreamController<Either<Failure, Success>> _downloadProgressStateController =
|
final StreamController<Either<Failure, Success>> _downloadProgressStateController =
|
||||||
StreamController<Either<Failure, Success>>.broadcast();
|
StreamController<Either<Failure, Success>>.broadcast();
|
||||||
@@ -127,7 +126,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
_registerListenerWorker();
|
_registerObxStreamListener();
|
||||||
_listenDownloadAttachmentProgressState();
|
_listenDownloadAttachmentProgressState();
|
||||||
super.onInit();
|
super.onInit();
|
||||||
}
|
}
|
||||||
@@ -135,12 +134,11 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
_downloadProgressStateController.close();
|
_downloadProgressStateController.close();
|
||||||
_unregisterListenerWorker();
|
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _registerListenerWorker() {
|
void _registerObxStreamListener() {
|
||||||
accountIdWorker = ever(mailboxDashBoardController.accountId, (accountId) {
|
ever(mailboxDashBoardController.accountId, (accountId) {
|
||||||
if (accountId is AccountId) {
|
if (accountId is AccountId) {
|
||||||
_injectAndGetInteractorBindings(
|
_injectAndGetInteractorBindings(
|
||||||
mailboxDashBoardController.sessionCurrent,
|
mailboxDashBoardController.sessionCurrent,
|
||||||
@@ -149,7 +147,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
selectedEmailWorker = ever<PresentationEmail?>(
|
ever<PresentationEmail?>(
|
||||||
mailboxDashBoardController.selectedEmail,
|
mailboxDashBoardController.selectedEmail,
|
||||||
_handleOpenEmailDetailedView
|
_handleOpenEmailDetailedView
|
||||||
);
|
);
|
||||||
@@ -160,11 +158,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
&& emailSupervisorController.currentListEmail.listEmailIds.contains(selectedEmail.id);
|
&& emailSupervisorController.currentListEmail.listEmailIds.contains(selectedEmail.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _unregisterListenerWorker() {
|
|
||||||
accountIdWorker.dispose();
|
|
||||||
selectedEmailWorker.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
void _handleOpenEmailDetailedView(PresentationEmail? selectedEmail) {
|
void _handleOpenEmailDetailedView(PresentationEmail? selectedEmail) {
|
||||||
if (selectedEmail == null || _currentEmailId == selectedEmail.id) {
|
if (selectedEmail == null || _currentEmailId == selectedEmail.id) {
|
||||||
log('SingleEmailController::_handleOpenEmailDetailedView(): email unselected');
|
log('SingleEmailController::_handleOpenEmailDetailedView(): email unselected');
|
||||||
@@ -1030,7 +1023,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
} else {
|
} else {
|
||||||
mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread);
|
mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread);
|
||||||
if (isOpenEmailNotMailboxFromRoute) {
|
if (isOpenEmailNotMailboxFromRoute) {
|
||||||
mailboxDashBoardController.dispatchAction(SelectMailboxDefaultAction());
|
mailboxDashBoardController.dispatchMailboxUIAction(SelectMailboxDefaultAction());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
|
||||||
|
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||||
|
|
||||||
|
class MailboxUIAction extends UIAction {
|
||||||
|
static final idle = MailboxUIAction();
|
||||||
|
|
||||||
|
MailboxUIAction() : super();
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [];
|
||||||
|
}
|
||||||
|
|
||||||
|
class SelectMailboxDefaultAction extends MailboxUIAction {
|
||||||
|
SelectMailboxDefaultAction();
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [];
|
||||||
|
}
|
||||||
|
|
||||||
|
class RefreshChangeMailboxAction extends MailboxUIAction {
|
||||||
|
final jmap.State? newState;
|
||||||
|
|
||||||
|
RefreshChangeMailboxAction(this.newState);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [newState];
|
||||||
|
}
|
||||||
@@ -43,6 +43,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/usecases/move_mailbox_inte
|
|||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/rename_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/rename_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/search_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/search_mailbox_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/presentation/model/mailbox_actions.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories_expand_mode.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories_expand_mode.dart';
|
||||||
@@ -105,11 +106,6 @@ class MailboxController extends BaseMailboxController {
|
|||||||
jmap.State? _currentMailboxState;
|
jmap.State? _currentMailboxState;
|
||||||
List<String> listMailboxNameAsStringExist = <String>[];
|
List<String> listMailboxNameAsStringExist = <String>[];
|
||||||
|
|
||||||
late Worker accountIdWorker,
|
|
||||||
viewStateWorker,
|
|
||||||
dashboardActionWorker,
|
|
||||||
routerParametersWorker;
|
|
||||||
|
|
||||||
PresentationMailbox? get selectedMailbox => mailboxDashBoardController.selectedMailbox.value;
|
PresentationMailbox? get selectedMailbox => mailboxDashBoardController.selectedMailbox.value;
|
||||||
|
|
||||||
MailboxController(
|
MailboxController(
|
||||||
@@ -126,7 +122,7 @@ class MailboxController extends BaseMailboxController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
_registerListenerWorker();
|
_registerObxStreamListener();
|
||||||
_registerSearchFocusListener();
|
_registerSearchFocusListener();
|
||||||
super.onInit();
|
super.onInit();
|
||||||
}
|
}
|
||||||
@@ -147,7 +143,6 @@ class MailboxController extends BaseMailboxController {
|
|||||||
searchFocus.dispose();
|
searchFocus.dispose();
|
||||||
_openMailboxEventController.close();
|
_openMailboxEventController.close();
|
||||||
mailboxListScrollController.dispose();
|
mailboxListScrollController.dispose();
|
||||||
_unregisterListenerWorker();
|
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,19 +200,19 @@ class MailboxController extends BaseMailboxController {
|
|||||||
isMailboxListScrollable.value = mailboxListScrollController.hasClients && mailboxListScrollController.position.maxScrollExtent > 0;
|
isMailboxListScrollable.value = mailboxListScrollController.hasClients && mailboxListScrollController.position.maxScrollExtent > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _registerListenerWorker() {
|
void _registerObxStreamListener() {
|
||||||
accountIdWorker = ever(mailboxDashBoardController.accountId, (accountId) {
|
ever(mailboxDashBoardController.accountId, (accountId) {
|
||||||
if (accountId is AccountId) {
|
if (accountId is AccountId) {
|
||||||
getAllMailboxAction(accountId);
|
getAllMailboxAction(accountId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
routerParametersWorker = ever<Map<String, String?>?>(
|
ever<Map<String, String?>?>(
|
||||||
mailboxDashBoardController.routerParameters,
|
mailboxDashBoardController.routerParameters,
|
||||||
_handleNavigationRouteParameters
|
_handleNavigationRouteParameters
|
||||||
);
|
);
|
||||||
|
|
||||||
viewStateWorker = ever(mailboxDashBoardController.viewState, (state) {
|
ever(mailboxDashBoardController.viewState, (state) {
|
||||||
if (state is Either) {
|
if (state is Either) {
|
||||||
state.fold((failure) => null, (success) {
|
state.fold((failure) => null, (success) {
|
||||||
if (success is MarkAsMultipleEmailReadAllSuccess) {
|
if (success is MarkAsMultipleEmailReadAllSuccess) {
|
||||||
@@ -257,18 +252,23 @@ class MailboxController extends BaseMailboxController {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
dashboardActionWorker = ever(mailboxDashBoardController.dashBoardAction, (action) {
|
ever(mailboxDashBoardController.dashBoardAction, (action) {
|
||||||
log('MailboxController::_registerListenerWorker():action: $action');
|
|
||||||
if (action is ClearSearchEmailAction) {
|
if (action is ClearSearchEmailAction) {
|
||||||
_switchBackToMailboxDefault();
|
_switchBackToMailboxDefault();
|
||||||
} else if (action is SelectMailboxDefaultAction) {
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
ever(mailboxDashBoardController.mailboxUIAction, (action) {
|
||||||
|
if (action is SelectMailboxDefaultAction) {
|
||||||
if (mailboxDashBoardController.selectedMailbox.value == null) {
|
if (mailboxDashBoardController.selectedMailbox.value == null) {
|
||||||
_switchBackToMailboxDefault();
|
_switchBackToMailboxDefault();
|
||||||
}
|
}
|
||||||
|
mailboxDashBoardController.clearMailboxUIAction();
|
||||||
} else if (action is RefreshChangeMailboxAction) {
|
} else if (action is RefreshChangeMailboxAction) {
|
||||||
if (action.newState != _currentMailboxState) {
|
if (action.newState != _currentMailboxState) {
|
||||||
refreshMailboxChanges();
|
refreshMailboxChanges();
|
||||||
}
|
}
|
||||||
|
mailboxDashBoardController.clearMailboxUIAction();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -284,13 +284,6 @@ class MailboxController extends BaseMailboxController {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void _unregisterListenerWorker() {
|
|
||||||
accountIdWorker.dispose();
|
|
||||||
viewStateWorker.dispose();
|
|
||||||
dashboardActionWorker.dispose();
|
|
||||||
routerParametersWorker.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
void _initCollapseMailboxCategories() {
|
void _initCollapseMailboxCategories() {
|
||||||
if (kIsWeb && currentContext != null
|
if (kIsWeb && currentContext != null
|
||||||
&& (_responsiveUtils.isMobile(currentContext!) || _responsiveUtils.isTablet(currentContext!))) {
|
&& (_responsiveUtils.isMobile(currentContext!) || _responsiveUtils.isTablet(currentContext!))) {
|
||||||
|
|||||||
@@ -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/base/action/ui_action.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.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:tmail_ui_user/main/routes/navigation_router.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
|
||||||
|
|
||||||
class DashBoardAction extends UIAction {
|
class DashBoardAction extends UIAction {
|
||||||
static final idle = DashBoardAction();
|
static final idle = DashBoardAction();
|
||||||
@@ -106,13 +105,6 @@ class ClearAllFieldOfAdvancedSearchAction extends DashBoardAction {
|
|||||||
List<Object?> get props => [];
|
List<Object?> get props => [];
|
||||||
}
|
}
|
||||||
|
|
||||||
class SelectMailboxDefaultAction extends DashBoardAction {
|
|
||||||
SelectMailboxDefaultAction();
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object?> get props => [];
|
|
||||||
}
|
|
||||||
|
|
||||||
class SelectEmailByIdAction extends DashBoardAction {
|
class SelectEmailByIdAction extends DashBoardAction {
|
||||||
|
|
||||||
final NavigationRouter navigationRouter;
|
final NavigationRouter navigationRouter;
|
||||||
@@ -131,24 +123,4 @@ class SearchEmailByQueryAction extends DashBoardAction {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [navigationRouter];
|
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_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/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/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/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/account_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/datasource/authentication_oidc_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/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/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_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/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/session_storage_composer_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/search_datasource_impl.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_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/usecases/search_more_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_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/cache_exception_thrower.dart';
|
||||||
import 'package:tmail_ui_user/main/exceptions/remote_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(() => AuthenticationOIDCRepositoryImpl(Get.find<AuthenticationOIDCDataSource>()));
|
||||||
Get.lazyPut(() => ComposerCacheRepositoryImpl(Get.find<SessionStorageComposerDatasource>()));
|
Get.lazyPut(() => ComposerCacheRepositoryImpl(Get.find<SessionStorageComposerDatasource>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void deleteController() {
|
||||||
|
Get.delete<MailboxController>();
|
||||||
|
Get.delete<ThreadController>();
|
||||||
|
Get.delete<SingleEmailController>();
|
||||||
|
Get.delete<EmailSupervisorController>();
|
||||||
|
Get.delete<DownloadController>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+46
-9
@@ -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_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/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/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/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/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/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/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/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/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_app_dashboard_configuration_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/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/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/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/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/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/download/download_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_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/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_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/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/notification/local_notification_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/services/fcm_service.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';
|
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 accountId = Rxn<AccountId>();
|
||||||
final userProfile = Rxn<UserProfile>();
|
final userProfile = Rxn<UserProfile>();
|
||||||
final dashBoardAction = Rxn<UIAction>();
|
final dashBoardAction = Rxn<UIAction>();
|
||||||
|
final mailboxUIAction = Rxn<MailboxUIAction>();
|
||||||
|
final emailUIAction = Rxn<EmailUIAction>();
|
||||||
final dashboardRoute = DashboardRoutes.waiting.obs;
|
final dashboardRoute = DashboardRoutes.waiting.obs;
|
||||||
final appInformation = Rxn<PackageInfo>();
|
final appInformation = Rxn<PackageInfo>();
|
||||||
final currentSelectMode = SelectMode.INACTIVE.obs;
|
final currentSelectMode = SelectMode.INACTIVE.obs;
|
||||||
@@ -166,7 +170,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
StreamController<RefreshActionViewEvent>.broadcast();
|
StreamController<RefreshActionViewEvent>.broadcast();
|
||||||
|
|
||||||
final _notificationManager = LocalNotificationManager.instance;
|
final _notificationManager = LocalNotificationManager.instance;
|
||||||
final _fcmController = FcmController.instance;
|
final _fcmService = FcmService.instance;
|
||||||
|
|
||||||
MailboxDashBoardController(
|
MailboxDashBoardController(
|
||||||
LogoutOidcInteractor logoutOidcInteractor,
|
LogoutOidcInteractor logoutOidcInteractor,
|
||||||
@@ -245,10 +249,10 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
icon: _imagePaths.icSendToast);
|
icon: _imagePaths.icSendToast);
|
||||||
}
|
}
|
||||||
} else if (success is GetEmailStateToRefreshSuccess) {
|
} else if (success is GetEmailStateToRefreshSuccess) {
|
||||||
dispatchAction(RefreshChangeEmailAction(success.storedState));
|
dispatchEmailUIAction(RefreshChangeEmailAction(success.storedState));
|
||||||
_deleteEmailStateToRefreshAction();
|
_deleteEmailStateToRefreshAction();
|
||||||
} else if (success is GetMailboxStateToRefreshSuccess) {
|
} else if (success is GetMailboxStateToRefreshSuccess) {
|
||||||
dispatchAction(RefreshChangeMailboxAction(success.storedState));
|
dispatchMailboxUIAction(RefreshChangeMailboxAction(success.storedState));
|
||||||
_deleteMailboxStateToRefreshAction();
|
_deleteMailboxStateToRefreshAction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -367,6 +371,10 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
.debounceTime(const Duration(milliseconds: FcmService.durationMessageComing))
|
.debounceTime(const Duration(milliseconds: FcmService.durationMessageComing))
|
||||||
.listen(_handleRefreshActionWhenBackToApp);
|
.listen(_handleRefreshActionWhenBackToApp);
|
||||||
|
|
||||||
|
_registerLocalNotificationStreamListener();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _registerLocalNotificationStreamListener() {
|
||||||
_notificationManager.localNotificationStream.listen(_handleClickLocalNotificationOnForeground);
|
_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 {
|
Future<void> _getAppVersion() async {
|
||||||
final info = await PackageInfo.fromPlatform();
|
final info = await PackageInfo.fromPlatform();
|
||||||
log('MailboxDashBoardController::_getAppVersion(): ${info.version}');
|
log('MailboxDashBoardController::_getAppVersion(): ${info.version}');
|
||||||
@@ -1086,6 +1105,16 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
dashBoardAction.value = action;
|
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) {
|
void openComposerOverlay(RouterArguments? arguments) {
|
||||||
routerArguments = arguments;
|
routerArguments = arguments;
|
||||||
ComposerBindings().dependencies();
|
ComposerBindings().dependencies();
|
||||||
@@ -1213,6 +1242,14 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
dashBoardAction.value = DashBoardAction.idle;
|
dashBoardAction.value = DashBoardAction.idle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void clearMailboxUIAction() {
|
||||||
|
mailboxUIAction.value = MailboxUIAction.idle;
|
||||||
|
}
|
||||||
|
|
||||||
|
void clearEmailUIAction() {
|
||||||
|
emailUIAction.value = EmailUIAction.idle;
|
||||||
|
}
|
||||||
|
|
||||||
void goToSettings() async {
|
void goToSettings() async {
|
||||||
if (isDrawerOpen) {
|
if (isDrawerOpen) {
|
||||||
closeMailboxMenuDrawer();
|
closeMailboxMenuDrawer();
|
||||||
@@ -1424,8 +1461,8 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
Get.until((route) => Get.currentRoute == AppRoutes.dashboard);
|
Get.until((route) => Get.currentRoute == AppRoutes.dashboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleOnFocusGained() {
|
void handleOnForegroundGained() {
|
||||||
log('MailboxDashBoardController::handleOnFocusGained():');
|
log('MailboxDashBoardController::handleOnForegroundGained():');
|
||||||
if (!BuildUtils.isWeb) {
|
if (!BuildUtils.isWeb) {
|
||||||
_updateTheme();
|
_updateTheme();
|
||||||
}
|
}
|
||||||
@@ -1446,9 +1483,9 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
_fileReceiveManagerStreamSubscription.cancel();
|
_fileReceiveManagerStreamSubscription.cancel();
|
||||||
_progressStateController.close();
|
_progressStateController.close();
|
||||||
_refreshActionEventController.close();
|
_refreshActionEventController.close();
|
||||||
Get.delete<DownloadController>();
|
_notificationManager.closeStream();
|
||||||
_notificationManager.dispose();
|
_fcmService.closeStream();
|
||||||
_fcmController.dispose();
|
MailboxDashBoardBindings().deleteController();
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -29,7 +29,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
);
|
);
|
||||||
|
|
||||||
return FocusDetector(
|
return FocusDetector(
|
||||||
onFocusGained: controller.handleOnFocusGained,
|
onForegroundGained: controller.handleOnForegroundGained,
|
||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
drawerEnableOpenDragGesture: responsiveUtils.hasLeftMenuDrawerActive(context),
|
drawerEnableOpenDragGesture: responsiveUtils.hasLeftMenuDrawerActive(context),
|
||||||
body: Obx(() {
|
body: Obx(() {
|
||||||
|
|||||||
@@ -1,20 +1,21 @@
|
|||||||
|
|
||||||
import 'package:core/utils/build_utils.dart';
|
|
||||||
import 'package:firebase_core/firebase_core.dart';
|
import 'package:firebase_core/firebase_core.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/config/firebase_options.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/config/firebase_options.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/services/fcm_receiver.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/services/fcm_receiver.dart';
|
||||||
|
import 'package:tmail_ui_user/features/push_notification/presentation/services/fcm_service.dart';
|
||||||
|
|
||||||
class FcmConfiguration {
|
class FcmConfiguration {
|
||||||
|
|
||||||
static void initialize() async {
|
static void initialize() async {
|
||||||
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
|
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
|
||||||
|
await FcmService.instance.recreateStreamController();
|
||||||
_initMessageListener();
|
_initMessageListener();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _initMessageListener() {
|
static void _initMessageListener() {
|
||||||
FcmReceiver.instance.onForegroundMessage();
|
FcmReceiver.instance.onForegroundMessage();
|
||||||
FcmReceiver.instance.onBackgroundMessage();
|
FcmReceiver.instance.onBackgroundMessage();
|
||||||
BuildUtils.isWeb ? FcmReceiver.instance.getFcmToken() : null;
|
FcmReceiver.instance.getFcmToken();
|
||||||
FcmReceiver.instance.onRefreshFcmToken();
|
FcmReceiver.instance.onRefreshFcmToken();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -47,7 +47,7 @@ class FcmController extends BaseController {
|
|||||||
GetSessionInteractor? _getSessionInteractor;
|
GetSessionInteractor? _getSessionInteractor;
|
||||||
|
|
||||||
FcmController._internal() {
|
FcmController._internal() {
|
||||||
_listenFcmMessageStream();
|
_listenFcmStream();
|
||||||
}
|
}
|
||||||
|
|
||||||
static final FcmController _instance = FcmController._internal();
|
static final FcmController _instance = FcmController._internal();
|
||||||
@@ -59,17 +59,33 @@ class FcmController extends BaseController {
|
|||||||
FcmTokenHandler.instance.initialize();
|
FcmTokenHandler.instance.initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _listenFcmMessageStream() {
|
void _listenFcmStream() async {
|
||||||
log('FcmController::_listenFcmMessageStream():');
|
await Future.wait([
|
||||||
|
listenForegroundMessageStream(),
|
||||||
|
listenBackgroundMessageStream(),
|
||||||
|
listenTokenStream()
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> listenForegroundMessageStream() {
|
||||||
FcmService.instance.foregroundMessageStream
|
FcmService.instance.foregroundMessageStream
|
||||||
.throttleTime(const Duration(milliseconds: FcmService.durationMessageComing))
|
.throttleTime(const Duration(milliseconds: FcmService.durationMessageComing))
|
||||||
.listen(_handleForegroundMessageAction);
|
.listen(_handleForegroundMessageAction);
|
||||||
|
return Future.value();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> listenBackgroundMessageStream() {
|
||||||
FcmService.instance.backgroundMessageStream
|
FcmService.instance.backgroundMessageStream
|
||||||
.throttleTime(const Duration(milliseconds: FcmService.durationMessageComing))
|
.throttleTime(const Duration(milliseconds: FcmService.durationMessageComing))
|
||||||
.listen(_handleBackgroundMessageAction);
|
.listen(_handleBackgroundMessageAction);
|
||||||
|
return Future.value();
|
||||||
|
}
|
||||||
|
|
||||||
FcmService.instance.fcmTokenStream.listen(FcmTokenHandler.instance.handle);
|
Future<void> listenTokenStream() {
|
||||||
|
FcmService.instance.fcmTokenStream
|
||||||
|
.debounceTime(const Duration(milliseconds: FcmService.durationRefreshToken))
|
||||||
|
.listen(FcmTokenHandler.instance.handleTokenAction);
|
||||||
|
return Future.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleForegroundMessageAction(RemoteMessage newRemoteMessage) {
|
void _handleForegroundMessageAction(RemoteMessage newRemoteMessage) {
|
||||||
@@ -253,13 +269,6 @@ class FcmController extends BaseController {
|
|||||||
_remoteMessageBackground = null;
|
_remoteMessageBackground = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
void dispose() {
|
|
||||||
_clearRemoteMessageBackground();
|
|
||||||
FcmService.instance.dispose();
|
|
||||||
super.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onData(Either<Failure, Success> newState) {
|
void onData(Either<Failure, Success> newState) {
|
||||||
super.onData(newState);
|
super.onData(newState);
|
||||||
|
|||||||
@@ -54,14 +54,14 @@ class FcmTokenHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle(String? token) {
|
void handleTokenAction(String? token) {
|
||||||
log('FcmTokenHandler::handle():token: $token');
|
log('FcmTokenHandler::handleTokenAction():token: $token');
|
||||||
if (token != null) {
|
if (token != null) {
|
||||||
_fcmToken = FirebaseToken(token);
|
_fcmToken = FirebaseToken(token);
|
||||||
final deviceId = FcmUtils.instance.hashTokenToDeviceId(token);
|
final deviceId = FcmUtils.instance.hashTokenToDeviceId(token);
|
||||||
_deviceClientId = DeviceClientId(deviceId);
|
_deviceClientId = DeviceClientId(deviceId);
|
||||||
log('FcmTokenHandler::handle(): fcmToken: $_fcmToken');
|
log('FcmTokenHandler::handleTokenAction(): fcmToken: $_fcmToken');
|
||||||
log('FcmTokenHandler::handle(): deviceId: $deviceId');
|
log('FcmTokenHandler::handleTokenAction(): deviceId: $deviceId');
|
||||||
_getFcmTokenFromBackend(deviceId);
|
_getFcmTokenFromBackend(deviceId);
|
||||||
} else {
|
} else {
|
||||||
_getFCMSubscriptionLocalAction();
|
_getFCMSubscriptionLocalAction();
|
||||||
@@ -171,7 +171,7 @@ class FcmTokenHandler {
|
|||||||
deviceClientId: deviceClientId,
|
deviceClientId: deviceClientId,
|
||||||
types: [TypeName.emailType, TypeName.mailboxType, TypeName.emailDelivery]
|
types: [TypeName.emailType, TypeName.mailboxType, TypeName.emailDelivery]
|
||||||
);
|
);
|
||||||
log('FcmTokenHandler::_handleSuccessViewState():firebaseSubscription: $firebaseSubscription');
|
log('FcmTokenHandler::_handleRegisterNewToken():firebaseSubscription: $firebaseSubscription');
|
||||||
_invokeRegisterNewTokenAction(RegisterNewTokenRequest(
|
_invokeRegisterNewTokenAction(RegisterNewTokenRequest(
|
||||||
generateCreationId,
|
generateCreationId,
|
||||||
firebaseSubscription
|
firebaseSubscription
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import 'package:model/email/presentation_email.dart';
|
|||||||
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/get_stored_state_email_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/get_stored_state_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/usecases/get_stored_email_state_interactor.dart';
|
import 'package:tmail_ui_user/features/email/domain/usecases/get_stored_email_state_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
|
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.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/push_notification/domain/exceptions/fcm_exception.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/exceptions/fcm_exception.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/domain/state/get_email_changes_state.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/state/get_email_changes_state.dart';
|
||||||
@@ -70,7 +70,7 @@ class EmailChangeListener extends ChangeListener {
|
|||||||
void _synchronizeEmailOnForegroundAction(jmap.State newState) {
|
void _synchronizeEmailOnForegroundAction(jmap.State newState) {
|
||||||
log('EmailChangeListener::_synchronizeEmailAction():newState: $newState');
|
log('EmailChangeListener::_synchronizeEmailAction():newState: $newState');
|
||||||
if (_dashBoardController != null) {
|
if (_dashBoardController != null) {
|
||||||
_dashBoardController!.dispatchAction(RefreshChangeEmailAction(newState));
|
_dashBoardController!.dispatchEmailUIAction(RefreshChangeEmailAction(newState));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import 'package:core/presentation/state/success.dart';
|
|||||||
import 'package:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||||
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_action.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/push_notification/domain/usecases/store_mailbox_state_to_refresh_interactor.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/usecases/store_mailbox_state_to_refresh_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/action/fcm_action.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/action/fcm_action.dart';
|
||||||
@@ -54,7 +54,7 @@ class MailboxChangeListener extends ChangeListener {
|
|||||||
void _synchronizeMailboxOnForegroundAction(jmap.State newState) {
|
void _synchronizeMailboxOnForegroundAction(jmap.State newState) {
|
||||||
log('MailboxChangeListener::_synchronizeMailboxOnForegroundAction():newState: $newState');
|
log('MailboxChangeListener::_synchronizeMailboxOnForegroundAction():newState: $newState');
|
||||||
if (_dashBoardController != null) {
|
if (_dashBoardController != null) {
|
||||||
_dashBoardController!.dispatchAction(RefreshChangeMailboxAction(newState));
|
_dashBoardController!.dispatchMailboxUIAction(RefreshChangeMailboxAction(newState));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+15
-8
@@ -11,7 +11,11 @@ import 'package:tmail_ui_user/features/push_notification/presentation/notificati
|
|||||||
|
|
||||||
class LocalNotificationManager {
|
class LocalNotificationManager {
|
||||||
|
|
||||||
LocalNotificationManager._internal();
|
late StreamController<NotificationResponse> localNotificationsController;
|
||||||
|
|
||||||
|
LocalNotificationManager._internal() {
|
||||||
|
localNotificationsController = StreamController<NotificationResponse>.broadcast();
|
||||||
|
}
|
||||||
|
|
||||||
static final LocalNotificationManager _instance = LocalNotificationManager._internal();
|
static final LocalNotificationManager _instance = LocalNotificationManager._internal();
|
||||||
|
|
||||||
@@ -22,8 +26,6 @@ class LocalNotificationManager {
|
|||||||
bool _notificationsEnabled = false;
|
bool _notificationsEnabled = false;
|
||||||
bool _isNotificationClickedOnTerminate = false;
|
bool _isNotificationClickedOnTerminate = false;
|
||||||
|
|
||||||
final StreamController<NotificationResponse> localNotificationsController = StreamController<NotificationResponse>.broadcast();
|
|
||||||
|
|
||||||
Stream<NotificationResponse> get localNotificationStream => localNotificationsController.stream;
|
Stream<NotificationResponse> get localNotificationStream => localNotificationsController.stream;
|
||||||
|
|
||||||
NotificationAppLaunchDetails? _notificationAppLaunchDetails;
|
NotificationAppLaunchDetails? _notificationAppLaunchDetails;
|
||||||
@@ -69,7 +71,9 @@ class LocalNotificationManager {
|
|||||||
void _handleReceiveNotificationResponse(NotificationResponse response) {
|
void _handleReceiveNotificationResponse(NotificationResponse response) {
|
||||||
log('LocalNotificationManager::handleReceiveNotificationResponse():payload: ${response.payload}');
|
log('LocalNotificationManager::handleReceiveNotificationResponse():payload: ${response.payload}');
|
||||||
if (response.notificationResponseType == NotificationResponseType.selectedNotification) {
|
if (response.notificationResponseType == NotificationResponseType.selectedNotification) {
|
||||||
localNotificationsController.add(response);
|
if (!localNotificationsController.isClosed) {
|
||||||
|
localNotificationsController.add(response);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,11 +175,14 @@ class LocalNotificationManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _closeStream() {
|
Future<void> recreateStreamController() {
|
||||||
localNotificationsController.close();
|
if (localNotificationsController.isClosed) {
|
||||||
|
localNotificationsController = StreamController<NotificationResponse>.broadcast();
|
||||||
|
}
|
||||||
|
return Future.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispose() {
|
void closeStream() {
|
||||||
_closeStream();
|
localNotificationsController.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,14 +1,12 @@
|
|||||||
|
|
||||||
import 'package:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
|
import 'package:core/utils/build_utils.dart';
|
||||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
|
||||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
|
||||||
import 'package:tmail_ui_user/features/push_notification/domain/exceptions/fcm_exception.dart';
|
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/services/fcm_service.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/services/fcm_service.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
@pragma('vm:entry-point')
|
@pragma('vm:entry-point')
|
||||||
Future<void> handleFirebaseBackgroundMessage(RemoteMessage message) async {
|
Future<void> handleFirebaseBackgroundMessage(RemoteMessage message) async {
|
||||||
log('FcmReceiver::handleFirebaseBackgroundMessage():messageId: ${message.messageId}');
|
|
||||||
log('FcmReceiver::handleFirebaseBackgroundMessage(): ${message.data}');
|
log('FcmReceiver::handleFirebaseBackgroundMessage(): ${message.data}');
|
||||||
FcmService.instance.handleFirebaseBackgroundMessage(message);
|
FcmService.instance.handleFirebaseBackgroundMessage(message);
|
||||||
}
|
}
|
||||||
@@ -30,12 +28,13 @@ class FcmReceiver {
|
|||||||
|
|
||||||
void getFcmToken() async {
|
void getFcmToken() async {
|
||||||
try {
|
try {
|
||||||
final token = await FirebaseMessaging.instance.getToken(vapidKey: kIsWeb ? dotenv.get('FIREBASE_WEB_VAPID_PUBLIC_KEY', fallback: '') : null);
|
final currentToken = await FirebaseMessaging.instance.getToken(vapidKey: AppUtils.fcmVapidPublicKey);
|
||||||
log('FcmReceiver::onFcmToken():token: $token');
|
log('FcmReceiver::onFcmToken():currentToken: $currentToken');
|
||||||
FcmService.instance.handleRefreshToken(token);
|
if (BuildUtils.isWeb) {
|
||||||
|
FcmService.instance.handleGetToken(currentToken);
|
||||||
|
}
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
log('FcmReceiver::onFcmToken():exception: $e');
|
log('FcmReceiver::onFcmToken():exception: $e');
|
||||||
throw NotLoadedFCMTokenException();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,44 +8,84 @@ import 'package:tmail_ui_user/features/push_notification/presentation/controller
|
|||||||
class FcmService {
|
class FcmService {
|
||||||
|
|
||||||
static const int durationMessageComing = 2000;
|
static const int durationMessageComing = 2000;
|
||||||
|
static const int durationRefreshToken = 2000;
|
||||||
|
|
||||||
final StreamController<RemoteMessage> foregroundMessageStreamController = StreamController<RemoteMessage>.broadcast();
|
late StreamController<RemoteMessage> foregroundMessageStreamController;
|
||||||
Stream<RemoteMessage> get foregroundMessageStream => foregroundMessageStreamController.stream;
|
Stream<RemoteMessage> get foregroundMessageStream => foregroundMessageStreamController.stream;
|
||||||
|
|
||||||
final StreamController<RemoteMessage> backgroundMessageStreamController = StreamController<RemoteMessage>.broadcast();
|
late StreamController<RemoteMessage> backgroundMessageStreamController;
|
||||||
Stream<RemoteMessage> get backgroundMessageStream => backgroundMessageStreamController.stream;
|
Stream<RemoteMessage> get backgroundMessageStream => backgroundMessageStreamController.stream;
|
||||||
|
|
||||||
final StreamController<String?> fcmTokenStreamController = StreamController<String?>.broadcast();
|
late StreamController<String?> fcmTokenStreamController;
|
||||||
Stream<String?> get fcmTokenStream => fcmTokenStreamController.stream;
|
Stream<String?> get fcmTokenStream => fcmTokenStreamController.stream;
|
||||||
|
|
||||||
FcmService._internal();
|
FcmService._internal() {
|
||||||
|
foregroundMessageStreamController = StreamController<RemoteMessage>.broadcast();
|
||||||
|
backgroundMessageStreamController = StreamController<RemoteMessage>.broadcast();
|
||||||
|
fcmTokenStreamController = StreamController<String?>.broadcast();
|
||||||
|
}
|
||||||
|
|
||||||
static final FcmService _instance = FcmService._internal();
|
static final FcmService _instance = FcmService._internal();
|
||||||
|
|
||||||
static FcmService get instance => _instance;
|
static FcmService get instance => _instance;
|
||||||
|
|
||||||
void handleFirebaseForegroundMessage(RemoteMessage newRemoteMessage) {
|
void handleFirebaseForegroundMessage(RemoteMessage newRemoteMessage) {
|
||||||
log('FcmService::handleFirebaseForegroundMessage():messageId: ${newRemoteMessage.messageId}');
|
|
||||||
log('FcmService::handleFirebaseForegroundMessage():message: ${newRemoteMessage.data}');
|
log('FcmService::handleFirebaseForegroundMessage():message: ${newRemoteMessage.data}');
|
||||||
foregroundMessageStreamController.add(newRemoteMessage);
|
if (!foregroundMessageStreamController.isClosed) {
|
||||||
|
foregroundMessageStreamController.add(newRemoteMessage);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleFirebaseBackgroundMessage(RemoteMessage newRemoteMessage) {
|
void handleFirebaseBackgroundMessage(RemoteMessage newRemoteMessage) {
|
||||||
FcmController.instance.initialize();
|
FcmController.instance.initialize();
|
||||||
backgroundMessageStreamController.add(newRemoteMessage);
|
if (!backgroundMessageStreamController.isClosed) {
|
||||||
|
backgroundMessageStreamController.add(newRemoteMessage);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleRefreshToken(String? newToken) {
|
void handleGetToken(String? currentToken) async {
|
||||||
fcmTokenStreamController.add(newToken);
|
log('FcmService::handleGetToken():currentToken: $currentToken');
|
||||||
|
if (fcmTokenStreamController.isClosed) {
|
||||||
|
log('FcmService::handleGetToken():fcmTokenStreamController: isClosed');
|
||||||
|
fcmTokenStreamController = StreamController<String?>.broadcast();
|
||||||
|
await FcmController.instance.listenTokenStream();
|
||||||
|
}
|
||||||
|
if (!fcmTokenStreamController.isClosed) {
|
||||||
|
fcmTokenStreamController.add(currentToken);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _closeStream() {
|
void handleRefreshToken(String? newToken) async {
|
||||||
|
log('FcmService::handleRefreshToken():newToken: $newToken');
|
||||||
|
if (fcmTokenStreamController.isClosed) {
|
||||||
|
log('FcmService::handleRefreshToken():fcmTokenStreamController: isClosed');
|
||||||
|
fcmTokenStreamController = StreamController<String?>.broadcast();
|
||||||
|
await FcmController.instance.listenTokenStream();
|
||||||
|
}
|
||||||
|
if (!fcmTokenStreamController.isClosed) {
|
||||||
|
fcmTokenStreamController.add(newToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> recreateStreamController() async {
|
||||||
|
if (foregroundMessageStreamController.isClosed) {
|
||||||
|
foregroundMessageStreamController = StreamController<RemoteMessage>.broadcast();
|
||||||
|
await FcmController.instance.listenForegroundMessageStream();
|
||||||
|
}
|
||||||
|
if (backgroundMessageStreamController.isClosed) {
|
||||||
|
backgroundMessageStreamController = StreamController<RemoteMessage>.broadcast();
|
||||||
|
await FcmController.instance.listenBackgroundMessageStream();
|
||||||
|
}
|
||||||
|
if (fcmTokenStreamController.isClosed) {
|
||||||
|
fcmTokenStreamController = StreamController<String?>.broadcast();
|
||||||
|
await FcmController.instance.listenTokenStream();
|
||||||
|
}
|
||||||
|
return Future.value();
|
||||||
|
}
|
||||||
|
|
||||||
|
void closeStream() {
|
||||||
foregroundMessageStreamController.close();
|
foregroundMessageStreamController.close();
|
||||||
backgroundMessageStreamController.close();
|
backgroundMessageStreamController.close();
|
||||||
fcmTokenStreamController.close();
|
fcmTokenStreamController.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispose() {
|
|
||||||
_closeStream();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -24,6 +24,7 @@ import 'package:tmail_ui_user/features/email/domain/state/delete_multiple_emails
|
|||||||
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_star_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_star_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.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/presentation/model/mailbox_actions.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_all_recent_search_latest_state.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_all_recent_search_latest_state.dart';
|
||||||
@@ -31,7 +32,6 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/quick_sear
|
|||||||
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/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/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/action/dashboard_action.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart';
|
||||||
@@ -642,7 +642,7 @@ class SearchEmailController extends BaseController
|
|||||||
clearAllResultSearch();
|
clearAllResultSearch();
|
||||||
FocusScope.of(context).unfocus();
|
FocusScope.of(context).unfocus();
|
||||||
mailboxDashBoardController.searchController.disableAllSearchEmail();
|
mailboxDashBoardController.searchController.disableAllSearchEmail();
|
||||||
mailboxDashBoardController.dispatchAction(SelectMailboxDefaultAction());
|
mailboxDashBoardController.dispatchMailboxUIAction(SelectMailboxDefaultAction());
|
||||||
mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread);
|
mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread);
|
||||||
SearchEmailBindings().disposeBindings();
|
SearchEmailBindings().disposeBindings();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import 'package:tmail_ui_user/features/email/domain/state/delete_multiple_emails
|
|||||||
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_star_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_star_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_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/presentation/action/dashboard_action.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
|
||||||
@@ -97,7 +98,6 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
final ScrollController listEmailController = ScrollController();
|
final ScrollController listEmailController = ScrollController();
|
||||||
final FocusNode focusNodeKeyBoard = FocusNode();
|
final FocusNode focusNodeKeyBoard = FocusNode();
|
||||||
final latestEmailSelectedOrUnselected = Rxn<PresentationEmail>();
|
final latestEmailSelectedOrUnselected = Rxn<PresentationEmail>();
|
||||||
late Worker mailboxWorker, searchWorker, dashboardActionWorker, viewStateWorker, advancedSearchFilterWorker;
|
|
||||||
|
|
||||||
Set<Comparator>? get _sortOrder => <Comparator>{}
|
Set<Comparator>? get _sortOrder => <Comparator>{}
|
||||||
..add(EmailComparator(EmailComparatorProperty.receivedAt)
|
..add(EmailComparator(EmailComparatorProperty.receivedAt)
|
||||||
@@ -131,7 +131,7 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
_registerListenerWorker();
|
_registerObxStreamListener();
|
||||||
super.onInit();
|
super.onInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,7 +145,6 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
void onClose() {
|
void onClose() {
|
||||||
listEmailController.dispose();
|
listEmailController.dispose();
|
||||||
focusNodeKeyBoard.dispose();
|
focusNodeKeyBoard.dispose();
|
||||||
_unregisterListenerWorker();
|
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,8 +194,8 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
_handleErrorGetAllOrRefreshChangesEmail(error);
|
_handleErrorGetAllOrRefreshChangesEmail(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _registerListenerWorker() {
|
void _registerObxStreamListener() {
|
||||||
mailboxWorker = ever(mailboxDashBoardController.selectedMailbox, (mailbox) {
|
ever(mailboxDashBoardController.selectedMailbox, (mailbox) {
|
||||||
if (mailbox is PresentationMailbox) {
|
if (mailbox is PresentationMailbox) {
|
||||||
if (_currentMailboxId != mailbox.id) {
|
if (_currentMailboxId != mailbox.id) {
|
||||||
_currentMailboxId = mailbox.id;
|
_currentMailboxId = mailbox.id;
|
||||||
@@ -209,7 +208,7 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
searchWorker = ever(searchController.searchState, (searchState) {
|
ever(searchController.searchState, (searchState) {
|
||||||
if (searchState is SearchState) {
|
if (searchState is SearchState) {
|
||||||
if (searchState.searchStatus == SearchStatus.ACTIVE) {
|
if (searchState.searchStatus == SearchStatus.ACTIVE) {
|
||||||
cancelSelectEmail();
|
cancelSelectEmail();
|
||||||
@@ -217,13 +216,13 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
advancedSearchFilterWorker = ever(searchController.isAdvancedSearchViewOpen, (hasOpen) {
|
ever(searchController.isAdvancedSearchViewOpen, (hasOpen) {
|
||||||
if (hasOpen == true) {
|
if (hasOpen == true) {
|
||||||
mailboxDashBoardController.filterMessageOption.value = FilterMessageOption.all;
|
mailboxDashBoardController.filterMessageOption.value = FilterMessageOption.all;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
dashboardActionWorker = ever(mailboxDashBoardController.dashBoardAction, (action) {
|
ever(mailboxDashBoardController.dashBoardAction, (action) {
|
||||||
if (action is RefreshAllEmailAction) {
|
if (action is RefreshAllEmailAction) {
|
||||||
refreshAllEmail();
|
refreshAllEmail();
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
@@ -268,15 +267,19 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
_navigationRouter = action.navigationRouter;
|
_navigationRouter = action.navigationRouter;
|
||||||
_activateSearchFromRouter();
|
_activateSearchFromRouter();
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
} else if (action is RefreshChangeEmailAction) {
|
|
||||||
if (action.newState != _currentEmailState) {
|
|
||||||
_refreshEmailChanges();
|
|
||||||
}
|
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
viewStateWorker = ever(mailboxDashBoardController.viewState, (viewState) {
|
ever(mailboxDashBoardController.emailUIAction, (action) {
|
||||||
|
if (action is RefreshChangeEmailAction) {
|
||||||
|
if (action.newState != _currentEmailState) {
|
||||||
|
_refreshEmailChanges();
|
||||||
|
}
|
||||||
|
mailboxDashBoardController.clearEmailUIAction();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
ever(mailboxDashBoardController.viewState, (viewState) {
|
||||||
if (viewState is Either) {
|
if (viewState is Either) {
|
||||||
viewState.map((success) {
|
viewState.map((success) {
|
||||||
if (success is MarkAsEmailReadSuccess) {
|
if (success is MarkAsEmailReadSuccess) {
|
||||||
@@ -323,14 +326,6 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void _unregisterListenerWorker() {
|
|
||||||
mailboxWorker.dispose();
|
|
||||||
dashboardActionWorker.dispose();
|
|
||||||
searchWorker.dispose();
|
|
||||||
advancedSearchFilterWorker.dispose();
|
|
||||||
viewStateWorker.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
void _activateSearchFromRouter() {
|
void _activateSearchFromRouter() {
|
||||||
searchController.autoFocus.value = false;
|
searchController.autoFocus.value = false;
|
||||||
searchController.enableSearch();
|
searchController.enableSearch();
|
||||||
|
|||||||
@@ -26,4 +26,6 @@ class AppConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
static String appFCMConfigurationPath = "configurations/env.fcm";
|
static String appFCMConfigurationPath = "configurations/env.fcm";
|
||||||
|
|
||||||
|
static String get fcmVapidPublicKeyWeb => dotenv.get('FIREBASE_WEB_VAPID_PUBLIC_KEY', fallback: '');
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:core/core.dart';
|
||||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||||
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
@@ -23,4 +24,6 @@ class AppUtils {
|
|||||||
webOnlyWindowName: isNewTab ? '_blank' : '_self',
|
webOnlyWindowName: isNewTab ? '_blank' : '_self',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static String? get fcmVapidPublicKey => BuildUtils.isWeb ? AppConfig.fcmVapidPublicKeyWeb : null;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user