diff --git a/core/lib/data/model/source_type/data_source_type.dart b/core/lib/data/model/source_type/data_source_type.dart index 1d273da48..92e0723c7 100644 --- a/core/lib/data/model/source_type/data_source_type.dart +++ b/core/lib/data/model/source_type/data_source_type.dart @@ -1,5 +1,6 @@ enum DataSourceType { network, - local + local, + cache } \ No newline at end of file diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index dae059b77..b3ff8e2d5 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -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'); diff --git a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart index c9137a863..92ae8017a 100644 --- a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart +++ b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart @@ -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(), Get.find(), Get.find(), - Get.find() - )); + Get.find(), + Get.find())); + Get.put(MailboxDashBoardController( Get.find(), Get.find(), @@ -221,6 +224,9 @@ class MailboxDashBoardBindings extends BaseBindings { Get.find(), Get.find(), )); + Get.lazyPut(() => SpamReportCacheDataSourceImpl( + Get.find(), + Get.find())); } @override @@ -293,6 +299,7 @@ class MailboxDashBoardBindings extends BaseBindings { Get.find())); Get.lazyPut(() => GetSpamReportStateInteractor( Get.find())); + Get.lazyPut(() => GetSpamMailboxCachedInteractor(Get.find())); Get.lazyPut(() => SendEmailInteractor( Get.find(), Get.find() @@ -340,7 +347,8 @@ class MailboxDashBoardBindings extends BaseBindings { Get.lazyPut(() => SpamReportRepositoryImpl( { DataSourceType.network: Get.find(), - DataSourceType.local: Get.find() + DataSourceType.local: Get.find(), + DataSourceType.cache: Get.find() }, )); } diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index f96820c68..6f59a2baf 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -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(); } } diff --git a/lib/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart index f203e2097..452776f0e 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart @@ -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(); final _spamReportState = Rxn(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; diff --git a/lib/main/localizations/app_localizations.dart b/lib/main/localizations/app_localizations.dart index 6fb62cad6..8f3861eee 100644 --- a/lib/main/localizations/app_localizations.dart +++ b/lib/main/localizations/app_localizations.dart @@ -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',