From 890ca4c8cd628cf26616d696ceae935c197c334d Mon Sep 17 00:00:00 2001 From: HuyNguyen Date: Tue, 21 Mar 2023 22:18:51 +0700 Subject: [PATCH] TF-1604: Add requiredCapabilities support TeamMailbox for spam report (cherry picked from commit a05e1df1b9f6730978f2172aad36fb6c3e3249d4) --- .../datasource/spam_report_datasource.dart | 2 ++ ...eference_spam_report_data_source_impl.dart | 2 ++ .../spam_report_datasource_impl.dart | 7 ++++++- ...re_preference_spam_report_data_source.dart | 2 ++ .../data/network/spam_report_api.dart | 19 ++++++++++++++++++- .../spam_report_repository_impl.dart | 9 ++++++--- .../repository/spam_report_repository.dart | 2 ++ .../get_unread_spam_mailbox_interactor.dart | 8 +++++++- .../mailbox_dashboard_controller.dart | 2 +- .../controller/spam_report_controller.dart | 8 ++++++-- 10 files changed, 52 insertions(+), 9 deletions(-) diff --git a/lib/features/mailbox_dashboard/data/datasource/spam_report_datasource.dart b/lib/features/mailbox_dashboard/data/datasource/spam_report_datasource.dart index 1319a4022..3918fe39d 100644 --- a/lib/features/mailbox_dashboard/data/datasource/spam_report_datasource.dart +++ b/lib/features/mailbox_dashboard/data/datasource/spam_report_datasource.dart @@ -1,4 +1,5 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_filter_condition.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart'; @@ -12,6 +13,7 @@ abstract class SpamReportDataSource { Future deleteLastTimeDismissedSpamReported(); Future findNumberOfUnreadSpamEmails( + Session session, AccountId accountId, { MailboxFilterCondition? mailboxFilterCondition, diff --git a/lib/features/mailbox_dashboard/data/datasource_impl/share_preference_spam_report_data_source_impl.dart b/lib/features/mailbox_dashboard/data/datasource_impl/share_preference_spam_report_data_source_impl.dart index 0dee5b25b..04f726f92 100644 --- a/lib/features/mailbox_dashboard/data/datasource_impl/share_preference_spam_report_data_source_impl.dart +++ b/lib/features/mailbox_dashboard/data/datasource_impl/share_preference_spam_report_data_source_impl.dart @@ -1,4 +1,5 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_filter_condition.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/spam_report_datasource.dart'; @@ -35,6 +36,7 @@ class SharePreferenceSpamReportDataSourceImpl extends SpamReportDataSource { @override Future findNumberOfUnreadSpamEmails( + Session session, AccountId accountId, { MailboxFilterCondition? mailboxFilterCondition, diff --git a/lib/features/mailbox_dashboard/data/datasource_impl/spam_report_datasource_impl.dart b/lib/features/mailbox_dashboard/data/datasource_impl/spam_report_datasource_impl.dart index 8e5389933..eaa9d2d24 100644 --- a/lib/features/mailbox_dashboard/data/datasource_impl/spam_report_datasource_impl.dart +++ b/lib/features/mailbox_dashboard/data/datasource_impl/spam_report_datasource_impl.dart @@ -1,5 +1,6 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_filter_condition.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/spam_report_datasource.dart'; @@ -21,6 +22,7 @@ class SpamReportDataSourceImpl extends SpamReportDataSource { @override Future findNumberOfUnreadSpamEmails( + Session session, AccountId accountId, { MailboxFilterCondition? mailboxFilterCondition, @@ -29,7 +31,10 @@ class SpamReportDataSourceImpl extends SpamReportDataSource { ) { return Future.sync(() async { final unreadSpamEmailsResponse = await _spamReportApi.getUnreadSpamEmailbox( - accountId, mailboxFilterCondition: mailboxFilterCondition, limit: limit); + session, + accountId, + mailboxFilterCondition: mailboxFilterCondition, + limit: limit); return unreadSpamEmailsResponse; }).catchError(_exceptionThrower.throwException); } diff --git a/lib/features/mailbox_dashboard/data/local/share_preference_spam_report_data_source.dart b/lib/features/mailbox_dashboard/data/local/share_preference_spam_report_data_source.dart index 36b97066f..6cec015cd 100644 --- a/lib/features/mailbox_dashboard/data/local/share_preference_spam_report_data_source.dart +++ b/lib/features/mailbox_dashboard/data/local/share_preference_spam_report_data_source.dart @@ -1,4 +1,5 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_filter_condition.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -32,6 +33,7 @@ class SharePreferenceSpamReportDataSource extends SpamReportDataSource { @override Future findNumberOfUnreadSpamEmails( + Session session, AccountId accountId, { MailboxFilterCondition? mailboxFilterCondition, diff --git a/lib/features/mailbox_dashboard/data/network/spam_report_api.dart b/lib/features/mailbox_dashboard/data/network/spam_report_api.dart index 911f2387b..a3032fd61 100644 --- a/lib/features/mailbox_dashboard/data/network/spam_report_api.dart +++ b/lib/features/mailbox_dashboard/data/network/spam_report_api.dart @@ -1,6 +1,8 @@ import 'package:jmap_dart_client/http/http_client.dart'; 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/request/reference_path.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/jmap_request.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/get/get_mailbox_method.dart'; @@ -8,6 +10,7 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/get/get_mailbox_response.dart import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_filter_condition.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/query/query_mailbox_method.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/unread_spam_emails_response.dart'; +import 'package:tmail_ui_user/main/error/capability_validator.dart'; class SpamReportApi { final HttpClient _httpClient; @@ -16,6 +19,7 @@ class SpamReportApi { SpamReportApi(this._httpClient); Future getUnreadSpamEmailbox( + Session session, AccountId accountId, { MailboxFilterCondition? mailboxFilterCondition, @@ -36,7 +40,7 @@ class SpamReportApi { )); final getMailboxInvocation = requestBuilder.invocation(getMailBoxMethod); final result = await (requestBuilder - ..usings(getMailBoxMethod.requiredCapabilities)) + ..usings(_capabilitiesForMailboxMethod(session, accountId))) .build() .execute(); @@ -50,4 +54,17 @@ class SpamReportApi { throw error; }); } + + Set _capabilitiesForMailboxMethod(Session session, AccountId accountId) { + final getMailboxCreated = GetMailboxMethod(accountId); + try { + requireCapability( + session, + accountId, + [CapabilityIdentifier.jmapTeamMailboxes]); + return getMailboxCreated.requiredCapabilitiesSupportTeamMailboxes; + } catch (_) { + return getMailboxCreated.requiredCapabilities; + } + } } \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/data/repository/spam_report_repository_impl.dart b/lib/features/mailbox_dashboard/data/repository/spam_report_repository_impl.dart index e62408ac4..4e479a045 100644 --- a/lib/features/mailbox_dashboard/data/repository/spam_report_repository_impl.dart +++ b/lib/features/mailbox_dashboard/data/repository/spam_report_repository_impl.dart @@ -1,5 +1,6 @@ import 'package:core/data/model/source_type/data_source_type.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_filter_condition.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/spam_report_datasource.dart'; @@ -29,6 +30,7 @@ class SpamReportRepositoryImpl extends SpamReportRepository { @override Future getUnreadSpamMailbox( + Session session, AccountId accountId, { MailboxFilterCondition? mailboxFilterCondition, @@ -36,9 +38,10 @@ class SpamReportRepositoryImpl extends SpamReportRepository { } ) { return mapDataSource[DataSourceType.network]!.findNumberOfUnreadSpamEmails( - accountId, - mailboxFilterCondition: mailboxFilterCondition, - limit: limit); + session, + accountId, + mailboxFilterCondition: mailboxFilterCondition, + limit: limit); } @override diff --git a/lib/features/mailbox_dashboard/domain/repository/spam_report_repository.dart b/lib/features/mailbox_dashboard/domain/repository/spam_report_repository.dart index f814a0fa0..6fde03871 100644 --- a/lib/features/mailbox_dashboard/domain/repository/spam_report_repository.dart +++ b/lib/features/mailbox_dashboard/domain/repository/spam_report_repository.dart @@ -1,4 +1,5 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_filter_condition.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart'; @@ -12,6 +13,7 @@ abstract class SpamReportRepository { Future deleteLastTimeDismissedSpamReported(); Future getUnreadSpamMailbox( + Session session, AccountId accountId, { MailboxFilterCondition? mailboxFilterCondition, diff --git a/lib/features/mailbox_dashboard/domain/usecases/get_unread_spam_mailbox_interactor.dart b/lib/features/mailbox_dashboard/domain/usecases/get_unread_spam_mailbox_interactor.dart index adca4bfc2..23c2596a9 100644 --- a/lib/features/mailbox_dashboard/domain/usecases/get_unread_spam_mailbox_interactor.dart +++ b/lib/features/mailbox_dashboard/domain/usecases/get_unread_spam_mailbox_interactor.dart @@ -3,6 +3,7 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:dartz/dartz.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_filter_condition.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/spam_report_repository.dart'; @@ -15,6 +16,7 @@ class GetUnreadSpamMailboxInteractor { GetUnreadSpamMailboxInteractor(this._spamReportRepository); Stream> execute( + Session session, AccountId accountId, { UnsignedInt? limit, @@ -29,7 +31,11 @@ class GetUnreadSpamMailboxInteractor { final checkTimeCondition = (timeLast.inHours > 0) && (timeLast.inHours > conditionsForDisplayingSpamReportBanner); if (checkTimeCondition) { - final response = await _spamReportRepository.getUnreadSpamMailbox(accountId, mailboxFilterCondition: mailboxFilterCondition, limit: limit); + final response = await _spamReportRepository.getUnreadSpamMailbox( + session, + accountId, + mailboxFilterCondition: mailboxFilterCondition, + limit: limit); final unreadSpamMailbox = response.unreadSpamMailbox; if (unreadSpamMailbox!.unreadEmails!.value.value > 0) { 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 799c4dc04..8d95ecdbc 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -1551,7 +1551,7 @@ class MailboxDashBoardController extends ReloadableController { void showSpamReportBanner() { if (spamReportController.enableSpamReport) { - spamReportController.getUnreadSpamMailboxAction(accountId.value!); + spamReportController.getUnreadSpamMailboxAction(sessionCurrent!, accountId.value!); } } 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 a8e5b604c..cbc5ef6e3 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart @@ -2,6 +2,7 @@ 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'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_filter_condition.dart'; import 'package:model/extensions/mailbox_extension.dart'; @@ -61,10 +62,13 @@ class SpamReportController extends BaseController { _storeLastTimeDismissedSpamReportedAction(); } - void getUnreadSpamMailboxAction(AccountId accountId) { + void getUnreadSpamMailboxAction(Session session, AccountId accountId) { final mailboxFilterCondition = MailboxFilterCondition(role: Role('Spam')); getSpamReportStateAction(); - consumeState(_getNumberOfUnreadSpamEmailsInteractor.execute(accountId,mailboxFilterCondition: mailboxFilterCondition)); + consumeState(_getNumberOfUnreadSpamEmailsInteractor.execute( + session, + accountId, + mailboxFilterCondition: mailboxFilterCondition)); } void _storeLastTimeDismissedSpamReportedAction() {