TF-1667 Trigger show spam report banner when mailboxes changed

(cherry picked from commit 6530da92012774a8bd318cd1c87cf1f503feef69)
This commit is contained in:
dab246
2023-04-05 15:33:32 +07:00
committed by Dat Vu
parent 72055cfccb
commit e81296bbaf
6 changed files with 52 additions and 26 deletions
@@ -1,5 +1,6 @@
enum DataSourceType { enum DataSourceType {
network, network,
local local,
cache
} }
@@ -170,8 +170,10 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
(success) async { (success) async {
if (success is GetAllMailboxSuccess) { if (success is GetAllMailboxSuccess) {
_initialMailboxVariableStorage(); _initialMailboxVariableStorage();
mailboxDashBoardController.getSpamReportBanner();
} else if (success is RefreshChangesAllMailboxSuccess) { } else if (success is RefreshChangesAllMailboxSuccess) {
_initialMailboxVariableStorage(isRefreshChange: true); _initialMailboxVariableStorage(isRefreshChange: true);
mailboxDashBoardController.refreshSpamReportBanner();
} else if (success is CreateNewMailboxSuccess) { } else if (success is CreateNewMailboxSuccess) {
_createNewMailboxSuccess(success); _createNewMailboxSuccess(success);
} else if (success is DeleteMultipleMailboxAllSuccess) { } else if (success is DeleteMultipleMailboxAllSuccess) {
@@ -291,7 +293,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
} }
void _refreshMailboxChanges({jmap.State? currentMailboxState}) { void _refreshMailboxChanges({jmap.State? currentMailboxState}) {
mailboxDashBoardController.showSpamReportBanner();
log('MailboxController::_refreshMailboxChanges(): currentMailboxState: $currentMailboxState'); log('MailboxController::_refreshMailboxChanges(): currentMailboxState: $currentMailboxState');
final newMailboxState = currentMailboxState ?? this.currentMailboxState; final newMailboxState = currentMailboxState ?? this.currentMailboxState;
log('MailboxController::_refreshMailboxChanges(): newMailboxState: $newMailboxState'); log('MailboxController::_refreshMailboxChanges(): newMailboxState: $newMailboxState');
@@ -62,6 +62,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/spam_re
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';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/share_preference_spam_report_data_source_impl.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/share_preference_spam_report_data_source_impl.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/spam_report_cache_datasource_impl.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/spam_report_datasource_impl.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/spam_report_datasource_impl.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/share_preference_spam_report_data_source.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/share_preference_spam_report_data_source.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/network/spam_report_api.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/network/spam_report_api.dart';
@@ -74,6 +75,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/spam_
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/get_app_dashboard_configuration_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_app_dashboard_configuration_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/get_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_mailbox_cached_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_report_state_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_report_state_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_unread_spam_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_unread_spam_mailbox_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';
@@ -139,8 +141,9 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<StoreSpamReportInteractor>(), Get.find<StoreSpamReportInteractor>(),
Get.find<GetUnreadSpamMailboxInteractor>(), Get.find<GetUnreadSpamMailboxInteractor>(),
Get.find<StoreSpamReportStateInteractor>(), Get.find<StoreSpamReportStateInteractor>(),
Get.find<GetSpamReportStateInteractor>() Get.find<GetSpamReportStateInteractor>(),
)); Get.find<GetSpamMailboxCachedInteractor>()));
Get.put(MailboxDashBoardController( Get.put(MailboxDashBoardController(
Get.find<LogoutOidcInteractor>(), Get.find<LogoutOidcInteractor>(),
Get.find<DeleteAuthorityOidcInteractor>(), Get.find<DeleteAuthorityOidcInteractor>(),
@@ -221,6 +224,9 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<SharePreferenceSpamReportDataSource>(), Get.find<SharePreferenceSpamReportDataSource>(),
Get.find<CacheExceptionThrower>(), Get.find<CacheExceptionThrower>(),
)); ));
Get.lazyPut(() => SpamReportCacheDataSourceImpl(
Get.find<MailboxCacheManager>(),
Get.find<CacheExceptionThrower>()));
} }
@override @override
@@ -293,6 +299,7 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<SpamReportRepository>())); Get.find<SpamReportRepository>()));
Get.lazyPut(() => GetSpamReportStateInteractor( Get.lazyPut(() => GetSpamReportStateInteractor(
Get.find<SpamReportRepository>())); Get.find<SpamReportRepository>()));
Get.lazyPut(() => GetSpamMailboxCachedInteractor(Get.find<SpamReportRepository>()));
Get.lazyPut(() => SendEmailInteractor( Get.lazyPut(() => SendEmailInteractor(
Get.find<EmailRepository>(), Get.find<EmailRepository>(),
Get.find<MailboxRepository>() Get.find<MailboxRepository>()
@@ -340,7 +347,8 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.lazyPut(() => SpamReportRepositoryImpl( Get.lazyPut(() => SpamReportRepositoryImpl(
{ {
DataSourceType.network: Get.find<SpamReportDataSource>(), DataSourceType.network: Get.find<SpamReportDataSource>(),
DataSourceType.local: Get.find<SharePreferenceSpamReportDataSourceImpl>() DataSourceType.local: Get.find<SharePreferenceSpamReportDataSourceImpl>(),
DataSourceType.cache: Get.find<SpamReportCacheDataSourceImpl>()
}, },
)); ));
} }
@@ -431,13 +431,13 @@ class MailboxDashBoardController extends ReloadableController {
injectVacationBindings(sessionCurrent, accountId.value); injectVacationBindings(sessionCurrent, accountId.value);
injectFCMBindings(sessionCurrent, accountId.value); injectFCMBindings(sessionCurrent, accountId.value);
_getVacationResponse(); _getVacationResponse();
spamReportController.getSpamReportStateAction();
if (!BuildUtils.isWeb && !_notificationManager.isNotificationClickedOnTerminate) { if (!BuildUtils.isWeb && !_notificationManager.isNotificationClickedOnTerminate) {
_handleClickLocalNotificationOnTerminated(); _handleClickLocalNotificationOnTerminated();
} else { } else {
dispatchRoute(DashboardRoutes.thread); dispatchRoute(DashboardRoutes.thread);
} }
showSpamReportBanner();
} else { } else {
dispatchRoute(DashboardRoutes.thread); dispatchRoute(DashboardRoutes.thread);
reload(); reload();
@@ -1195,7 +1195,7 @@ class MailboxDashBoardController extends ReloadableController {
injectFCMBindings(sessionCurrent, accountId.value); injectFCMBindings(sessionCurrent, accountId.value);
injectVacationBindings(sessionCurrent, accountId.value); injectVacationBindings(sessionCurrent, accountId.value);
_getVacationResponse(); _getVacationResponse();
showSpamReportBanner(); spamReportController.getSpamReportStateAction();
} }
void _getRouteParameters() { void _getRouteParameters() {
@@ -1588,9 +1588,17 @@ class MailboxDashBoardController extends ReloadableController {
bool get enableSpamReport => spamReportController.enableSpamReport; bool get enableSpamReport => spamReportController.enableSpamReport;
void showSpamReportBanner() { void getSpamReportBanner() {
if (spamReportController.enableSpamReport &&
sessionCurrent != null &&
accountId.value != null) {
spamReportController.getSpamMailboxAction(sessionCurrent!, accountId.value!);
}
}
void refreshSpamReportBanner() {
if (spamReportController.enableSpamReport) { if (spamReportController.enableSpamReport) {
spamReportController.getUnreadSpamMailboxAction(sessionCurrent!, accountId.value!); spamReportController.getSpamMailboxCached();
} }
} }
@@ -1,4 +1,3 @@
import 'package:core/utils/app_logger.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/account_id.dart';
@@ -10,9 +9,11 @@ import 'package:model/mailbox/presentation_mailbox.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/spam_report_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_number_of_unread_spam_emails_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_number_of_unread_spam_emails_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_spam_mailbox_cached_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_spam_report_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_spam_report_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/store_last_time_dismissed_spam_reported_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/store_last_time_dismissed_spam_reported_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/store_spam_report_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/store_spam_report_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_mailbox_cached_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_report_state_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_report_state_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_unread_spam_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_unread_spam_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_last_time_dismissed_spam_reported_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_last_time_dismissed_spam_reported_interactor.dart';
@@ -24,35 +25,38 @@ class SpamReportController extends BaseController {
final GetUnreadSpamMailboxInteractor _getNumberOfUnreadSpamEmailsInteractor; final GetUnreadSpamMailboxInteractor _getNumberOfUnreadSpamEmailsInteractor;
final StoreSpamReportStateInteractor _storeSpamReportStateInteractor; final StoreSpamReportStateInteractor _storeSpamReportStateInteractor;
final GetSpamReportStateInteractor _getSpamReportStateInteractor; final GetSpamReportStateInteractor _getSpamReportStateInteractor;
final GetSpamMailboxCachedInteractor _getSpamMailboxCachedInteractor;
final _presentationSpamMailbox = Rxn<PresentationMailbox>(); final _presentationSpamMailbox = Rxn<PresentationMailbox>();
final _spamReportState = Rxn<SpamReportState>(SpamReportState.enabled); final _spamReportState = Rxn<SpamReportState>(SpamReportState.enabled);
SpamReportController( SpamReportController(
this._storeSpamReportInteractor, this._storeSpamReportInteractor,
this._getNumberOfUnreadSpamEmailsInteractor, this._getNumberOfUnreadSpamEmailsInteractor,
this._storeSpamReportStateInteractor, this._storeSpamReportStateInteractor,
this._getSpamReportStateInteractor); this._getSpamReportStateInteractor,
this._getSpamMailboxCachedInteractor
);
@override @override
void onDone() { void onDone() {
viewState.value.fold( viewState.value.fold(
(failure) { (failure) {
logError('SpamReportController::onDone(): failure: $failure'); if (failure is GetUnreadSpamMailboxFailure || failure is GetSpamMailboxCachedFailure) {
_presentationSpamMailbox.value = null;
}
}, },
(success) { (success) {
if(success is GetUnreadSpamMailboxSuccess){ if (success is GetUnreadSpamMailboxSuccess){
_presentationSpamMailbox.value = success.unreadSpamMailbox.toPresentationMailbox(); _presentationSpamMailbox.value = success.unreadSpamMailbox.toPresentationMailbox();
log('SpamReportController::GetNumberOfUnreadSpamEmailsSuccess():success $success');
} else if (success is StoreLastTimeDismissedSpamReportSuccess) { } else if (success is StoreLastTimeDismissedSpamReportSuccess) {
_presentationSpamMailbox.value = null; _presentationSpamMailbox.value = null;
log('SpamReportController::StoreLastTimeDismissedSpamReportSuccess():success $success');
} else if (success is GetSpamReportStateSuccess) { } else if (success is GetSpamReportStateSuccess) {
_spamReportState.value = success.spamReportState; _spamReportState.value = success.spamReportState;
log('SpamReportController::GetSpamReportStateSuccess():success $success');
} else if (success is StoreSpamReportStateSuccess) { } else if (success is StoreSpamReportStateSuccess) {
_spamReportState.value = success.spamReportState; _spamReportState.value = success.spamReportState;
log('SpamReportController::StoreSpamReportStateSuccess():success $success'); } else if (success is GetSpamMailboxCachedSuccess) {
_presentationSpamMailbox.value = success.spamMailbox.toPresentationMailbox();
} }
}, },
); );
@@ -66,6 +70,8 @@ class SpamReportController extends BaseController {
final accountId = mailboxDashBoardController.accountId.value; final accountId = mailboxDashBoardController.accountId.value;
if (spamMailbox != null && session != null && accountId != null) { if (spamMailbox != null && session != null && accountId != null) {
_storeLastTimeDismissedSpamReportedAction();
mailboxDashBoardController.markAsReadMailbox( mailboxDashBoardController.markAsReadMailbox(
session, session,
accountId, accountId,
@@ -78,13 +84,15 @@ class SpamReportController extends BaseController {
} }
} }
void getUnreadSpamMailboxAction(Session session, AccountId accountId) { void getSpamMailboxAction(Session session, AccountId accountId) {
final mailboxFilterCondition = MailboxFilterCondition(role: Role('Spam'));
getSpamReportStateAction();
consumeState(_getNumberOfUnreadSpamEmailsInteractor.execute( consumeState(_getNumberOfUnreadSpamEmailsInteractor.execute(
session, session,
accountId, accountId,
mailboxFilterCondition: mailboxFilterCondition)); mailboxFilterCondition: MailboxFilterCondition(role: Role('Spam'))));
}
void getSpamMailboxCached() {
consumeState(_getSpamMailboxCachedInteractor.execute());
} }
void _storeLastTimeDismissedSpamReportedAction() { void _storeLastTimeDismissedSpamReportedAction() {
@@ -93,7 +101,7 @@ class SpamReportController extends BaseController {
bool get notShowSpamReportBanner => _presentationSpamMailbox.value == null; bool get notShowSpamReportBanner => _presentationSpamMailbox.value == null;
int get numberOfUnreadSpamEmails => (_presentationSpamMailbox.value?.unreadEmails?.value.value ?? 0).toInt(); String get numberOfUnreadSpamEmails => _presentationSpamMailbox.value?.getCountUnReadEmails() ?? '';
bool get enableSpamReport => _spamReportState.value == SpamReportState.enabled; bool get enableSpamReport => _spamReportState.value == SpamReportState.enabled;
@@ -2662,7 +2662,7 @@ class AppLocalizations {
); );
} }
String countNewSpamEmails(int count,) { String countNewSpamEmails(String count) {
return Intl.message( return Intl.message(
'You have $count new spam emails!', 'You have $count new spam emails!',
name: 'countNewSpamEmails', name: 'countNewSpamEmails',