diff --git a/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart b/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart index 92f340bbf..cee81fdfe 100644 --- a/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart +++ b/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart @@ -3,20 +3,21 @@ import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/interactors_bindings.dart'; import 'package:tmail_ui_user/features/push_notification/data/datasource/fcm_datasource.dart'; import 'package:tmail_ui_user/features/push_notification/data/datasource_impl/fcm_datasource_impl.dart'; -import 'package:tmail_ui_user/features/push_notification/data/datasource_impl/hive_fcm_datasource_impl.dart'; +import 'package:tmail_ui_user/features/push_notification/data/datasource_impl/cache_fcm_datasource_impl.dart'; import 'package:tmail_ui_user/features/push_notification/data/local/fcm_cache_manager.dart'; import 'package:tmail_ui_user/features/push_notification/data/network/fcm_api.dart'; import 'package:tmail_ui_user/features/push_notification/data/repository/fcm_repository_impl.dart'; import 'package:tmail_ui_user/features/push_notification/domain/repository/fcm_repository.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/delete_email_state_to_refresh_interactor.dart'; -import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_device_id_interactor.dart'; +import 'package:tmail_ui_user/features/push_notification/domain/usecases/destroy_subscription_interactor.dart'; +import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_fcm_subscription_local_interactor.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_email_changes_to_push_notification_interactor.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_email_state_to_refresh_interactor.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_firebase_subscription_interactor.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_mailbox_state_to_refresh_interactor.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_stored_email_delivery_state_interactor.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/register_new_token_interactor.dart'; -import 'package:tmail_ui_user/features/push_notification/domain/usecases/store_device_id_interactor.dart'; +import 'package:tmail_ui_user/features/push_notification/domain/usecases/store_subscription_interator.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/store_email_delivery_state_interactor.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/store_email_state_to_refresh_interactor.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/store_mailbox_state_to_refresh_interactor.dart'; @@ -37,7 +38,7 @@ class FcmInteractorBindings extends InteractorsBindings { @override void bindingsDataSourceImpl() { - Get.lazyPut(() => HiveFCMDatasourceImpl( + Get.lazyPut(() => CacheFCMDatasourceImpl( Get.find(), Get.find(), )); @@ -60,12 +61,11 @@ class FcmInteractorBindings extends InteractorsBindings { Get.lazyPut(() => StoreEmailStateToRefreshInteractor(Get.find())); Get.lazyPut(() => GetEmailStateToRefreshInteractor(Get.find())); Get.lazyPut(() => DeleteEmailStateToRefreshInteractor(Get.find())); - Get.lazyPut(() => StoreDeviceIdInteractor(Get.find())); Get.lazyPut(() => GetFirebaseSubscriptionInteractor(Get.find())); Get.lazyPut(() => RegisterNewTokenInteractor(Get.find())); - Get.lazyPut(() => GetDeviceIdInteractor(Get.find())); Get.lazyPut(() => StoreMailboxStateToRefreshInteractor(Get.find())); Get.lazyPut(() => GetMailboxStateToRefreshInteractor(Get.find())); + Get.lazyPut(() => DestroySubscriptionInteractor(Get.find())); } @override @@ -77,7 +77,7 @@ class FcmInteractorBindings extends InteractorsBindings { void bindingsRepositoryImpl() { Get.lazyPut(() => FCMRepositoryImpl( { - DataSourceType.local: Get.find(), + DataSourceType.local: Get.find(), DataSourceType.network: Get.find(), }, Get.find() diff --git a/lib/features/push_notification/presentation/controller/fcm_token_handler.dart b/lib/features/push_notification/presentation/controller/fcm_token_handler.dart index eff0073f9..69d090050 100644 --- a/lib/features/push_notification/presentation/controller/fcm_token_handler.dart +++ b/lib/features/push_notification/presentation/controller/fcm_token_handler.dart @@ -11,14 +11,14 @@ import 'package:fcm/model/firebase_token.dart'; import 'package:fcm/model/type_name.dart'; import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/extensions/datetime_extension.dart'; +import 'package:tmail_ui_user/features/push_notification/domain/model/fcm_subscription.dart'; import 'package:tmail_ui_user/features/push_notification/domain/model/register_new_token_request.dart'; -import 'package:tmail_ui_user/features/push_notification/domain/state/get_device_id_state.dart'; +import 'package:tmail_ui_user/features/push_notification/domain/state/get_fcm_subscription_local.dart'; import 'package:tmail_ui_user/features/push_notification/domain/state/get_firebase_subscription_state.dart'; import 'package:tmail_ui_user/features/push_notification/domain/state/register_new_token_state.dart'; -import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_device_id_interactor.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_firebase_subscription_interactor.dart'; import 'package:tmail_ui_user/features/push_notification/domain/usecases/register_new_token_interactor.dart'; -import 'package:tmail_ui_user/features/push_notification/domain/usecases/store_device_id_interactor.dart'; +import 'package:tmail_ui_user/features/push_notification/domain/usecases/store_subscription_interator.dart'; import 'package:tmail_ui_user/features/push_notification/presentation/utils/fcm_utils.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:uuid/uuid.dart'; @@ -34,20 +34,18 @@ class FcmTokenHandler { static const int limitedTimeToExpire = 3; static const int extensionTimeExpire = 7; - StoreDeviceIdInteractor? _storeDeviceIdInteractor; + StoreSubscriptionInteractor? _storeSubscriptionInteractor; GetFirebaseSubscriptionInteractor? _getFirebaseSubscriptionInteractor; RegisterNewTokenInteractor? _registerNewTokenInteractor; - GetDeviceIdInteractor? _getDeviceIdInteractor; FirebaseToken? _fcmToken; DeviceClientId? _deviceClientId; void initialize() { try { - _storeDeviceIdInteractor = getBinding(); + _storeSubscriptionInteractor = getBinding(); _getFirebaseSubscriptionInteractor = getBinding(); _registerNewTokenInteractor = getBinding(); - _getDeviceIdInteractor = getBinding(); } catch (e) { logError('FcmTokenHandler::initialize(): ${e.toString()}'); } @@ -62,8 +60,6 @@ class FcmTokenHandler { log('FcmTokenHandler::handle(): fcmToken: $_fcmToken'); log('FcmTokenHandler::handle(): deviceId: $deviceId'); _getFcmTokenFromBackend(deviceId); - } else { - _getDeviceIdAction(); } } @@ -73,15 +69,9 @@ class FcmTokenHandler { } } - void _storeDeviceIdAction(String deviceId) { - if (_storeDeviceIdInteractor != null) { - _consumeState(_storeDeviceIdInteractor!.execute(deviceId)); - } - } - - void _getDeviceIdAction() { - if (_getDeviceIdInteractor != null) { - _consumeState(_getDeviceIdInteractor!.execute()); + void _storeSubscriptionAction(FCMSubscription fcmSubscription){ + if (_storeSubscriptionInteractor != null) { + _consumeState(_storeSubscriptionInteractor!.execute(fcmSubscription)); } } @@ -120,11 +110,12 @@ class FcmTokenHandler { } } else if (success is RegisterNewTokenSuccess) { final deviceId = success.firebaseSubscription.deviceClientId?.value; - if (deviceId != null) { - _storeDeviceIdAction(deviceId); + final subscriptionId = success.firebaseSubscription.id?.id.value; + if (deviceId != null && subscriptionId != null) { + _storeSubscriptionAction(FCMSubscription(deviceId, subscriptionId)); } - } else if (success is GetDeviceIdSuccess) { - _getFcmTokenFromBackend(success.deviceId); + } else if (success is GetFCMSubscriptionLocalSuccess) { + _getFcmTokenFromBackend(success.fcmSubscription.deviceId); } }