TF-438 Implement method for get/store/delete StateToRefresh and get email changes

This commit is contained in:
dab246
2022-11-24 14:30:58 +07:00
committed by Dat H. Pham
parent 17dde9366f
commit c1416c88fa
16 changed files with 428 additions and 2 deletions
@@ -1,14 +1,18 @@
import 'package:core/utils/app_logger.dart';
import 'package:fcm/model/type_name.dart';
import 'package:model/fcm/fcm_token_dto.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:tmail_ui_user/features/caching/fcm_token_cache_client.dart';
import 'package:tmail_ui_user/features/push_notification/data/extensions/fcm_cache_extensions.dart';
import 'package:tmail_ui_user/features/push_notification/data/extensions/fcm_extensions.dart';
import 'package:tmail_ui_user/features/push_notification/domain/exceptions/fcm_exception.dart';
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
class FCMCacheManager {
final FcmTokenCacheClient _fcmTokenCacheClient;
final SharedPreferences _sharedPreferences;
FCMCacheManager(this._fcmTokenCacheClient);
FCMCacheManager(this._fcmTokenCacheClient, this._sharedPreferences);
Future<FCMTokenDto> getFCMToken(String accountId) async {
try {
@@ -33,4 +37,36 @@ class FCMCacheManager {
log('FCMCacheManager::deleteSelectedFCM(): $accountId');
return _fcmTokenCacheClient.deleteItem(accountId);
}
Future<bool> storeStateToRefresh(TypeName typeName, jmap.State newState) {
return _sharedPreferences.setString(typeName.value, newState.value);
}
Future<jmap.State> getStateToRefresh(TypeName typeName) async {
log('FCMCacheManager::getStoredFcmStateChange():keys_BEFORE: ${_sharedPreferences.getKeys().toString()}');
await _sharedPreferences.reload();
log('FCMCacheManager::getStoredFcmStateChange():keys_AFTER: ${_sharedPreferences.getKeys().toString()}');
final stateValue = _sharedPreferences.getString(typeName.value);
if (stateValue != null) {
return jmap.State(stateValue);
} else {
if (typeName == TypeName.emailDelivery) {
throw NotFoundEmailDeliveryStateException();
} else {
throw NotFoundStateToRefreshException();
}
}
}
Future<bool> deleteStateToRefresh(TypeName typeName) {
return _sharedPreferences.remove(typeName.value);
}
Future<bool> clearAllStateToRefresh() async {
return await Future.wait([
_sharedPreferences.remove(TypeName.emailType.value),
_sharedPreferences.remove(TypeName.mailboxType.value),
_sharedPreferences.remove(TypeName.emailDelivery.value)
]).then((listResult) => listResult.every((result) => result));
}
}