TF-1923 Fix new email offline mode not working

(cherry picked from commit c1c48e93d50cb0ebbccaf11c3f4a975af640b63a)
This commit is contained in:
dab246
2023-06-20 22:20:23 +07:00
committed by Dat H. Pham
parent b1a0cab02b
commit 6d96a1109e
35 changed files with 333 additions and 261 deletions
@@ -14,7 +14,7 @@ import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
import 'package:tmail_ui_user/features/email/data/repository/email_repository_impl.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/get_detailed_email_by_id_interator.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/store_detailed_email_to_cache_interator.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/store_new_email_interator.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart';
@@ -23,8 +23,8 @@ import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/state_dataso
import 'package:tmail_ui_user/features/mailbox/data/local/mailbox_cache_manager.dart';
import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart';
import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_isolate_worker.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart';
@@ -104,7 +104,7 @@ class FcmInteractorBindings extends InteractorsBindings {
Get.find<StateCacheClient>(),
Get.find<CacheExceptionThrower>()));
Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
Get.find<DetailedEmailCacheManager>(),
Get.find<NewEmailCacheManager>(),
Get.find<OpenedEmailCacheManager>(),
Get.find<DetailedEmailCacheWorkerQueue>(),
Get.find<OpenedEmailCacheWorkerQueue>(),
@@ -137,7 +137,7 @@ class FcmInteractorBindings extends InteractorsBindings {
Get.find<FCMRepositoryImpl>(),
Get.find<EmailRepository>()));
Get.lazyPut(() => GetDetailedEmailByIdInteractor(Get.find<EmailRepository>()));
Get.lazyPut(() => StoreDetailedEmailToCacheInteractor(Get.find<EmailRepository>()));
Get.lazyPut(() => StoreNewEmailInteractor(Get.find<EmailRepository>()));
}
@override
@@ -24,7 +24,7 @@ import 'package:tmail_ui_user/features/email/domain/state/get_detailed_email_by_
import 'package:tmail_ui_user/features/email/domain/state/get_stored_state_email_state.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/get_detailed_email_by_id_interator.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/get_stored_email_state_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/store_detailed_email_to_cache_interator.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/store_new_email_interator.dart';
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/push_notification/domain/exceptions/fcm_exception.dart';
@@ -62,7 +62,7 @@ class EmailChangeListener extends ChangeListener {
GetNewReceiveEmailFromNotificationInteractor? _getNewReceiveEmailFromNotificationInteractor;
GetDetailedEmailByIdInteractor? _getDetailedEmailByIdInteractor;
DynamicUrlInterceptors? _dynamicUrlInterceptors;
StoreDetailedEmailToCacheInteractor? _storeDetailedEmailToCacheInteractor;
StoreNewEmailInteractor? _storeNewEmailInteractor;
jmap.State? _newStateEmailDelivery;
AccountId? _accountId;
@@ -83,7 +83,7 @@ class EmailChangeListener extends ChangeListener {
_getNewReceiveEmailFromNotificationInteractor = getBinding<GetNewReceiveEmailFromNotificationInteractor>();
_getDetailedEmailByIdInteractor = getBinding<GetDetailedEmailByIdInteractor>();
_dynamicUrlInterceptors = getBinding<DynamicUrlInterceptors>();
_storeDetailedEmailToCacheInteractor = getBinding<StoreDetailedEmailToCacheInteractor>();
_storeNewEmailInteractor = getBinding<StoreNewEmailInteractor>();
} catch (e) {
logError('EmailChangeListener::_internal(): IS NOT REGISTERED: ${e.toString()}');
}
@@ -247,9 +247,9 @@ class EmailChangeListener extends ChangeListener {
} else if (success is GetEmailChangesToRemoveNotificationSuccess) {
_handleRemoveLocalNotification(success.emailIds);
} else if (success is GetNewReceiveEmailFromNotificationSuccess) {
_handleGetNewReceiveEmailFromNotificationSuccess(success.session, success.accountId, success.emailIds);
_getListDetailedEmailByIdAction(success.session, success.accountId, success.emailIds);
} else if (success is GetDetailedEmailByIdSuccess) {
_handleGetDetailedEmailByIdActionSuccess(
_storeNewEmailAction(
success.session,
success.accountId,
success.email,
@@ -320,8 +320,8 @@ class EmailChangeListener extends ChangeListener {
}
}
void _handleGetNewReceiveEmailFromNotificationSuccess(Session? session, AccountId accountId, Set<EmailId> emailIds) {
log('EmailChangeListener::_handleGetNewReceiveEmailFromNotificationSuccess():emailIds: $emailIds');
void _getListDetailedEmailByIdAction(Session? session, AccountId accountId, Set<EmailId> emailIds) {
log('EmailChangeListener::_getListDetailedEmailByIdAction():emailIds: $emailIds');
for (var emailId in emailIds) {
_getDetailedEmailByIdAction(session, accountId, emailId);
}
@@ -341,15 +341,15 @@ class EmailChangeListener extends ChangeListener {
}
}
void _handleGetDetailedEmailByIdActionSuccess(
void _storeNewEmailAction(
Session session,
AccountId accountId,
Email email,
DetailedEmail detailedEmail
) {
log('EmailChangeListener::_handleGetDetailedEmailByIdActionSuccess():emailId: ${email.id}');
if (_storeDetailedEmailToCacheInteractor != null) {
consumeState(_storeDetailedEmailToCacheInteractor!.execute(
if (_storeNewEmailInteractor != null) {
consumeState(_storeNewEmailInteractor!.execute(
session,
accountId,
email,