TF-1362: [Presentation] : Implement StoreLastTimeDismissed and show detail for spam report banner
This commit is contained in:
@@ -1,8 +1,3 @@
|
||||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<mask id="mask0_8836_28106" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="2" y="1" width="21" height="22">
|
||||
<path d="M12.5001 1.71423C18.1807 1.71423 22.7858 6.3193 22.7858 11.9999C22.7858 17.6806 18.1807 22.2857 12.5001 22.2857C6.81943 22.2857 2.21436 17.6806 2.21436 11.9999C2.21436 6.3193 6.81943 1.71423 12.5001 1.71423ZM12.5001 3.42852C7.7662 3.42852 3.92864 7.26608 3.92864 11.9999C3.92864 16.7338 7.7662 20.5714 12.5001 20.5714C17.2339 20.5714 21.0715 16.7338 21.0715 11.9999C21.0715 7.26608 17.2339 3.42852 12.5001 3.42852ZM12.5632 10.2857C12.7668 10.2857 12.8947 10.3175 13.0064 10.3773C13.1182 10.437 13.2059 10.5247 13.2656 10.6365C13.3254 10.7482 13.3572 10.876 13.3572 11.0797V16.3488C13.3572 16.5524 13.3254 16.6803 13.2656 16.792C13.2059 16.9038 13.1182 16.9915 13.0064 17.0512C12.8947 17.111 12.7668 17.1428 12.5632 17.1428H12.437C12.2333 17.1428 12.1055 17.111 11.9937 17.0512C11.882 16.9915 11.7943 16.9038 11.7345 16.792C11.6748 16.6803 11.6429 16.5524 11.6429 16.3488V11.0797C11.6429 10.876 11.6748 10.7482 11.7345 10.6365C11.7943 10.5247 11.882 10.437 11.9937 10.3773C12.1055 10.3175 12.2333 10.2857 12.437 10.2857H12.5632ZM12.5001 6.51423C13.1628 6.51423 13.7001 7.05149 13.7001 7.71423C13.7001 8.37698 13.1628 8.91423 12.5001 8.91423C11.8373 8.91423 11.3001 8.37698 11.3001 7.71423C11.3001 7.05149 11.8373 6.51423 12.5001 6.51423Z" fill="#007AFF"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0_8836_28106)">
|
||||
<rect x="0.5" width="24" height="24" fill="#007AFF"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -269,6 +269,8 @@ class MailboxController extends BaseMailboxController {
|
||||
refreshMailboxChanges();
|
||||
}
|
||||
mailboxDashBoardController.clearMailboxUIAction();
|
||||
} else if (action is OpenSpamMailboxAction){
|
||||
openMailbox(action.context, action.presentationMailbox);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
+2
-2
@@ -6,11 +6,11 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/share_prefer
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/unread_spam_emails_response.dart';
|
||||
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
|
||||
|
||||
class LocalSpamReportDataSourceImpl extends SpamReportDataSource {
|
||||
class SharePreferenceSpamReportDataSourceImpl extends SpamReportDataSource {
|
||||
final SharePreferenceSpamReportDataSource _sharePreferenceSpamReportDataSource;
|
||||
final ExceptionThrower _exceptionThrower;
|
||||
|
||||
LocalSpamReportDataSourceImpl(this._sharePreferenceSpamReportDataSource, this._exceptionThrower);
|
||||
SharePreferenceSpamReportDataSourceImpl(this._sharePreferenceSpamReportDataSource, this._exceptionThrower);
|
||||
@override
|
||||
Future<DateTime> getLastTimeDismissedSpamReported() async {
|
||||
return Future.sync(() async {
|
||||
+1
-1
@@ -27,7 +27,7 @@ class SpamReportDataSourceImpl extends SpamReportDataSource {
|
||||
}
|
||||
) {
|
||||
return Future.sync(() async {
|
||||
final _unreadSpamEmailsResponse = await _spamReportApi.findNumberOfUnreadSpamEmails(
|
||||
final _unreadSpamEmailsResponse = await _spamReportApi.getUnreadSpamEmailbox(
|
||||
accountId, mailboxFilterCondition: mailboxFilterCondition, limit: limit);
|
||||
return _unreadSpamEmailsResponse;
|
||||
}).catchError((error) {
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ class SharePreferenceSpamReportDataSource extends SpamReportDataSource {
|
||||
|
||||
@override
|
||||
Future<bool> storeLastTimeDismissedSpamReported(DateTime lastTimeDismissedSpamReported) async {
|
||||
final _timeStamp = lastTimeDismissedSpamReported.microsecondsSinceEpoch;
|
||||
final _timeStamp = lastTimeDismissedSpamReported.millisecondsSinceEpoch;
|
||||
return await _sharedPreferences.setInt(MailboxDashboardConstant.keyLastTimeDismissedSpamReported,_timeStamp);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
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/request/reference_path.dart';
|
||||
@@ -12,10 +11,11 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/unread_spa
|
||||
|
||||
class SpamReportApi {
|
||||
final HttpClient _httpClient;
|
||||
static const int _deafaultLimit = 1;
|
||||
|
||||
SpamReportApi(this._httpClient);
|
||||
|
||||
Future<UnreadSpamEmailsResponse> findNumberOfUnreadSpamEmails(
|
||||
Future<UnreadSpamEmailsResponse> getUnreadSpamEmailbox(
|
||||
AccountId accountId,
|
||||
{
|
||||
MailboxFilterCondition? mailboxFilterCondition,
|
||||
@@ -24,11 +24,11 @@ class SpamReportApi {
|
||||
) async {
|
||||
final processingInvocation = ProcessingInvocation();
|
||||
final requestBuilder = JmapRequestBuilder(_httpClient, processingInvocation);
|
||||
final spamReportQueryMethod = QueryMailboxMethod(accountId)..addLimit(limit ?? UnsignedInt(_deafaultLimit));
|
||||
|
||||
final spamReportQueryMethod = QueryMailboxMethod(accountId)..addLimit(limit ?? UnsignedInt(1));
|
||||
if(mailboxFilterCondition != null) spamReportQueryMethod.addFilters(mailboxFilterCondition);
|
||||
|
||||
final spamReportQueryMethodInvocation = requestBuilder.invocation(spamReportQueryMethod);
|
||||
|
||||
final getMailBoxMethod = GetMailboxMethod(accountId)
|
||||
..addReferenceIds(processingInvocation.createResultReference(
|
||||
spamReportQueryMethodInvocation.methodCallId,
|
||||
@@ -42,11 +42,10 @@ class SpamReportApi {
|
||||
|
||||
final _mailboxResponse = result
|
||||
.parse<GetMailboxResponse>(getMailboxInvocation.methodCallId, GetMailboxResponse.deserialize);
|
||||
|
||||
final _unreadSpamEmailNumber = _mailboxResponse?.list.first.unreadEmails?.value.value.toInt();
|
||||
|
||||
return Future.sync(() async {
|
||||
return UnreadSpamEmailsResponse(unreadSpamEmailNumber: _unreadSpamEmailNumber);
|
||||
final _unreadSpamMailbox = _mailboxResponse?.list.first;
|
||||
return UnreadSpamEmailsResponse(unreadSpamMailbox: _unreadSpamMailbox);
|
||||
}).catchError((error) {
|
||||
throw error;
|
||||
});
|
||||
|
||||
@@ -27,7 +27,7 @@ class SpamReportRepositoryImpl extends SpamReportRepository {
|
||||
}
|
||||
|
||||
@override
|
||||
Future<UnreadSpamEmailsResponse> findNumberOfUnreadSpamEmails(
|
||||
Future<UnreadSpamEmailsResponse> getUnreadSpamMailbox(
|
||||
AccountId accountId,
|
||||
{
|
||||
MailboxFilterCondition? mailboxFilterCondition,
|
||||
@@ -35,6 +35,8 @@ class SpamReportRepositoryImpl extends SpamReportRepository {
|
||||
}
|
||||
) {
|
||||
return mapDataSource[DataSourceType.network]!.findNumberOfUnreadSpamEmails(
|
||||
accountId, mailboxFilterCondition: mailboxFilterCondition, limit: limit);
|
||||
accountId,
|
||||
mailboxFilterCondition: mailboxFilterCondition,
|
||||
limit: limit);
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,14 @@
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
|
||||
class UnreadSpamEmailsResponse with EquatableMixin {
|
||||
final int? unreadSpamEmailNumber;
|
||||
final Mailbox? unreadSpamMailbox;
|
||||
|
||||
UnreadSpamEmailsResponse({
|
||||
this.unreadSpamEmailNumber,
|
||||
this.unreadSpamMailbox,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [unreadSpamEmailNumber];
|
||||
List<Object?> get props => [unreadSpamMailbox];
|
||||
}
|
||||
@@ -10,7 +10,7 @@ abstract class SpamReportRepository {
|
||||
|
||||
Future<void> deleteLastTimeDismissedSpamReported();
|
||||
|
||||
Future<UnreadSpamEmailsResponse> findNumberOfUnreadSpamEmails(
|
||||
Future<UnreadSpamEmailsResponse> getUnreadSpamMailbox(
|
||||
AccountId accountId,
|
||||
{
|
||||
MailboxFilterCondition? mailboxFilterCondition,
|
||||
|
||||
+8
-7
@@ -1,15 +1,16 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
|
||||
class GetNumberOfUnreadSpamEmailsLoading extends UIState {}
|
||||
class GetUnreadSpamMailboxLoading extends UIState {}
|
||||
|
||||
class GetNumberOfUnreadSpamEmailsSuccess extends UIState {
|
||||
final int unreadSpamEmailNumber;
|
||||
class GetUnreadSpamMailboxSuccess extends UIState {
|
||||
final Mailbox unreadSpamMailbox;
|
||||
|
||||
GetNumberOfUnreadSpamEmailsSuccess(this.unreadSpamEmailNumber);
|
||||
GetUnreadSpamMailboxSuccess(this.unreadSpamMailbox);
|
||||
|
||||
@override
|
||||
List<Object> get props => [unreadSpamEmailNumber];
|
||||
List<Object> get props => [unreadSpamMailbox];
|
||||
}
|
||||
|
||||
class InvalidSpamReportCondition extends FeatureFailure {
|
||||
@@ -17,10 +18,10 @@ class InvalidSpamReportCondition extends FeatureFailure {
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class GetNumberOfUnreadSpamEmailsFailure extends FeatureFailure {
|
||||
class GetUnreadSpamMailboxFailure extends FeatureFailure {
|
||||
final dynamic exception;
|
||||
|
||||
GetNumberOfUnreadSpamEmailsFailure(this.exception);
|
||||
GetUnreadSpamMailboxFailure(this.exception);
|
||||
|
||||
@override
|
||||
List<Object> get props => [exception];
|
||||
|
||||
+9
-9
@@ -8,11 +8,11 @@ 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';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_number_of_unread_spam_emails_state.dart';
|
||||
|
||||
class GetNumberOfUnreadSpamEmails {
|
||||
class GetUnreadSpamMailboxInteractor {
|
||||
static const int conditionsForDisplayingSpamReportBanner = 4;
|
||||
final SpamReportRepository _spamReportRepository;
|
||||
|
||||
GetNumberOfUnreadSpamEmails(this._spamReportRepository);
|
||||
GetUnreadSpamMailboxInteractor(this._spamReportRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
AccountId accountId,
|
||||
@@ -22,22 +22,22 @@ class GetNumberOfUnreadSpamEmails {
|
||||
}
|
||||
) async* {
|
||||
try {
|
||||
yield Right(GetNumberOfUnreadSpamEmailsLoading());
|
||||
|
||||
yield Right(GetUnreadSpamMailboxLoading());
|
||||
final _lastTimeDissmissedSpamReported = await _spamReportRepository.getLastTimeDismissedSpamReported();
|
||||
final _timeLast = DateTime.now().difference(_lastTimeDissmissedSpamReported);
|
||||
|
||||
final _checkTimeCondition = (_lastTimeDissmissedSpamReported.hour - DateTime.now().hour) > conditionsForDisplayingSpamReportBanner;
|
||||
final _checkTimeCondition = (_timeLast.inHours > 0) && (_timeLast.inHours > conditionsForDisplayingSpamReportBanner);
|
||||
|
||||
if (_checkTimeCondition) {
|
||||
final _response = await _spamReportRepository.findNumberOfUnreadSpamEmails(accountId, mailboxFilterCondition: mailboxFilterCondition, limit: limit);
|
||||
final _unreadSpamEmailNumber = _response.unreadSpamEmailNumber ?? 0;
|
||||
final _response = await _spamReportRepository.getUnreadSpamMailbox(accountId, mailboxFilterCondition: mailboxFilterCondition, limit: limit);
|
||||
final _unreadSpamMailbox = _response.unreadSpamMailbox;
|
||||
|
||||
yield Right(GetNumberOfUnreadSpamEmailsSuccess(_unreadSpamEmailNumber));
|
||||
yield Right(GetUnreadSpamMailboxSuccess(_unreadSpamMailbox!));
|
||||
} else {
|
||||
yield Left(InvalidSpamReportCondition());
|
||||
}
|
||||
} catch (e) {
|
||||
yield Left(GetNumberOfUnreadSpamEmailsFailure(e));
|
||||
yield Left(GetUnreadSpamMailboxFailure(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:model/email/email_action_type.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
||||
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
||||
@@ -123,4 +124,14 @@ class SearchEmailByQueryAction extends DashBoardAction {
|
||||
|
||||
@override
|
||||
List<Object?> get props => [navigationRouter];
|
||||
}
|
||||
class OpenSpamMailboxAction extends DashBoardAction {
|
||||
|
||||
final BuildContext context;
|
||||
final PresentationMailbox presentationMailbox;
|
||||
|
||||
OpenSpamMailboxAction(this.context, this.presentationMailbox);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [context, presentationMailbox];
|
||||
}
|
||||
+21
-5
@@ -58,10 +58,12 @@ import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_controller.d
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/search_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/spam_report_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/local_spam_report_datasource_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/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/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';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/composer_cache_repository_impl.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/search_repository_impl.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/spam_report_repository_impl.dart';
|
||||
@@ -71,11 +73,13 @@ 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_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/remove_composer_cache_on_web_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_composer_cache_on_web_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/domain/usecases/store_last_time_dismissed_spam_reported_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_controller.dart';
|
||||
@@ -127,7 +131,11 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
Get.find<SaveRecentSearchInteractor>(),
|
||||
Get.find<GetAllRecentSearchLatestInteractor>(),
|
||||
));
|
||||
Get.put(SpamReportController());
|
||||
|
||||
Get.put(SpamReportController(
|
||||
Get.find<StoreSpamReportInteractor>(),
|
||||
Get.find<GetUnreadSpamMailboxInteractor>(),
|
||||
));
|
||||
Get.put(MailboxDashBoardController(
|
||||
Get.find<LogoutOidcInteractor>(),
|
||||
Get.find<DeleteAuthorityOidcInteractor>(),
|
||||
@@ -160,7 +168,7 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
Get.lazyPut<AccountDatasource>(() => Get.find<HiveAccountDatasourceImpl>());
|
||||
Get.lazyPut<AuthenticationOIDCDataSource>(() => Get.find<AuthenticationOIDCDataSourceImpl>());
|
||||
Get.lazyPut<SessionStorageComposerDatasource>(() => Get.find<SessionStorageComposerDatasourceImpl>());
|
||||
Get.lazyPut<SpamReportDataSource>(() => Get.find<LocalSpamReportDataSourceImpl>());
|
||||
Get.lazyPut<SpamReportDataSource>(() => Get.find<SpamReportDataSourceImpl>());
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -199,7 +207,11 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
Get.find<RemoteExceptionThrower>(),
|
||||
));
|
||||
Get.lazyPut(() => SessionStorageComposerDatasourceImpl());
|
||||
Get.lazyPut(() => LocalSpamReportDataSourceImpl(
|
||||
Get.lazyPut(() => SpamReportDataSourceImpl(
|
||||
Get.find<SpamReportApi>(),
|
||||
Get.find<RemoteExceptionThrower>(),
|
||||
));
|
||||
Get.lazyPut(() => SharePreferenceSpamReportDataSourceImpl(
|
||||
Get.find<SharePreferenceSpamReportDataSource>(),
|
||||
Get.find<CacheExceptionThrower>(),
|
||||
));
|
||||
@@ -271,6 +283,10 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
Get.lazyPut(() => GetEmailByIdInteractor(
|
||||
Get.find<ThreadRepository>()));
|
||||
Get.lazyPut(() => UpdateAuthenticationAccountInteractor(Get.find<AccountRepository>()));
|
||||
Get.lazyPut(() => StoreSpamReportInteractor(
|
||||
Get.find<SpamReportRepository>()));
|
||||
Get.lazyPut(() => GetUnreadSpamMailboxInteractor(
|
||||
Get.find<SpamReportRepository>()));
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -314,7 +330,7 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
Get.lazyPut(() => SpamReportRepositoryImpl(
|
||||
{
|
||||
DataSourceType.network: Get.find<SpamReportDataSource>(),
|
||||
DataSourceType.local: Get.find<LocalSpamReportDataSourceImpl>()
|
||||
DataSourceType.local: Get.find<SharePreferenceSpamReportDataSourceImpl>()
|
||||
},
|
||||
));
|
||||
}
|
||||
|
||||
+5
@@ -416,6 +416,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
} else {
|
||||
dispatchRoute(DashboardRoutes.thread);
|
||||
}
|
||||
spamReportController.getUnreadSpamMailboxAction(accountId.value!);
|
||||
} else {
|
||||
dispatchRoute(DashboardRoutes.thread);
|
||||
reload();
|
||||
@@ -1520,6 +1521,10 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
void updateEmailList(List<PresentationEmail> newEmailList) {
|
||||
emailsInCurrentMailbox.value = newEmailList;
|
||||
}
|
||||
|
||||
void openSpamMailboxAction(BuildContext context, PresentationMailbox presentationMailbox){
|
||||
dispatchAction(OpenSpamMailboxAction(context, presentationMailbox));
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
|
||||
@@ -1,14 +1,64 @@
|
||||
import 'package:get/get_rx/get_rx.dart';
|
||||
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/mail/mailbox/mailbox.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_filter_condition.dart';
|
||||
import 'package:model/extensions/mailbox_extension.dart';
|
||||
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/state/get_number_of_unread_spam_emails_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/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/presentation/controller/mailbox_dashboard_controller.dart';
|
||||
|
||||
class SpamReportController extends BaseController {
|
||||
final StoreSpamReportInteractor _storeSpamReportInteractor;
|
||||
final GetUnreadSpamMailboxInteractor _getNumberOfUnreadSpamEmailsInteractor;
|
||||
|
||||
final dismissedSpamReported = RxBool(false);
|
||||
final _presentationSpamMailbox = Rxn<PresentationMailbox>();
|
||||
|
||||
SpamReportController(this._storeSpamReportInteractor, this._getNumberOfUnreadSpamEmailsInteractor);
|
||||
|
||||
@override
|
||||
void onDone() {}
|
||||
|
||||
void onDone() {
|
||||
viewState.value.fold(
|
||||
(failure) {
|
||||
logError('SpamReportController::onDone(): failure: $failure');
|
||||
},
|
||||
(success) {
|
||||
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');
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
void dismissSpamReportAction() {
|
||||
dismissedSpamReported.value = true;
|
||||
_storeLastTimeDismissedSpamReportedAction();
|
||||
}
|
||||
|
||||
void getUnreadSpamMailboxAction(AccountId accountId){
|
||||
final _mailboxFilterCondition = MailboxFilterCondition(role: Role('Spam'));
|
||||
consumeState(_getNumberOfUnreadSpamEmailsInteractor.execute(accountId,mailboxFilterCondition: _mailboxFilterCondition));
|
||||
}
|
||||
|
||||
void _storeLastTimeDismissedSpamReportedAction() {
|
||||
consumeState(_storeSpamReportInteractor.execute(DateTime.now()));
|
||||
}
|
||||
|
||||
bool get notShowSpamReportBanner => _presentationSpamMailbox.value == null;
|
||||
|
||||
int get numberOfUnreadSpamEmails => (_presentationSpamMailbox.value?.unreadEmails?.value.value ?? 0).toInt();
|
||||
|
||||
void openMailbox(BuildContext context) {
|
||||
final _mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
||||
dismissSpamReportAction();
|
||||
_mailboxDashBoardController.openSpamMailboxAction(context, _presentationSpamMailbox.value!);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/ad
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/icon_open_advanced_search_widget.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/download/download_task_item_widget.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/spam_report_banner_web_widget.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/top_bar_thread_selection.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
|
||||
@@ -42,7 +43,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
final SearchController searchController = Get.find<SearchController>();
|
||||
final AppGridDashboardController appGridDashboardController = Get.find<AppGridDashboardController>();
|
||||
final mailBoxDashboardController = Get.find<MailboxDashBoardController>();
|
||||
final spamReportController = Get.find<SpamReportController>();
|
||||
final SpamReportController spamReportController = Get.find<SpamReportController>();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -107,7 +108,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
children: [
|
||||
SizedBox(child: MailboxView(), width: responsiveUtils.defaultSizeMenu),
|
||||
Expanded(child: Column(children: [
|
||||
_buildSpamReportBoxWebWidget(context),
|
||||
const SpamReportBannerWebWidget(),
|
||||
_buildEmptyTrashButton(context),
|
||||
const QuotasWarningBannerWidget(
|
||||
margin: EdgeInsets.only(right: 16, top: 8),
|
||||
@@ -695,76 +696,4 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Widget _buildSpamReportBoxWebWidget(BuildContext context) {
|
||||
return Obx(() {
|
||||
if (spamReportController.dismissedSpamReported.value) {
|
||||
return const SizedBox(
|
||||
height: 8,
|
||||
);
|
||||
}
|
||||
return Container(
|
||||
height: 84,
|
||||
margin: const EdgeInsets.only(right: 16, top: 16),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
border: Border.all(color: AppColor.colorBorderBodyThread, width: 1),
|
||||
color: AppColor.colorSpamReportBox.withOpacity(0.12)),
|
||||
child: Stack(
|
||||
alignment: AlignmentDirectional.center,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
imagePaths.icInfoCircleOutline,
|
||||
width: 28,
|
||||
height: 28,
|
||||
color: AppColor.primaryColor,
|
||||
),
|
||||
const SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
AppLocalizations.of(context).countNewSpamEmails(5),
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
color: AppColor.primaryColor,
|
||||
fontWeight: FontWeight.w500),
|
||||
),
|
||||
],
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
left: 32,
|
||||
),
|
||||
child: buildTextButton(
|
||||
AppLocalizations.of(context).showDetails,
|
||||
height: 36,
|
||||
width: 115,
|
||||
textStyle: const TextStyle(
|
||||
fontSize: 15,
|
||||
color: AppColor.primaryColor,
|
||||
fontWeight: FontWeight.w400),
|
||||
backgroundColor: AppColor.colorCreateNewIdentityButton,
|
||||
radius: 10,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Positioned(
|
||||
top: 16,
|
||||
right: 16,
|
||||
child: buildSVGIconButton(
|
||||
icon: imagePaths.icCloseComposer,
|
||||
onTap: () => spamReportController.dismissSpamReportAction(),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/views/button/icon_button_web.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
class SpamReportBannerWebWidget extends StatelessWidget {
|
||||
const SpamReportBannerWebWidget({ Key? key }) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context){
|
||||
final _spamReportController = Get.find<SpamReportController>();
|
||||
final _imagePaths = Get.find<ImagePaths>();
|
||||
return Obx(() {
|
||||
if (_spamReportController.notShowSpamReportBanner) {
|
||||
return const SizedBox(
|
||||
height: 8,
|
||||
);
|
||||
}
|
||||
return Container(
|
||||
height: 84,
|
||||
margin: const EdgeInsets.only(right: 16, top: 16),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
border: Border.all(color: AppColor.colorBorderBodyThread, width: 1),
|
||||
color: AppColor.colorSpamReportBox.withOpacity(0.12)),
|
||||
child: Stack(
|
||||
alignment: AlignmentDirectional.center,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
_imagePaths.icInfoCircleOutline,
|
||||
width: 28,
|
||||
height: 28,
|
||||
color: AppColor.primaryColor,
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
Text(
|
||||
AppLocalizations.of(context).countNewSpamEmails(
|
||||
_spamReportController.numberOfUnreadSpamEmails),
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
color: AppColor.primaryColor,
|
||||
fontWeight: FontWeight.w500),
|
||||
),
|
||||
],
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
left: 32,
|
||||
),
|
||||
child: buildTextButton(
|
||||
AppLocalizations.of(context).showDetails,
|
||||
height: 36,
|
||||
width: 115,
|
||||
textStyle: const TextStyle(
|
||||
fontSize: 15,
|
||||
color: AppColor.primaryColor,
|
||||
fontWeight: FontWeight.w400),
|
||||
backgroundColor: AppColor.colorCreateNewIdentityButton,
|
||||
radius: 10,
|
||||
onTap: () => _spamReportController.openMailbox(context),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Positioned(
|
||||
top: 16,
|
||||
right: 16,
|
||||
child: buildSVGIconButton(
|
||||
icon: _imagePaths.icCloseComposer,
|
||||
onTap: () => _spamReportController.dismissSpamReportAction(),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -34,7 +34,6 @@ import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_email_drafts_state.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/controller/spam_report_controller.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart';
|
||||
import 'package:tmail_ui_user/features/search/presentation/search_email_bindings.dart';
|
||||
@@ -118,10 +117,6 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
|
||||
SearchQuery? get searchQuery => searchController.searchEmailFilter.value.text;
|
||||
|
||||
RxList<PresentationEmail> get emailList => mailboxDashBoardController.emailsInCurrentMailbox;
|
||||
|
||||
SpamReportController get spamReportController => mailboxDashBoardController.spamReportController;
|
||||
|
||||
ThreadController(
|
||||
this._getEmailsInMailboxInteractor,
|
||||
this._refreshChangesEmailsInMailboxInteractor,
|
||||
|
||||
@@ -24,6 +24,7 @@ import 'package:tmail_ui_user/features/thread/presentation/widgets/bottom_bar_th
|
||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart'
|
||||
if (dart.library.html) 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_web_builder.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/filter_message_cupertino_action_sheet_action_builder.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/spam_report_banner_widget.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
|
||||
@@ -61,7 +62,7 @@ class ThreadView extends GetWidget<ThreadController>
|
||||
... [
|
||||
_buildAppBarNormal(context),
|
||||
_buildSearchBarView(context),
|
||||
_buildSpamReportBoxWidget(context),
|
||||
const SpamReportBannerWidget(),
|
||||
const QuotasWarningBannerWidget(),
|
||||
_buildVacationNotificationMessage(context),
|
||||
],
|
||||
@@ -655,101 +656,4 @@ class ThreadView extends GetWidget<ThreadController>
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Widget _buildSpamReportBoxWidget(BuildContext context) {
|
||||
return Obx(() {
|
||||
if (controller.spamReportController.dismissedSpamReported.value) {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
return Container(
|
||||
height: 124,
|
||||
margin: const EdgeInsets.only(right: 16, top: 16, left: 16),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
border: Border.all(color: AppColor.colorBorderBodyThread, width: 1),
|
||||
color: AppColor.colorSpamReportBox.withOpacity(0.12)),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 24),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
_imagePaths.icInfoCircleOutline,
|
||||
width: 28,
|
||||
height: 28,
|
||||
color: AppColor.primaryColor,
|
||||
),
|
||||
const SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
AppLocalizations.of(context).countNewSpamEmails(5),
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
color: AppColor.primaryColor,
|
||||
fontWeight: FontWeight.w500),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
|
||||
child: Expanded(
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Expanded(
|
||||
child: _spamReportButtonAction(
|
||||
context,
|
||||
AppLocalizations.of(context).showDetails,
|
||||
AppColor.primaryColor,
|
||||
() {}),
|
||||
),
|
||||
const SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Expanded(
|
||||
child: _spamReportButtonAction(
|
||||
context,
|
||||
AppLocalizations.of(context).dismiss,
|
||||
AppColor.textFieldErrorBorderColor,
|
||||
() => controller.spamReportController
|
||||
.dismissSpamReportAction()),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
Widget _spamReportButtonAction(BuildContext context, String title, Color colorText, Function()? onTap) {
|
||||
return GestureDetector(
|
||||
onTap: onTap,
|
||||
child: Container(
|
||||
height: 36,
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
color: AppColor.colorCreateNewIdentityButton),
|
||||
child: Expanded(
|
||||
child: Center(
|
||||
child: Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontSize: 15,
|
||||
color: colorText,
|
||||
fontWeight: FontWeight.w400),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
class SpamReportBannerWidget extends StatelessWidget {
|
||||
const SpamReportBannerWidget({ Key? key }) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context){
|
||||
final _spamReportController = Get.find<SpamReportController>();
|
||||
final _imagePaths = Get.find<ImagePaths>();
|
||||
|
||||
return Obx(() {
|
||||
if (_spamReportController.notShowSpamReportBanner) {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
return Container(
|
||||
height: 124,
|
||||
margin: const EdgeInsets.all(16),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
border: Border.all(color: AppColor.colorBorderBodyThread, width: 1),
|
||||
color: AppColor.colorSpamReportBox.withOpacity(0.12)),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 24),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
_imagePaths.icInfoCircleOutline,
|
||||
width: 28,
|
||||
height: 28,
|
||||
color: AppColor.primaryColor,
|
||||
),
|
||||
const SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
AppLocalizations.of(context).countNewSpamEmails(5),
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
color: AppColor.primaryColor,
|
||||
fontWeight: FontWeight.w500),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Expanded(
|
||||
child: _spamReportButtonAction(
|
||||
context,
|
||||
AppLocalizations.of(context).showDetails,
|
||||
AppColor.primaryColor,
|
||||
() => _spamReportController.openMailbox(context)),
|
||||
),
|
||||
const SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Expanded(
|
||||
child: _spamReportButtonAction(
|
||||
context,
|
||||
AppLocalizations.of(context).dismiss,
|
||||
AppColor.textFieldErrorBorderColor,
|
||||
() => _spamReportController
|
||||
.dismissSpamReportAction()),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
Widget _spamReportButtonAction(BuildContext context, String title, Color colorText, Function()? onTap) {
|
||||
return GestureDetector(
|
||||
onTap: onTap,
|
||||
child: Container(
|
||||
height: 36,
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
color: AppColor.colorCreateNewIdentityButton),
|
||||
child: Center(
|
||||
child: Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontSize: 15, color: colorText, fontWeight: FontWeight.w400),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,7 @@ import 'package:tmail_ui_user/features/login/data/local/encryption_key_cache_man
|
||||
import 'package:tmail_ui_user/features/login/data/local/oidc_configuration_cache_manager.dart';
|
||||
import 'package:tmail_ui_user/features/login/data/local/token_oidc_cache_manager.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/data/local/mailbox_cache_manager.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/share_preference_spam_report_data_source.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
|
||||
import 'package:tmail_ui_user/features/push_notification/data/local/fcm_cache_manager.dart';
|
||||
import 'package:tmail_ui_user/features/thread/data/local/email_cache_manager.dart';
|
||||
@@ -68,6 +69,7 @@ class LocalBindings extends Bindings {
|
||||
Get.find<FCMCacheManager>(),
|
||||
Get.find<FCMSubscriptionCacheClient>(),
|
||||
));
|
||||
Get.put(SharePreferenceSpamReportDataSource(Get.find<SharedPreferences>()));
|
||||
}
|
||||
|
||||
void _bindingException() {
|
||||
|
||||
@@ -17,6 +17,7 @@ import 'package:tmail_ui_user/features/login/data/network/config/authorization_i
|
||||
import 'package:tmail_ui_user/features/login/data/network/oidc_http_client.dart';
|
||||
import 'package:tmail_ui_user/features/login/data/utils/library_platform/app_auth_plugin/app_auth_plugin.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/network/spam_report_api.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/data/network/forwarding_api.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/data/network/identity_api.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/data/network/rule_filter_api.dart';
|
||||
@@ -90,6 +91,7 @@ class NetworkBindings extends Bindings {
|
||||
Get.put(ForwardingAPI(Get.find<JmapHttpClient.HttpClient>()));
|
||||
Get.put(QuotasAPI(Get.find<JmapHttpClient.HttpClient>()));
|
||||
Get.put(FcmApi(Get.find<JmapHttpClient.HttpClient>()));
|
||||
Get.put(SpamReportApi(Get.find<JmapHttpClient.HttpClient>()));
|
||||
}
|
||||
|
||||
void _bindingConnection() {
|
||||
|
||||
Reference in New Issue
Block a user