Migrate Hive box To IsolatedHive box

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-06-27 23:44:35 +07:00
committed by Dat H. Pham
parent 000a2e3985
commit 8d83650f33
28 changed files with 964 additions and 334 deletions
@@ -6,13 +6,14 @@ import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/caching/clients/new_email_hive_cache_client.dart';
import 'package:tmail_ui_user/features/caching/interaction/cache_manager_interaction.dart';
import 'package:tmail_ui_user/features/caching/utils/cache_utils.dart';
import 'package:tmail_ui_user/features/caching/utils/caching_constants.dart';
import 'package:tmail_ui_user/features/email/domain/exceptions/email_cache_exceptions.dart';
import 'package:tmail_ui_user/features/offline_mode/extensions/list_detailed_email_hive_cache_extension.dart';
import 'package:tmail_ui_user/features/offline_mode/model/detailed_email_hive_cache.dart';
class NewEmailCacheManager {
class NewEmailCacheManager extends CacheManagerInteraction {
final NewEmailHiveCacheClient _cacheClient;
final FileUtils _fileUtils;
@@ -81,4 +82,23 @@ class NewEmailCacheManager {
throw NotFoundStoredNewEmailException();
}
}
Future<void> clear() => _cacheClient.clearAllData();
Future<void> deleteByKey(String key) =>
_cacheClient.clearAllDataContainKey(key);
@override
Future<void> migrateHiveToIsolatedHive() async {
try {
final legacyMapItems = await _cacheClient.getMapItems(
isolated: false,
);
log('$runtimeType::migrateHiveToIsolatedHive(): Length of legacyMapItems: ${legacyMapItems.length}');
await _cacheClient.insertMultipleItem(legacyMapItems);
log('$runtimeType::migrateHiveToIsolatedHive(): ✅ Migrate Hive box "${_cacheClient.tableName}" → IsolatedHive DONE');
} catch (e) {
logError('$runtimeType::migrateHiveToIsolatedHive(): ❌ Migrate Hive box "${_cacheClient.tableName}" → IsolatedHive FAILED, Error: $e');
}
}
}
@@ -6,13 +6,14 @@ import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:model/extensions/account_id_extensions.dart';
import 'package:model/extensions/email_id_extensions.dart';
import 'package:tmail_ui_user/features/caching/clients/opened_email_hive_cache_client.dart';
import 'package:tmail_ui_user/features/caching/interaction/cache_manager_interaction.dart';
import 'package:tmail_ui_user/features/caching/utils/cache_utils.dart';
import 'package:tmail_ui_user/features/caching/utils/caching_constants.dart';
import 'package:tmail_ui_user/features/email/domain/exceptions/email_cache_exceptions.dart';
import 'package:tmail_ui_user/features/offline_mode/extensions/list_detailed_email_hive_cache_extension.dart';
import 'package:tmail_ui_user/features/offline_mode/model/detailed_email_hive_cache.dart';
class OpenedEmailCacheManager {
class OpenedEmailCacheManager extends CacheManagerInteraction {
final OpenedEmailHiveCacheClient _cacheClient;
final FileUtils _fileUtils;
@@ -85,4 +86,23 @@ class OpenedEmailCacheManager {
Future<void> _deleteFileExisted(String pathFile) async {
await _fileUtils.deleteFile(pathFile);
}
Future<void> clear() => _cacheClient.clearAllData();
Future<void> deleteByKey(String key) =>
_cacheClient.clearAllDataContainKey(key);
@override
Future<void> migrateHiveToIsolatedHive() async {
try {
final legacyMapItems = await _cacheClient.getMapItems(
isolated: false,
);
log('$runtimeType::migrateHiveToIsolatedHive(): Length of legacyMapItems: ${legacyMapItems.length}');
await _cacheClient.insertMultipleItem(legacyMapItems);
log('$runtimeType::migrateHiveToIsolatedHive(): ✅ Migrate Hive box "${_cacheClient.tableName}" → IsolatedHive DONE');
} catch (e) {
logError('$runtimeType::migrateHiveToIsolatedHive(): ❌ Migrate Hive box "${_cacheClient.tableName}" → IsolatedHive FAILED, Error: $e');
}
}
}
@@ -1,14 +1,16 @@
import 'package:core/utils/app_logger.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:model/extensions/account_id_extensions.dart';
import 'package:tmail_ui_user/features/caching/clients/sending_email_hive_cache_client.dart';
import 'package:tmail_ui_user/features/caching/interaction/cache_manager_interaction.dart';
import 'package:tmail_ui_user/features/caching/utils/cache_utils.dart';
import 'package:tmail_ui_user/features/offline_mode/extensions/list_sending_email_hive_cache_extension.dart';
import 'package:tmail_ui_user/features/offline_mode/model/sending_email_hive_cache.dart';
import 'package:tmail_ui_user/features/sending_queue/data/exceptions/sending_queue_exceptions.dart';
class SendingEmailCacheManager {
class SendingEmailCacheManager extends CacheManagerInteraction {
final SendingEmailHiveCacheClient _hiveCacheClient;
@@ -102,4 +104,18 @@ class SendingEmailCacheManager {
}
Future<void> closeSendingEmailHiveCacheBox() => _hiveCacheClient.closeBox();
@override
Future<void> migrateHiveToIsolatedHive() async {
try {
final legacyMapItems = await _hiveCacheClient.getMapItems(
isolated: false,
);
log('$runtimeType::migrateHiveToIsolatedHive(): Length of legacyMapItems: ${legacyMapItems.length}');
await _hiveCacheClient.insertMultipleItem(legacyMapItems);
log('$runtimeType::migrateHiveToIsolatedHive(): ✅ Migrate Hive box "${_hiveCacheClient.tableName}" → IsolatedHive DONE');
} catch (e) {
logError('$runtimeType::migrateHiveToIsolatedHive(): ❌ Migrate Hive box "${_hiveCacheClient.tableName}" → IsolatedHive FAILED, Error: $e');
}
}
}