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 {
network,
local
local,
cache
}
@@ -170,8 +170,10 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
(success) async {
if (success is GetAllMailboxSuccess) {
_initialMailboxVariableStorage();
mailboxDashBoardController.getSpamReportBanner();
} else if (success is RefreshChangesAllMailboxSuccess) {
_initialMailboxVariableStorage(isRefreshChange: true);
mailboxDashBoardController.refreshSpamReportBanner();
} else if (success is CreateNewMailboxSuccess) {
_createNewMailboxSuccess(success);
} else if (success is DeleteMultipleMailboxAllSuccess) {
@@ -291,7 +293,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
}
void _refreshMailboxChanges({jmap.State? currentMailboxState}) {
mailboxDashBoardController.showSpamReportBanner();
log('MailboxController::_refreshMailboxChanges(): currentMailboxState: $currentMailboxState');
final newMailboxState = currentMailboxState ?? this.currentMailboxState;
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/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/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/local/share_preference_spam_report_data_source.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_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_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_unread_spam_mailbox_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<GetUnreadSpamMailboxInteractor>(),
Get.find<StoreSpamReportStateInteractor>(),
Get.find<GetSpamReportStateInteractor>()
));
Get.find<GetSpamReportStateInteractor>(),
Get.find<GetSpamMailboxCachedInteractor>()));
Get.put(MailboxDashBoardController(
Get.find<LogoutOidcInteractor>(),
Get.find<DeleteAuthorityOidcInteractor>(),
@@ -221,6 +224,9 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<SharePreferenceSpamReportDataSource>(),
Get.find<CacheExceptionThrower>(),
));
Get.lazyPut(() => SpamReportCacheDataSourceImpl(
Get.find<MailboxCacheManager>(),
Get.find<CacheExceptionThrower>()));
}
@override
@@ -293,6 +299,7 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<SpamReportRepository>()));
Get.lazyPut(() => GetSpamReportStateInteractor(
Get.find<SpamReportRepository>()));
Get.lazyPut(() => GetSpamMailboxCachedInteractor(Get.find<SpamReportRepository>()));
Get.lazyPut(() => SendEmailInteractor(
Get.find<EmailRepository>(),
Get.find<MailboxRepository>()
@@ -340,7 +347,8 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.lazyPut(() => SpamReportRepositoryImpl(
{
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);
injectFCMBindings(sessionCurrent, accountId.value);
_getVacationResponse();
spamReportController.getSpamReportStateAction();
if (!BuildUtils.isWeb && !_notificationManager.isNotificationClickedOnTerminate) {
_handleClickLocalNotificationOnTerminated();
} else {
dispatchRoute(DashboardRoutes.thread);
}
showSpamReportBanner();
} else {
dispatchRoute(DashboardRoutes.thread);
reload();
@@ -1195,7 +1195,7 @@ class MailboxDashBoardController extends ReloadableController {
injectFCMBindings(sessionCurrent, accountId.value);
injectVacationBindings(sessionCurrent, accountId.value);
_getVacationResponse();
showSpamReportBanner();
spamReportController.getSpamReportStateAction();
}
void _getRouteParameters() {
@@ -1588,9 +1588,17 @@ class MailboxDashBoardController extends ReloadableController {
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) {
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:get/get.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/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_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/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/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_unread_spam_mailbox_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 StoreSpamReportStateInteractor _storeSpamReportStateInteractor;
final GetSpamReportStateInteractor _getSpamReportStateInteractor;
final GetSpamMailboxCachedInteractor _getSpamMailboxCachedInteractor;
final _presentationSpamMailbox = Rxn<PresentationMailbox>();
final _spamReportState = Rxn<SpamReportState>(SpamReportState.enabled);
SpamReportController(
this._storeSpamReportInteractor,
this._getNumberOfUnreadSpamEmailsInteractor,
this._storeSpamReportStateInteractor,
this._getSpamReportStateInteractor);
this._storeSpamReportInteractor,
this._getNumberOfUnreadSpamEmailsInteractor,
this._storeSpamReportStateInteractor,
this._getSpamReportStateInteractor,
this._getSpamMailboxCachedInteractor
);
@override
void onDone() {
viewState.value.fold(
(failure) {
logError('SpamReportController::onDone(): failure: $failure');
if (failure is GetUnreadSpamMailboxFailure || failure is GetSpamMailboxCachedFailure) {
_presentationSpamMailbox.value = null;
}
},
(success) {
if(success is GetUnreadSpamMailboxSuccess){
if (success is GetUnreadSpamMailboxSuccess){
_presentationSpamMailbox.value = success.unreadSpamMailbox.toPresentationMailbox();
log('SpamReportController::GetNumberOfUnreadSpamEmailsSuccess():success $success');
} else if (success is StoreLastTimeDismissedSpamReportSuccess) {
_presentationSpamMailbox.value = null;
log('SpamReportController::StoreLastTimeDismissedSpamReportSuccess():success $success');
} else if (success is GetSpamReportStateSuccess) {
_spamReportState.value = success.spamReportState;
log('SpamReportController::GetSpamReportStateSuccess():success $success');
} else if (success is StoreSpamReportStateSuccess) {
_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;
if (spamMailbox != null && session != null && accountId != null) {
_storeLastTimeDismissedSpamReportedAction();
mailboxDashBoardController.markAsReadMailbox(
session,
accountId,
@@ -78,13 +84,15 @@ class SpamReportController extends BaseController {
}
}
void getUnreadSpamMailboxAction(Session session, AccountId accountId) {
final mailboxFilterCondition = MailboxFilterCondition(role: Role('Spam'));
getSpamReportStateAction();
void getSpamMailboxAction(Session session, AccountId accountId) {
consumeState(_getNumberOfUnreadSpamEmailsInteractor.execute(
session,
accountId,
mailboxFilterCondition: mailboxFilterCondition));
mailboxFilterCondition: MailboxFilterCondition(role: Role('Spam'))));
}
void getSpamMailboxCached() {
consumeState(_getSpamMailboxCachedInteractor.execute());
}
void _storeLastTimeDismissedSpamReportedAction() {
@@ -93,7 +101,7 @@ class SpamReportController extends BaseController {
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;
@@ -2662,7 +2662,7 @@ class AppLocalizations {
);
}
String countNewSpamEmails(int count,) {
String countNewSpamEmails(String count) {
return Intl.message(
'You have $count new spam emails!',
name: 'countNewSpamEmails',