remove all funtion duplicate in mailbox_dashboard_controller

This commit is contained in:
ManhNT
2022-06-24 16:06:16 +07:00
committed by Dat H. Pham
parent 313a3dad7e
commit 2cbe5f163c
3 changed files with 41 additions and 150 deletions
@@ -10,13 +10,8 @@ import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart'; import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
import 'package:jmap_dart_client/jmap/core/capability/mail_capability.dart'; import 'package:jmap_dart_client/jmap/core/capability/mail_capability.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/core/utc_date.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_comparator.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_comparator_property.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart'; import 'package:model/model.dart';
import 'package:package_info_plus/package_info_plus.dart'; import 'package:package_info_plus/package_info_plus.dart';
@@ -37,28 +32,19 @@ import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_int
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_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/mark_as_mailbox_read_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/mark_as_mailbox_read_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/quick_search_email_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/domain/usecases/get_all_recent_search_latest_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/mark_as_mailbox_read_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/mark_as_mailbox_read_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/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/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/action/dashboard_action.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/composer_overlay_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/composer_overlay_state.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/manage_account/domain/usecases/log_out_oidc_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/manage_account_arguments.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/manage_account_arguments.dart';
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.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/features/thread/domain/model/search_query.dart'; import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart'; import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.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/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart';
@@ -73,12 +59,10 @@ class MailboxDashBoardController extends ReloadableController {
final Connectivity _connectivity = Get.find<Connectivity>(); final Connectivity _connectivity = Get.find<Connectivity>();
final ResponsiveUtils _responsiveUtils = Get.find<ResponsiveUtils>(); final ResponsiveUtils _responsiveUtils = Get.find<ResponsiveUtils>();
final EmailReceiveManager _emailReceiveManager = Get.find<EmailReceiveManager>(); final EmailReceiveManager _emailReceiveManager = Get.find<EmailReceiveManager>();
final SearchController searchController = Get.find<SearchController>();
final MoveToMailboxInteractor _moveToMailboxInteractor; final MoveToMailboxInteractor _moveToMailboxInteractor;
final DeleteEmailPermanentlyInteractor _deleteEmailPermanentlyInteractor; final DeleteEmailPermanentlyInteractor _deleteEmailPermanentlyInteractor;
final SaveRecentSearchInteractor _saveRecentSearchInteractor;
final GetAllRecentSearchLatestInteractor _getAllRecentSearchLatestInteractor;
final QuickSearchEmailInteractor _quickSearchEmailInteractor;
final MarkAsMailboxReadInteractor _markAsMailboxReadInteractor; final MarkAsMailboxReadInteractor _markAsMailboxReadInteractor;
final scaffoldKey = GlobalKey<ScaffoldState>(); final scaffoldKey = GlobalKey<ScaffoldState>();
@@ -86,23 +70,18 @@ class MailboxDashBoardController extends ReloadableController {
final selectedEmail = Rxn<PresentationEmail>(); final selectedEmail = Rxn<PresentationEmail>();
final accountId = Rxn<AccountId>(); final accountId = Rxn<AccountId>();
final userProfile = Rxn<UserProfile>(); final userProfile = Rxn<UserProfile>();
final searchState = SearchState.initial().obs;
final dashBoardAction = Rxn<UIAction>(); final dashBoardAction = Rxn<UIAction>();
final routePath = AppRoutes.MAILBOX_DASHBOARD.obs; final routePath = AppRoutes.MAILBOX_DASHBOARD.obs;
final appInformation = Rxn<PackageInfo>(); final appInformation = Rxn<PackageInfo>();
final currentSelectMode = SelectMode.INACTIVE.obs; final currentSelectMode = SelectMode.INACTIVE.obs;
final filterMessageOption = FilterMessageOption.all.obs; final filterMessageOption = FilterMessageOption.all.obs;
final listEmailSelected = <PresentationEmail>[].obs; final listEmailSelected = <PresentationEmail>[].obs;
final listFilterQuickSearch = RxList<QuickSearchFilter>();
final emailReceiveTimeType = Rxn<EmailReceiveTimeType>(); final emailReceiveTimeType = Rxn<EmailReceiveTimeType>();
final composerOverlayState = ComposerOverlayState.inActive.obs; final composerOverlayState = ComposerOverlayState.inActive.obs;
SearchQuery? searchQuery;
Session? sessionCurrent; Session? sessionCurrent;
Map<Role, MailboxId> mapDefaultMailboxId = {}; Map<Role, MailboxId> mapDefaultMailboxId = {};
Map<MailboxId, PresentationMailbox> mapMailbox = {}; Map<MailboxId, PresentationMailbox> mapMailbox = {};
TextEditingController searchInputController = TextEditingController();
FocusNode searchFocus = FocusNode();
RouterArguments? routerArguments; RouterArguments? routerArguments;
late StreamSubscription _connectivityStreamSubscription; late StreamSubscription _connectivityStreamSubscription;
late StreamSubscription _emailReceiveManagerStreamSubscription; late StreamSubscription _emailReceiveManagerStreamSubscription;
@@ -113,9 +92,6 @@ class MailboxDashBoardController extends ReloadableController {
GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor, GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor,
this._moveToMailboxInteractor, this._moveToMailboxInteractor,
this._deleteEmailPermanentlyInteractor, this._deleteEmailPermanentlyInteractor,
this._saveRecentSearchInteractor,
this._getAllRecentSearchLatestInteractor,
this._quickSearchEmailInteractor,
this._markAsMailboxReadInteractor, this._markAsMailboxReadInteractor,
) : super(logoutOidcInteractor, ) : super(logoutOidcInteractor,
deleteAuthorityOidcInteractor, deleteAuthorityOidcInteractor,
@@ -125,7 +101,6 @@ class MailboxDashBoardController extends ReloadableController {
void onInit() { void onInit() {
_registerNetworkConnectivityState(); _registerNetworkConnectivityState();
_registerPendingEmailAddress(); _registerPendingEmailAddress();
_registerSearchFocusListener();
super.onInit(); super.onInit();
} }
@@ -225,17 +200,6 @@ class MailboxDashBoardController extends ReloadableController {
}); });
} }
void _registerSearchFocusListener() {
searchFocus.addListener(() {
final hasFocus = searchFocus.hasFocus;
final query = searchQuery?.value;
log('MailboxDashBoardController::_registerSearchFocusListener(): hasFocus: $hasFocus | query: $query');
if (!hasFocus && (query == null || query.isEmpty)) {
disableSearch();
}
});
}
void _getUserProfile() async { void _getUserProfile() async {
userProfile.value = sessionCurrent != null ? UserProfile(sessionCurrent!.username.value) : null; userProfile.value = sessionCurrent != null ? UserProfile(sessionCurrent!.username.value) : null;
} }
@@ -298,53 +262,24 @@ class MailboxDashBoardController extends ReloadableController {
bool get isDrawerOpen => scaffoldKey.currentState?.isDrawerOpen == true; bool get isDrawerOpen => scaffoldKey.currentState?.isDrawerOpen == true;
bool isSearchActive() => searchState.value.searchStatus == SearchStatus.ACTIVE;
bool isSelectionEnabled() => currentSelectMode.value == SelectMode.ACTIVE; bool isSelectionEnabled() => currentSelectMode.value == SelectMode.ACTIVE;
void enableSearch() { void searchEmail(BuildContext context) {
searchState.value = searchState.value.enableSearchState(); dispatchState(Right(SearchEmailNewQuery(searchController.searchEmailFilter.value.text ?? SearchQuery.initial())));
}
void disableSearch() {
searchState.value = searchState.value.disableSearchState();
searchQuery = SearchQuery.initial();
searchInputController.clear();
listFilterQuickSearch.clear();
emailReceiveTimeType.value = null;
searchFocus.unfocus();
}
void clearTextSearch() {
searchQuery = SearchQuery.initial();
searchInputController.clear();
searchFocus.requestFocus();
}
void onChangeTextSearch(String value) {
searchQuery = SearchQuery(value);
}
void updateTextSearch(String value) {
searchInputController.text = value;
}
void searchEmail(BuildContext context, String value) {
searchQuery = SearchQuery(value);
dispatchState(Right(SearchEmailNewQuery(searchQuery ?? SearchQuery.initial())));
FocusScope.of(context).unfocus(); FocusScope.of(context).unfocus();
if (searchInsideEmailDetailedViewIsActive(context)) { if (_searchInsideEmailDetailedViewIsActive(context)) {
closeEmailDetailedView(); _closeEmailDetailedView();
} }
} }
bool searchInsideEmailDetailedViewIsActive(BuildContext context) { bool _searchInsideEmailDetailedViewIsActive(BuildContext context) {
return BuildUtils.isWeb return BuildUtils.isWeb
&& _responsiveUtils.isDesktop(context) && _responsiveUtils.isDesktop(context)
&& routePath.value == AppRoutes.EMAIL; && routePath.value == AppRoutes.EMAIL;
} }
void closeEmailDetailedView() { void _closeEmailDetailedView() {
dispatchRoute(AppRoutes.THREAD); dispatchRoute(AppRoutes.THREAD);
clearSelectedEmail(); clearSelectedEmail();
} }
@@ -457,79 +392,10 @@ class MailboxDashBoardController extends ReloadableController {
return null; return null;
} }
void saveRecentSearch(RecentSearch recentSearch) {
consumeState(_saveRecentSearchInteractor.execute(recentSearch));
}
Future<List<RecentSearch>> getAllRecentSearchAction(String pattern) async {
return await _getAllRecentSearchLatestInteractor.execute(pattern: pattern)
.then((result) => result.fold(
(failure) => <RecentSearch>[],
(success) => success is GetAllRecentSearchLatestSuccess
? success.listRecentSearch
: <RecentSearch>[]));
}
Future<List<PresentationEmail>> quickSearchEmailsAction(String pattern) async {
if (accountId.value != null && selectedMailbox.value != null) {
return await _quickSearchEmailInteractor.execute(
accountId.value!,
limit: UnsignedInt(5),
sort: <Comparator>{}
..add(EmailComparator(EmailComparatorProperty.receivedAt)
..setIsAscending(false)),
filter: EmailFilterCondition(
text: pattern,
hasAttachment: listFilterQuickSearch.contains(QuickSearchFilter.hasAttachment) ? true : null,
from: listFilterQuickSearch.contains(QuickSearchFilter.fromMe) ? userProfile.value!.email : null,
after: listFilterQuickSearch.contains(QuickSearchFilter.last7Days)
? UTCDate(DateTime.now().subtract(const Duration(days: 7)))
: null,
inMailbox: selectedMailbox.value!.id),
properties: ThreadConstants.propertiesQuickSearch
).then((result) => result.fold(
(failure) => <PresentationEmail>[],
(success) => success is QuickSearchEmailSuccess ? success.emailList : <PresentationEmail>[]));
}
return <PresentationEmail>[];
}
void selectQuickSearchFilter(QuickSearchFilter quickSearchFilter, {bool fromSuggestionBox = false}) {
if (listFilterQuickSearch.contains(quickSearchFilter)) {
listFilterQuickSearch.remove(quickSearchFilter);
if (fromSuggestionBox && quickSearchFilter == QuickSearchFilter.last7Days) {
setEmailReceiveTimeType(null);
}
} else {
listFilterQuickSearch.add(quickSearchFilter);
if (fromSuggestionBox && quickSearchFilter == QuickSearchFilter.last7Days) {
setEmailReceiveTimeType(EmailReceiveTimeType.last7Days);
}
}
}
void setEmailReceiveTimeType(EmailReceiveTimeType? receiveTimeType) { void setEmailReceiveTimeType(EmailReceiveTimeType? receiveTimeType) {
emailReceiveTimeType.value = receiveTimeType; emailReceiveTimeType.value = receiveTimeType;
} }
bool quickSearchFilterForLast7DaysIsActive () {
return listFilterQuickSearch.contains(QuickSearchFilter.last7Days)
&& emailReceiveTimeType.value != null;
}
bool quickSearchFilterForHasAttachmentIsActive () {
return listFilterQuickSearch.contains(QuickSearchFilter.hasAttachment)
|| filterMessageOption.value == FilterMessageOption.attachments;
}
bool quickSearchFilterForFromMeIsActive () {
return listFilterQuickSearch.contains(QuickSearchFilter.fromMe);
}
bool filterForHasAttachmentIsActive () {
return quickSearchFilterForHasAttachmentIsActive() || filterMessageWithAttachmentIsActive();
}
bool filterMessageWithAttachmentIsActive () { bool filterMessageWithAttachmentIsActive () {
return filterMessageOption.value == FilterMessageOption.attachments; return filterMessageOption.value == FilterMessageOption.attachments;
} }
@@ -594,8 +460,6 @@ class MailboxDashBoardController extends ReloadableController {
_emailReceiveManager.closeEmailReceiveManagerStream(); _emailReceiveManager.closeEmailReceiveManagerStream();
_emailReceiveManagerStreamSubscription.cancel(); _emailReceiveManagerStreamSubscription.cancel();
_connectivityStreamSubscription.cancel(); _connectivityStreamSubscription.cancel();
searchInputController.dispose();
searchFocus.dispose();
super.onClose(); super.onClose();
} }
} }
@@ -9,8 +9,12 @@ import 'package:jmap_dart_client/jmap/mail/email/email_comparator.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_comparator_property.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_comparator_property.dart';
import 'package:model/model.dart'; import 'package:model/model.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:tmail_ui_user/features/base/base_controller.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/quick_search_email_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/quick_search_email_state.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/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/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';
@@ -22,6 +26,8 @@ import 'package:tmail_ui_user/features/thread/presentation/model/search_status.d
class SearchController extends BaseController { class SearchController extends BaseController {
final QuickSearchEmailInteractor _quickSearchEmailInteractor; final QuickSearchEmailInteractor _quickSearchEmailInteractor;
final SaveRecentSearchInteractor _saveRecentSearchInteractor;
final GetAllRecentSearchLatestInteractor _getAllRecentSearchLatestInteractor;
final _mailboxDashBoardController = Get.find<MailboxDashBoardController>(); final _mailboxDashBoardController = Get.find<MailboxDashBoardController>();
@@ -37,14 +43,23 @@ class SearchController extends BaseController {
get _userProfile => _mailboxDashBoardController.userProfile; get _userProfile => _mailboxDashBoardController.userProfile;
FocusNode searchFocus = FocusNode(); get searchEmailFilterValue => searchEmailFilter.value;
SearchEmailFilter get searchEmailFilterValue => searchEmailFilter.value; FocusNode searchFocus = FocusNode();
SearchQuery? searchQuery;
SearchController( SearchController(
this._quickSearchEmailInteractor, this._quickSearchEmailInteractor,
this._saveRecentSearchInteractor,
this._getAllRecentSearchLatestInteractor,
); );
@override
void onInit() {
_registerSearchFocusListener();
super.onInit();
}
selectOpenAdvanceSearch() { selectOpenAdvanceSearch() {
isAdvancedSearchViewOpen.toggle(); isAdvancedSearchViewOpen.toggle();
} }
@@ -121,7 +136,7 @@ class SearchController extends BaseController {
); );
} }
void registerSearchFocusListener() { void _registerSearchFocusListener() {
searchFocus.addListener(() { searchFocus.addListener(() {
final hasFocus = searchFocus.hasFocus; final hasFocus = searchFocus.hasFocus;
final query = searchEmailFilter.value.text?.value; final query = searchEmailFilter.value.text?.value;
@@ -179,6 +194,19 @@ class SearchController extends BaseController {
} }
} }
void saveRecentSearch(RecentSearch recentSearch) {
consumeState(_saveRecentSearchInteractor.execute(recentSearch));
}
Future<List<RecentSearch>> getAllRecentSearchAction(String pattern) async {
return await _getAllRecentSearchLatestInteractor.execute(pattern: pattern)
.then((result) => result.fold(
(failure) => <RecentSearch>[],
(success) => success is GetAllRecentSearchLatestSuccess
? success.listRecentSearch
: <RecentSearch>[]));
}
@override @override
void onDone() {} void onDone() {}
@@ -78,6 +78,8 @@ class MailboxDashBoardBindings extends BaseBindings {
void bindingsController() { void bindingsController() {
Get.put(SearchController( Get.put(SearchController(
Get.find<QuickSearchEmailInteractor>(), Get.find<QuickSearchEmailInteractor>(),
Get.find<SaveRecentSearchInteractor>(),
Get.find<GetAllRecentSearchLatestInteractor>(),
)); ));
Get.put(MailboxDashBoardController( Get.put(MailboxDashBoardController(
Get.find<LogoutOidcInteractor>(), Get.find<LogoutOidcInteractor>(),
@@ -85,9 +87,6 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<GetAuthenticatedAccountInteractor>(), Get.find<GetAuthenticatedAccountInteractor>(),
Get.find<MoveToMailboxInteractor>(), Get.find<MoveToMailboxInteractor>(),
Get.find<DeleteEmailPermanentlyInteractor>(), Get.find<DeleteEmailPermanentlyInteractor>(),
Get.find<SaveRecentSearchInteractor>(),
Get.find<GetAllRecentSearchLatestInteractor>(),
Get.find<QuickSearchEmailInteractor>(),
Get.find<MarkAsMailboxReadInteractor>(), Get.find<MarkAsMailboxReadInteractor>(),
)); ));
} }