TF-2298 Update expires time when old token has expired

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit fb26afe8f52df6e16476aea8a68f9f92c5c4b001)
This commit is contained in:
dab246
2023-12-04 10:53:26 +07:00
committed by Dat H. Pham
parent e3dea129b6
commit f5d878012d
72 changed files with 964 additions and 736 deletions
@@ -6,12 +6,18 @@ class NotFoundStateToRefreshException implements Exception {}
class NotFoundEmailDeliveryStateException implements Exception {}
class NotFoundFirebaseSubscriptionException implements Exception {}
class NotFoundFirebaseRegistrationForDeviceException implements Exception {}
class NotFoundSubscriptionException implements Exception {}
class NotFoundFirebaseRegistrationCacheException implements Exception {}
class NotFoundEmailStateException implements Exception {}
class NotFoundNewReceiveEmailException implements Exception {}
class EmailStateNoChangeException implements Exception {}
class EmailStateNoChangeException implements Exception {}
class NotFoundFirebaseRegistrationCreatedException implements Exception {}
class NotFoundFirebaseRegistrationUpdatedException implements Exception {}
class NotFoundFirebaseRegistrationDestroyedException implements Exception {}
@@ -0,0 +1,22 @@
import 'package:fcm/model/device_client_id.dart';
import 'package:fcm/model/fcm_token.dart';
import 'package:fcm/model/firebase_registration.dart';
import 'package:fcm/model/type_name.dart';
extension FirebaseRegistrationExtension on FirebaseRegistration {
FirebaseRegistration syncProperties({
DeviceClientId? newDeviceId,
FcmToken? newFcmToken,
List<TypeName>? newTypes,
}) {
return FirebaseRegistration(
id: id,
token: newFcmToken ?? token,
deviceClientId: newDeviceId ?? deviceClientId,
expires: expires,
types: newTypes ?? types
);
}
}
@@ -1,16 +0,0 @@
import 'package:fcm/model/device_client_id.dart';
import 'package:fcm/model/firebase_subscription.dart';
extension FirebaseSubscriptionExtension on FirebaseSubscription {
FirebaseSubscription fromDeviceId({DeviceClientId? newDeviceId}) {
return FirebaseSubscription(
id: id,
token: token,
deviceClientId: newDeviceId ?? deviceClientId,
expires: expires,
types: types
);
}
}
@@ -1,16 +0,0 @@
import 'package:equatable/equatable.dart';
class FCMSubscription with EquatableMixin {
final String deviceId;
final String subscriptionId;
FCMSubscription(this.deviceId, this.subscriptionId);
@override
List<Object?> get props => [
deviceId,
subscriptionId
];
}
@@ -1,18 +1,18 @@
import 'package:equatable/equatable.dart';
import 'package:fcm/model/firebase_subscription.dart';
import 'package:fcm/model/firebase_registration.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
class RegisterNewTokenRequest with EquatableMixin {
final Id createRequestId;
final FirebaseSubscription firebaseSubscription;
final FirebaseRegistration firebaseRegistration;
RegisterNewTokenRequest(this.createRequestId, this.firebaseSubscription);
RegisterNewTokenRequest(this.createRequestId, this.firebaseRegistration);
@override
List<Object?> get props => [
createRequestId,
firebaseSubscription
firebaseRegistration
];
}
@@ -0,0 +1,21 @@
import 'package:equatable/equatable.dart';
import 'package:fcm/model/firebase_registration_expired_time.dart';
import 'package:fcm/model/firebase_registration_id.dart';
class UpdateTokenExpiredTimeRequest with EquatableMixin {
final FirebaseRegistrationId firebaseRegistrationId;
final FirebaseRegistrationExpiredTime firebaseRegistrationExpiredTime;
UpdateTokenExpiredTimeRequest(
this.firebaseRegistrationId,
this.firebaseRegistrationExpiredTime
);
@override
List<Object?> get props => [
firebaseRegistrationId,
firebaseRegistrationExpiredTime
];
}
@@ -1,4 +1,6 @@
import 'package:fcm/model/firebase_subscription.dart';
import 'package:fcm/model/device_client_id.dart';
import 'package:fcm/model/firebase_registration.dart';
import 'package:fcm/model/firebase_registration_id.dart';
import 'package:fcm/model/type_name.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
@@ -6,8 +8,8 @@ import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:model/mailbox/presentation_mailbox.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/model/update_token_expired_time_request.dart';
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart';
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
@@ -28,15 +30,19 @@ abstract class FCMRepository {
Future<void> deleteStateToRefresh(AccountId accountId, UserName userName, TypeName typeName);
Future<void> storeSubscription(FCMSubscription fcmSubscription);
Future<void> storeFirebaseRegistration(FirebaseRegistration firebaseRegistration);
Future<FirebaseSubscription> getFirebaseSubscriptionByDeviceId(String deviceId);
Future<FirebaseRegistration> getFirebaseRegistrationByDeviceId(DeviceClientId deviceId);
Future<FirebaseSubscription> registerNewToken(RegisterNewTokenRequest newTokenRequest);
Future<FirebaseRegistration> registerNewFirebaseRegistrationToken(RegisterNewTokenRequest newTokenRequest);
Future<FCMSubscription> getSubscription();
Future<FirebaseRegistration> getStoredFirebaseRegistration();
Future<bool> destroySubscription(String subscriptionId);
Future<void> deleteFirebaseRegistrationCache();
Future<void> destroyFirebaseRegistration(FirebaseRegistrationId registrationId);
Future<void> updateFirebaseRegistrationToken(UpdateTokenExpiredTimeRequest expiredTimeRequest);
Future<List<PresentationMailbox>> getMailboxesNotPutNotifications(Session session, AccountId accountId);
@@ -0,0 +1,12 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class DeleteFirebaseRegistrationCacheLoading extends LoadingState {}
class DeleteFirebaseRegistrationCacheSuccess extends UIState {}
class DeleteFirebaseRegistrationCacheFailure extends FeatureFailure {
DeleteFirebaseRegistrationCacheFailure(dynamic exception) : super(exception: exception);
}
@@ -0,0 +1,11 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class DestroyFirebaseRegistrationLoading extends LoadingState {}
class DestroyFirebaseRegistrationSuccess extends UIState {}
class DestroyFirebaseRegistrationFailure extends FeatureFailure {
DestroyFirebaseRegistrationFailure(dynamic exception) : super(exception: exception);
}
@@ -1,19 +0,0 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class DestroySubscriptionLoading extends UIState {}
class DestroySubscriptionSuccess extends UIState {
final bool destroyedSubscription;
DestroySubscriptionSuccess(this.destroyedSubscription);
@override
List<Object> get props => [destroyedSubscription];
}
class DestroySubscriptionFailure extends FeatureFailure {
DestroySubscriptionFailure(dynamic exception) : super(exception: exception);
}
@@ -1,21 +0,0 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:tmail_ui_user/features/push_notification/domain/model/fcm_subscription.dart';
class GetFCMSubscriptionLocalLoading extends UIState {}
class GetFCMSubscriptionLocalSuccess extends UIState {
final FCMSubscription fcmSubscription;
GetFCMSubscriptionLocalSuccess(this.fcmSubscription);
@override
List<Object> get props => [fcmSubscription];
}
class GetFCMSubscriptionLocalFailure extends FeatureFailure {
GetFCMSubscriptionLocalFailure(dynamic exception) : super(exception: exception);
}
@@ -0,0 +1,27 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:fcm/model/fcm_token.dart';
import 'package:fcm/model/firebase_registration.dart';
class GetFirebaseRegistrationByDeviceIdLoading extends LoadingState {}
class GetFirebaseRegistrationByDeviceIdSuccess extends UIState {
final FirebaseRegistration firebaseRegistration;
final FcmToken? newFcmToken;
GetFirebaseRegistrationByDeviceIdSuccess(this.firebaseRegistration, this.newFcmToken);
@override
List<Object?> get props => [firebaseRegistration, newFcmToken];
}
class GetFirebaseRegistrationByDeviceIdFailure extends FeatureFailure {
final FcmToken? newFcmToken;
GetFirebaseRegistrationByDeviceIdFailure(dynamic exception, this.newFcmToken) : super(exception: exception);
@override
List<Object?> get props => [newFcmToken, ...super.props];
}
@@ -1,21 +0,0 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:fcm/model/firebase_subscription.dart';
class GetFirebaseSubscriptionLoading extends UIState {}
class GetFirebaseSubscriptionSuccess extends UIState {
final FirebaseSubscription firebaseSubscription;
GetFirebaseSubscriptionSuccess(this.firebaseSubscription);
@override
List<Object> get props => [firebaseSubscription];
}
class GetFirebaseSubscriptionFailure extends FeatureFailure {
GetFirebaseSubscriptionFailure(dynamic exception) : super(exception: exception);
}
@@ -0,0 +1,21 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:fcm/model/firebase_registration.dart';
class GetStoredFirebaseRegistrationLoading extends LoadingState {}
class GetStoredFirebaseRegistrationSuccess extends UIState {
final FirebaseRegistration firebaseRegistration;
GetStoredFirebaseRegistrationSuccess(this.firebaseRegistration);
@override
List<Object> get props => [firebaseRegistration];
}
class GetStoredFirebaseRegistrationFailure extends FeatureFailure {
GetStoredFirebaseRegistrationFailure(dynamic exception) : super(exception: exception);
}
@@ -0,0 +1,21 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:fcm/model/firebase_registration.dart';
class RegisterNewFirebaseRegistrationTokenLoading extends LoadingState {}
class RegisterNewFirebaseRegistrationTokenSuccess extends UIState {
final FirebaseRegistration firebaseRegistration;
RegisterNewFirebaseRegistrationTokenSuccess(this.firebaseRegistration);
@override
List<Object> get props => [firebaseRegistration];
}
class RegisterNewFirebaseRegistrationTokenFailure extends FeatureFailure {
RegisterNewFirebaseRegistrationTokenFailure(dynamic exception) : super(exception: exception);
}
@@ -1,21 +0,0 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:fcm/model/firebase_subscription.dart';
class RegisterNewTokenLoading extends UIState {}
class RegisterNewTokenSuccess extends UIState {
final FirebaseSubscription firebaseSubscription;
RegisterNewTokenSuccess(this.firebaseSubscription);
@override
List<Object> get props => [firebaseSubscription];
}
class RegisterNewTokenFailure extends FeatureFailure {
RegisterNewTokenFailure(dynamic exception) : super(exception: exception);
}
@@ -0,0 +1,12 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class StoreFirebaseRegistrationLoading extends LoadingState {}
class StoreFirebaseRegistrationSuccess extends UIState {}
class StoreFirebaseRegistrationFailure extends FeatureFailure {
StoreFirebaseRegistrationFailure(dynamic exception) : super(exception: exception);
}
@@ -1,12 +0,0 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class StoreSubscriptionLoading extends UIState {}
class StoreSubscriptionSuccess extends UIState {}
class StoreSubscriptionFailure extends FeatureFailure {
StoreSubscriptionFailure(dynamic exception) : super(exception: exception);
}
@@ -0,0 +1,12 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class UpdateFirebaseRegistrationTokenLoading extends LoadingState {}
class UpdateFirebaseRegistrationTokenSuccess extends UIState {}
class UpdateFirebaseRegistrationTokenFailure extends FeatureFailure {
UpdateFirebaseRegistrationTokenFailure(dynamic exception) : super(exception: exception);
}
@@ -0,0 +1,21 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/push_notification/domain/repository/fcm_repository.dart';
import 'package:tmail_ui_user/features/push_notification/domain/state/delete_firebase_registration_cache_state.dart';
class DeleteFirebaseRegistrationCacheInteractor {
final FCMRepository _fcmRepository;
DeleteFirebaseRegistrationCacheInteractor(this._fcmRepository);
Stream<Either<Failure, Success>> execute() async* {
try {
yield Right<Failure, Success>(DeleteFirebaseRegistrationCacheLoading());
await _fcmRepository.getStoredFirebaseRegistration();
yield Right<Failure, Success>(DeleteFirebaseRegistrationCacheSuccess());
} catch (e) {
yield Left<Failure, Success>(DeleteFirebaseRegistrationCacheFailure(e));
}
}
}
@@ -0,0 +1,23 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:fcm/model/firebase_registration_id.dart';
import 'package:tmail_ui_user/features/push_notification/domain/repository/fcm_repository.dart';
import 'package:tmail_ui_user/features/push_notification/domain/state/destroy_firebase_registration_state.dart';
class DestroyFirebaseRegistrationInteractor {
final FCMRepository _fcmRepository;
DestroyFirebaseRegistrationInteractor(this._fcmRepository);
Stream<Either<Failure, Success>> execute(FirebaseRegistrationId registrationId) async* {
try {
yield Right<Failure, Success>(DestroyFirebaseRegistrationLoading());
await _fcmRepository.destroyFirebaseRegistration(registrationId);
yield Right<Failure, Success>(DestroyFirebaseRegistrationSuccess());
} catch (e) {
yield Left<Failure, Success>(DestroyFirebaseRegistrationFailure(e));
}
}
}
@@ -1,22 +0,0 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/push_notification/domain/repository/fcm_repository.dart';
import 'package:tmail_ui_user/features/push_notification/domain/state/destroy_subscription_state.dart';
class DestroySubscriptionInteractor {
final FCMRepository _fcmRepository;
DestroySubscriptionInteractor(this._fcmRepository);
Stream<Either<Failure, Success>> execute(String subscriptionId) async* {
try {
yield Right<Failure, Success>(DestroySubscriptionLoading());
final destroyedSubscription = await _fcmRepository.destroySubscription(subscriptionId);
yield Right<Failure, Success>(DestroySubscriptionSuccess(destroyedSubscription));
} catch (e) {
yield Left<Failure, Success>(DestroySubscriptionFailure(e));
}
}
}
@@ -1,21 +0,0 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/push_notification/domain/repository/fcm_repository.dart';
import 'package:tmail_ui_user/features/push_notification/domain/state/get_fcm_subscription_local.dart';
class GetFCMSubscriptionLocalInteractor {
final FCMRepository _fcmRepository;
GetFCMSubscriptionLocalInteractor(this._fcmRepository);
Stream<Either<Failure, Success>> execute() async* {
try {
yield Right<Failure, Success>(GetFCMSubscriptionLocalLoading());
final subscription = await _fcmRepository.getSubscription();
yield Right<Failure, Success>(GetFCMSubscriptionLocalSuccess(subscription));
} catch (e) {
yield Left<Failure, Success>(GetFCMSubscriptionLocalFailure(e));
}
}
}
@@ -0,0 +1,25 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:fcm/model/device_client_id.dart';
import 'package:fcm/model/fcm_token.dart';
import 'package:tmail_ui_user/features/push_notification/domain/repository/fcm_repository.dart';
import 'package:tmail_ui_user/features/push_notification/domain/state/get_firebase_registration_by_device_id_state.dart';
class GetFirebaseRegistrationByDeviceIdInteractor {
final FCMRepository _fcmRepository;
GetFirebaseRegistrationByDeviceIdInteractor(this._fcmRepository);
Stream<Either<Failure, Success>> execute({required DeviceClientId deviceClientId, FcmToken? newFcmToken}) async* {
try {
yield Right<Failure, Success>(GetFirebaseRegistrationByDeviceIdLoading());
final firebaseRegistration = await _fcmRepository.getFirebaseRegistrationByDeviceId(deviceClientId);
yield Right<Failure, Success>(GetFirebaseRegistrationByDeviceIdSuccess(firebaseRegistration, newFcmToken));
} catch (e) {
yield Left<Failure, Success>(GetFirebaseRegistrationByDeviceIdFailure(e, newFcmToken));
}
}
}
@@ -1,23 +0,0 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/push_notification/domain/repository/fcm_repository.dart';
import 'package:tmail_ui_user/features/push_notification/domain/state/get_firebase_subscription_state.dart';
class GetFirebaseSubscriptionInteractor {
final FCMRepository _fcmRepository;
GetFirebaseSubscriptionInteractor(this._fcmRepository);
Stream<Either<Failure, Success>> execute(String deviceId) async* {
try {
yield Right<Failure, Success>(GetFirebaseSubscriptionLoading());
final firebaseSubscription = await _fcmRepository.getFirebaseSubscriptionByDeviceId(deviceId);
yield Right<Failure, Success>(GetFirebaseSubscriptionSuccess(firebaseSubscription));
} catch (e) {
yield Left<Failure, Success>(GetFirebaseSubscriptionFailure(e));
}
}
}
@@ -0,0 +1,21 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/push_notification/domain/repository/fcm_repository.dart';
import 'package:tmail_ui_user/features/push_notification/domain/state/get_stored_firebase_registration_state.dart';
class GetStoredFirebaseRegistrationInteractor {
final FCMRepository _fcmRepository;
GetStoredFirebaseRegistrationInteractor(this._fcmRepository);
Stream<Either<Failure, Success>> execute() async* {
try {
yield Right<Failure, Success>(GetStoredFirebaseRegistrationLoading());
final registration = await _fcmRepository.getStoredFirebaseRegistration();
yield Right<Failure, Success>(GetStoredFirebaseRegistrationSuccess(registration));
} catch (e) {
yield Left<Failure, Success>(GetStoredFirebaseRegistrationFailure(e));
}
}
}
@@ -4,21 +4,21 @@ import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.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/repository/fcm_repository.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/state/register_new_firebase_registration_token_state.dart';
class RegisterNewTokenInteractor {
class RegisterNewFirebaseRegistrationTokenInteractor {
final FCMRepository _fcmRepository;
RegisterNewTokenInteractor(this._fcmRepository);
RegisterNewFirebaseRegistrationTokenInteractor(this._fcmRepository);
Stream<Either<Failure, Success>> execute(RegisterNewTokenRequest newTokenRequest) async* {
try {
yield Right<Failure, Success>(RegisterNewTokenLoading());
final firebaseSubscription = await _fcmRepository.registerNewToken(newTokenRequest);
yield Right<Failure, Success>(RegisterNewTokenSuccess(firebaseSubscription));
yield Right<Failure, Success>(RegisterNewFirebaseRegistrationTokenLoading());
final firebaseRegistration = await _fcmRepository.registerNewFirebaseRegistrationToken(newTokenRequest);
yield Right<Failure, Success>(RegisterNewFirebaseRegistrationTokenSuccess(firebaseRegistration));
} catch (e) {
yield Left<Failure, Success>(RegisterNewTokenFailure(e));
yield Left<Failure, Success>(RegisterNewFirebaseRegistrationTokenFailure(e));
}
}
}
@@ -0,0 +1,22 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:fcm/model/firebase_registration.dart';
import 'package:tmail_ui_user/features/push_notification/domain/repository/fcm_repository.dart';
import 'package:tmail_ui_user/features/push_notification/domain/state/store_firebase_registration_state.dart';
class StoreFirebaseRegistrationInteractor {
final FCMRepository _fcmRepository;
StoreFirebaseRegistrationInteractor(this._fcmRepository);
Stream<Either<Failure, Success>> execute(FirebaseRegistration firebaseRegistration) async* {
try {
yield Right<Failure, Success>(StoreFirebaseRegistrationLoading());
await _fcmRepository.storeFirebaseRegistration(firebaseRegistration);
yield Right<Failure, Success>(StoreFirebaseRegistrationSuccess());
} catch (e) {
yield Left<Failure, Success>(StoreFirebaseRegistrationFailure(e));
}
}
}
@@ -1,22 +0,0 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/push_notification/domain/model/fcm_subscription.dart';
import 'package:tmail_ui_user/features/push_notification/domain/repository/fcm_repository.dart';
import 'package:tmail_ui_user/features/push_notification/domain/state/store_subscription_state.dart';
class StoreSubscriptionInteractor {
final FCMRepository _fcmRepository;
StoreSubscriptionInteractor(this._fcmRepository);
Stream<Either<Failure, Success>> execute(FCMSubscription fcmSubscription) async* {
try {
yield Right<Failure, Success>(StoreSubscriptionLoading());
await _fcmRepository.storeSubscription(fcmSubscription);
yield Right<Failure, Success>(StoreSubscriptionSuccess());
} catch (e) {
yield Left<Failure, Success>(StoreSubscriptionFailure(e));
}
}
}
@@ -0,0 +1,24 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/push_notification/domain/model/update_token_expired_time_request.dart';
import 'package:tmail_ui_user/features/push_notification/domain/repository/fcm_repository.dart';
import 'package:tmail_ui_user/features/push_notification/domain/state/update_firebase_registration_token_state.dart';
class UpdateFirebaseRegistrationTokenInteractor {
final FCMRepository _fcmRepository;
UpdateFirebaseRegistrationTokenInteractor(this._fcmRepository);
Stream<Either<Failure, Success>> execute(UpdateTokenExpiredTimeRequest updateTokenExpiredTimeRequest) async* {
try {
yield Right<Failure, Success>(UpdateFirebaseRegistrationTokenLoading());
await _fcmRepository.updateFirebaseRegistrationToken(updateTokenExpiredTimeRequest);
yield Right<Failure, Success>(UpdateFirebaseRegistrationTokenSuccess());
} catch (e) {
yield Left<Failure, Success>(UpdateFirebaseRegistrationTokenFailure(e));
}
}
}
@@ -3,12 +3,13 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
class FcmConstants {
static final List<Role> mailboxRuleAllowPushNotifications = [
static final List<Role> mailboxRuleDoNotAllowPushNotifications = [
PresentationMailbox.roleDrafts,
PresentationMailbox.roleSent,
PresentationMailbox.roleOutbox,
PresentationMailbox.roleSpam,
PresentationMailbox.roleTrash
];
static const String firebaseRegistrationExpiredTimeProperty = 'expires';
}