TF-474 Use Ever/Worker to listen Obx object
This commit is contained in:
@@ -68,6 +68,8 @@ class EmailController extends BaseController {
|
||||
EmailId? _currentEmailId;
|
||||
List<EmailContent>? initialEmailContents;
|
||||
|
||||
late Worker emailWorker;
|
||||
|
||||
PresentationMailbox? get currentMailbox => mailboxDashBoardController.selectedMailbox.value;
|
||||
|
||||
PresentationEmail? get currentEmail => mailboxDashBoardController.selectedEmail.value;
|
||||
@@ -85,12 +87,22 @@ class EmailController extends BaseController {
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
mailboxDashBoardController.selectedEmail.listen((presentationEmail) {
|
||||
log('EmailController::onReady(): selectedEmail: ${presentationEmail.toString()}');
|
||||
if (_currentEmailId != presentationEmail?.id) {
|
||||
_currentEmailId = presentationEmail?.id;
|
||||
_resetToOriginalValue();
|
||||
if (presentationEmail != null) {
|
||||
_initWorker();
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
_clearWorker();
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
void _initWorker() {
|
||||
emailWorker = ever( mailboxDashBoardController.selectedEmail, (presentationEmail) {
|
||||
if (presentationEmail is PresentationEmail) {
|
||||
if (_currentEmailId != presentationEmail.id) {
|
||||
_currentEmailId = presentationEmail.id;
|
||||
_resetToOriginalValue();
|
||||
_getEmailContentAction(presentationEmail.id);
|
||||
if (!presentationEmail.hasRead) {
|
||||
markAsEmailRead(presentationEmail, ReadActions.markAsRead);
|
||||
@@ -98,13 +110,10 @@ class EmailController extends BaseController {
|
||||
}
|
||||
}
|
||||
});
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
mailboxDashBoardController.selectedEmail.close();
|
||||
super.onClose();
|
||||
void _clearWorker() {
|
||||
emailWorker.call();
|
||||
}
|
||||
|
||||
void _getEmailContentAction(EmailId emailId) async {
|
||||
|
||||
@@ -92,6 +92,8 @@ class MailboxController extends BaseMailboxController {
|
||||
jmap_state.State? currentMailboxState;
|
||||
List<String> listMailboxNameAsStringExist = <String>[];
|
||||
|
||||
late Worker accountIdWorker, viewStateWorker;
|
||||
|
||||
MailboxController(
|
||||
this._getAllMailboxInteractor,
|
||||
this._refreshAllMailboxInteractor,
|
||||
@@ -106,7 +108,7 @@ class MailboxController extends BaseMailboxController {
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
_onMailboxDashBoardListener();
|
||||
_initWorker();
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
@@ -122,10 +124,11 @@ class MailboxController extends BaseMailboxController {
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
mailboxDashBoardController.accountId.close();
|
||||
mailboxDashBoardController.viewState.close();
|
||||
searchInputController.dispose();
|
||||
searchFocus.dispose();
|
||||
_openMailboxEventController.close();
|
||||
mailboxListScrollController.dispose();
|
||||
_clearWorker();
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
@@ -176,50 +179,55 @@ class MailboxController extends BaseMailboxController {
|
||||
@override
|
||||
void onError(error) {}
|
||||
|
||||
void _onMailboxDashBoardListener() {
|
||||
mailboxDashBoardController.accountId.listen((accountId) {
|
||||
log('MailboxController::_onMailboxDashBoardListener(): accountId: $accountId');
|
||||
if (accountId != null) {
|
||||
void _initWorker() {
|
||||
accountIdWorker = ever(mailboxDashBoardController.accountId, (accountId) {
|
||||
if (accountId is AccountId) {
|
||||
getAllMailboxAction(accountId);
|
||||
}
|
||||
});
|
||||
|
||||
mailboxDashBoardController.viewState.listen((state) {
|
||||
log('MailboxController::_onMailboxDashBoardListener(): viewState: $viewState');
|
||||
state.fold((failure) {
|
||||
if (failure is EmptyTrashFolderFailure) {
|
||||
mailboxDashBoardController.clearState();
|
||||
refreshMailboxChanges();
|
||||
}
|
||||
}, (success) {
|
||||
if (success is MarkAsMultipleEmailReadAllSuccess ||
|
||||
success is MarkAsMultipleEmailReadHasSomeEmailFailure) {
|
||||
mailboxDashBoardController.clearState();
|
||||
refreshMailboxChanges();
|
||||
} else if (success is MoveMultipleEmailToMailboxAllSuccess ||
|
||||
success is MoveMultipleEmailToMailboxHasSomeEmailFailure) {
|
||||
mailboxDashBoardController.clearState();
|
||||
refreshMailboxChanges();
|
||||
} else if (success is DeleteMultipleEmailsPermanentlyAllSuccess ||
|
||||
success is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure) {
|
||||
mailboxDashBoardController.clearState();
|
||||
refreshMailboxChanges();
|
||||
} else if (success is EmptyTrashFolderSuccess) {
|
||||
mailboxDashBoardController.clearState();
|
||||
refreshMailboxChanges();
|
||||
} else if (success is MarkAsEmailReadSuccess ||
|
||||
success is MoveToMailboxSuccess ||
|
||||
success is DeleteEmailPermanentlySuccess ||
|
||||
success is SaveEmailAsDraftsSuccess ||
|
||||
success is RemoveEmailDraftsSuccess ||
|
||||
success is SendEmailSuccess ||
|
||||
success is UpdateEmailDraftsSuccess) {
|
||||
refreshMailboxChanges();
|
||||
}
|
||||
});
|
||||
viewStateWorker = ever(mailboxDashBoardController.viewState, (state) {
|
||||
if (state is Either) {
|
||||
state.fold((failure) {
|
||||
if (failure is EmptyTrashFolderFailure) {
|
||||
mailboxDashBoardController.clearState();
|
||||
refreshMailboxChanges();
|
||||
}
|
||||
}, (success) {
|
||||
if (success is MarkAsMultipleEmailReadAllSuccess ||
|
||||
success is MarkAsMultipleEmailReadHasSomeEmailFailure) {
|
||||
mailboxDashBoardController.clearState();
|
||||
refreshMailboxChanges();
|
||||
} else if (success is MoveMultipleEmailToMailboxAllSuccess ||
|
||||
success is MoveMultipleEmailToMailboxHasSomeEmailFailure) {
|
||||
mailboxDashBoardController.clearState();
|
||||
refreshMailboxChanges();
|
||||
} else if (success is DeleteMultipleEmailsPermanentlyAllSuccess ||
|
||||
success is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure) {
|
||||
mailboxDashBoardController.clearState();
|
||||
refreshMailboxChanges();
|
||||
} else if (success is EmptyTrashFolderSuccess) {
|
||||
mailboxDashBoardController.clearState();
|
||||
refreshMailboxChanges();
|
||||
} else if (success is MarkAsEmailReadSuccess ||
|
||||
success is MoveToMailboxSuccess ||
|
||||
success is DeleteEmailPermanentlySuccess ||
|
||||
success is SaveEmailAsDraftsSuccess ||
|
||||
success is RemoveEmailDraftsSuccess ||
|
||||
success is SendEmailSuccess ||
|
||||
success is UpdateEmailDraftsSuccess) {
|
||||
refreshMailboxChanges();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void _clearWorker() {
|
||||
accountIdWorker.call();
|
||||
viewStateWorker.call();
|
||||
}
|
||||
|
||||
void _initCollapseMailboxCategories() {
|
||||
if (kIsWeb && currentContext != null
|
||||
&& (_responsiveUtils.isMobile(currentContext!) || _responsiveUtils.isTablet(currentContext!))) {
|
||||
@@ -680,10 +688,4 @@ class MailboxController extends BaseMailboxController {
|
||||
_cancelSelectMailbox();
|
||||
mailboxDashBoardController.closeMailboxMenuDrawer();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_openMailboxEventController.close();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
@@ -174,7 +174,10 @@ class MailboxDashBoardView extends GetWidget<MailboxDashBoardController> with Ne
|
||||
..addOnTapAvatarActionWithPositionClick((position) =>
|
||||
controller.openPopupMenuAction(context, position, popupMenuUserSettingActionTile(context,
|
||||
controller.userProfile.value,
|
||||
onLogoutAction: () => controller.logoutAction(),
|
||||
onLogoutAction: () {
|
||||
popBack();
|
||||
controller.logoutAction();
|
||||
},
|
||||
onSettingAction: () {
|
||||
popBack();
|
||||
controller.goToSettings();
|
||||
|
||||
@@ -121,7 +121,10 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
|
||||
..addOnTapAvatarActionWithPositionClick((position) =>
|
||||
controller.openPopupMenuAction(context, position, popupMenuUserSettingActionTile(context,
|
||||
controller.userProfile.value,
|
||||
onLogoutAction: () => controller.logoutAction(),
|
||||
onLogoutAction: () {
|
||||
popBack();
|
||||
controller.logoutAction();
|
||||
},
|
||||
onSettingAction: () {
|
||||
popBack();
|
||||
controller.goToSettings();
|
||||
|
||||
+16
-5
@@ -45,6 +45,8 @@ class IdentitiesController extends BaseController {
|
||||
|
||||
final idIdentityAll = IdentityId(Id('all'));
|
||||
|
||||
late Worker accountIdWorker;
|
||||
|
||||
IdentitiesController(
|
||||
this._getAllIdentitiesInteractor,
|
||||
this._deleteIdentityInteractor,
|
||||
@@ -55,10 +57,16 @@ class IdentitiesController extends BaseController {
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
_onAccountDashBoardListener();
|
||||
_initWorker();
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
_clearWorker();
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
@override
|
||||
void onDone() {
|
||||
viewState.value.fold(
|
||||
@@ -91,15 +99,18 @@ class IdentitiesController extends BaseController {
|
||||
void onError(error) {
|
||||
}
|
||||
|
||||
void _onAccountDashBoardListener() {
|
||||
_accountDashBoardController.accountId.listen((accountId) {
|
||||
log('IdentitiesController::_onAccountDashBoardListener(): accountId: $accountId');
|
||||
if (accountId != null) {
|
||||
void _initWorker() {
|
||||
accountIdWorker = ever(_accountDashBoardController.accountId, (accountId) {
|
||||
if (accountId is AccountId) {
|
||||
_getAllIdentities(accountId);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void _clearWorker() {
|
||||
accountIdWorker.call();
|
||||
}
|
||||
|
||||
void _getAllIdentities(AccountId accountId) {
|
||||
consumeState(_getAllIdentitiesInteractor.execute(accountId));
|
||||
}
|
||||
|
||||
@@ -61,6 +61,7 @@ import 'package:tmail_ui_user/features/thread/domain/usecases/search_email_inter
|
||||
import 'package:tmail_ui_user/features/thread/domain/usecases/search_more_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/extensions/filter_message_option_extension.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/model/search_state.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/model/search_status.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||
@@ -97,6 +98,7 @@ class ThreadController extends BaseController {
|
||||
MailboxId? _currentMailboxId;
|
||||
jmap.State? _currentEmailState;
|
||||
final ScrollController listEmailController = ScrollController();
|
||||
late Worker mailboxWorker, searchWorker, dashboardActionWorker, viewStateWorker;
|
||||
|
||||
SearchQuery? get searchQuery => mailboxDashBoardController.searchQuery;
|
||||
|
||||
@@ -126,7 +128,7 @@ class ThreadController extends BaseController {
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
_onMailboxDashBoardListener();
|
||||
_initWorker();
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
@@ -138,11 +140,8 @@ class ThreadController extends BaseController {
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
mailboxDashBoardController.selectedMailbox.close();
|
||||
mailboxDashBoardController.dashBoardAction.close();
|
||||
mailboxDashBoardController.viewState.close();
|
||||
mailboxDashBoardController.searchState.close();
|
||||
listEmailController.dispose();
|
||||
_clearWorker();
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
@@ -224,67 +223,77 @@ class ThreadController extends BaseController {
|
||||
@override
|
||||
void onError(error) {}
|
||||
|
||||
void _onMailboxDashBoardListener() {
|
||||
mailboxDashBoardController.selectedMailbox.listen((selectedMailbox) {
|
||||
log('ThreadController::_onMailboxDashBoardListener(): selectMailbox: ${selectedMailbox?.name?.name}(${selectedMailbox?.id})');
|
||||
if (_currentMailboxId != selectedMailbox?.id) {
|
||||
_currentMailboxId = selectedMailbox?.id;
|
||||
_resetToOriginalValue();
|
||||
_getAllEmail();
|
||||
}
|
||||
});
|
||||
|
||||
mailboxDashBoardController.searchState.listen((state) {
|
||||
log('ThreadController::_onMailboxDashBoardListener(): searchState: $state');
|
||||
if (state.searchStatus == SearchStatus.INACTIVE) {
|
||||
emailListSearch.clear();
|
||||
} else if (state.searchStatus == SearchStatus.ACTIVE) {
|
||||
cancelSelectEmail();
|
||||
}
|
||||
});
|
||||
|
||||
mailboxDashBoardController.dashBoardAction.listen((action) {
|
||||
log('ThreadController::_onMailboxDashBoardListener(): dashBoardAction: ${action.runtimeType}');
|
||||
if (action is RefreshAllEmailAction) {
|
||||
refreshAllEmail();
|
||||
mailboxDashBoardController.clearDashBoardAction();
|
||||
} else if (action is MarkAsReadAllEmailAction) {
|
||||
markAsReadAllEmails();
|
||||
mailboxDashBoardController.clearDashBoardAction();
|
||||
} if (action is SelectionAllEmailAction) {
|
||||
setSelectAllEmailAction();
|
||||
mailboxDashBoardController.clearDashBoardAction();
|
||||
} if (action is CancelSelectionAllEmailAction) {
|
||||
cancelSelectEmail();
|
||||
mailboxDashBoardController.clearDashBoardAction();
|
||||
} if (action is FilterMessageAction) {
|
||||
filterMessagesAction(action.context, action.option);
|
||||
mailboxDashBoardController.clearDashBoardAction();
|
||||
} if (action is HandleEmailActionTypeAction) {
|
||||
log('ThreadController::_onMailboxDashBoardListener(): ${action.listEmailSelected.length}');
|
||||
pressEmailSelectionAction(action.context, action.emailAction, action.listEmailSelected);
|
||||
mailboxDashBoardController.clearDashBoardAction();
|
||||
}
|
||||
});
|
||||
|
||||
mailboxDashBoardController.viewState.listen((state) {
|
||||
log('ThreadController::_onMailboxDashBoardListener(): viewState: $state');
|
||||
state.map((success) {
|
||||
if (success is SearchEmailNewQuery){
|
||||
mailboxDashBoardController.clearState();
|
||||
_searchEmail();
|
||||
} else if (success is MarkAsEmailReadSuccess
|
||||
|| success is MoveToMailboxSuccess
|
||||
|| success is MarkAsStarEmailSuccess
|
||||
|| success is DeleteEmailPermanentlySuccess
|
||||
|| success is SaveEmailAsDraftsSuccess
|
||||
|| success is RemoveEmailDraftsSuccess
|
||||
|| success is SendEmailSuccess
|
||||
|| success is UpdateEmailDraftsSuccess) {
|
||||
_refreshEmailChanges();
|
||||
void _initWorker() {
|
||||
mailboxWorker = ever(mailboxDashBoardController.selectedMailbox, (mailbox) {
|
||||
if (mailbox is PresentationMailbox) {
|
||||
if (_currentMailboxId != mailbox.id) {
|
||||
_currentMailboxId = mailbox.id;
|
||||
_resetToOriginalValue();
|
||||
_getAllEmail();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
searchWorker = ever(mailboxDashBoardController.searchState, (searchState) {
|
||||
if (searchState is SearchState) {
|
||||
if (searchState.searchStatus == SearchStatus.INACTIVE) {
|
||||
emailListSearch.clear();
|
||||
} else if (searchState.searchStatus == SearchStatus.ACTIVE) {
|
||||
cancelSelectEmail();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
dashboardActionWorker = ever(mailboxDashBoardController.dashBoardAction, (action) {
|
||||
if (action is DashBoardAction) {
|
||||
if (action is RefreshAllEmailAction) {
|
||||
refreshAllEmail();
|
||||
mailboxDashBoardController.clearDashBoardAction();
|
||||
} else if (action is MarkAsReadAllEmailAction) {
|
||||
markAsReadAllEmails();
|
||||
mailboxDashBoardController.clearDashBoardAction();
|
||||
} if (action is SelectionAllEmailAction) {
|
||||
setSelectAllEmailAction();
|
||||
mailboxDashBoardController.clearDashBoardAction();
|
||||
} if (action is CancelSelectionAllEmailAction) {
|
||||
cancelSelectEmail();
|
||||
mailboxDashBoardController.clearDashBoardAction();
|
||||
} if (action is FilterMessageAction) {
|
||||
filterMessagesAction(action.context, action.option);
|
||||
mailboxDashBoardController.clearDashBoardAction();
|
||||
} if (action is HandleEmailActionTypeAction) {
|
||||
pressEmailSelectionAction(action.context, action.emailAction, action.listEmailSelected);
|
||||
mailboxDashBoardController.clearDashBoardAction();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
viewStateWorker = ever(mailboxDashBoardController.viewState, (viewState) {
|
||||
if (viewState is Either) {
|
||||
viewState.map((success) {
|
||||
if (success is SearchEmailNewQuery){
|
||||
mailboxDashBoardController.clearState();
|
||||
_searchEmail();
|
||||
} else if (success is MarkAsEmailReadSuccess
|
||||
|| success is MoveToMailboxSuccess
|
||||
|| success is MarkAsStarEmailSuccess
|
||||
|| success is DeleteEmailPermanentlySuccess
|
||||
|| success is SaveEmailAsDraftsSuccess
|
||||
|| success is RemoveEmailDraftsSuccess
|
||||
|| success is SendEmailSuccess
|
||||
|| success is UpdateEmailDraftsSuccess) {
|
||||
_refreshEmailChanges();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void _clearWorker() {
|
||||
mailboxWorker.call();
|
||||
dashboardActionWorker.call();
|
||||
searchWorker.call();
|
||||
viewStateWorker.call();
|
||||
}
|
||||
|
||||
void _getAllEmail() {
|
||||
|
||||
Reference in New Issue
Block a user