From 81eca6c59a94a56c3f6649ec3a7047a1c67bb549 Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 24 May 2022 13:24:00 +0700 Subject: [PATCH] TF-524 Clean up recent search cache --- .../caching/recent_search_cache_client.dart | 7 ++- .../data/datasource/cleanup_datasource.dart | 9 ++-- .../cleanup_datasource_impl.dart | 26 ++++------- .../local/recent_search_cache_manager.dart | 27 ++++++++++++ .../repository/cleanup_repository_impl.dart | 15 ++++--- .../cleanup/data/utils/cleanup_constant.dart | 3 -- .../cleanup/domain/model/cleanup_rule.dart | 7 ++- .../domain/model/email_cleanup_rule.dart | 11 +++++ .../model/recent_search_cleanup_rule.dart | 13 ++++++ .../domain/repository/cleanup_repository.dart | 7 ++- .../cleanup_recent_search_cache_state.dart | 18 ++++++++ .../cleanup_email_cache_interactor.dart | 4 +- ...leanup_recent_search_cache_interactor.dart | 21 +++++++++ .../home/presentation/home_bindings.dart | 7 ++- .../home/presentation/home_controller.dart | 15 +++++-- .../data/model/recent_search_cache.dart | 10 +++++ .../data/model/recent_search_cache.g.dart | 44 +++++++++++++++++++ .../extensions/email_cache_extension.dart | 4 +- .../data/local/email_cache_manager.dart | 6 +-- lib/main/bindings/local/local_bindings.dart | 2 + 20 files changed, 203 insertions(+), 53 deletions(-) create mode 100644 lib/features/cleanup/data/local/recent_search_cache_manager.dart delete mode 100644 lib/features/cleanup/data/utils/cleanup_constant.dart create mode 100644 lib/features/cleanup/domain/model/email_cleanup_rule.dart create mode 100644 lib/features/cleanup/domain/model/recent_search_cleanup_rule.dart create mode 100644 lib/features/cleanup/domain/state/cleanup_recent_search_cache_state.dart create mode 100644 lib/features/cleanup/domain/usecases/cleanup_recent_search_cache_interactor.dart create mode 100644 lib/features/mailbox_dashboard/data/model/recent_search_cache.g.dart diff --git a/lib/features/caching/recent_search_cache_client.dart b/lib/features/caching/recent_search_cache_client.dart index 63b6bb213..150375967 100644 --- a/lib/features/caching/recent_search_cache_client.dart +++ b/lib/features/caching/recent_search_cache_client.dart @@ -30,7 +30,12 @@ class RecentSearchCacheClient extends HiveCacheClient { @override Future deleteMultipleItem(List listKey) { - throw UnimplementedError(); + return Future.sync(() async { + final boxEmail = await openBox(); + return boxEmail.deleteAll(listKey); + }).catchError((error) { + throw error; + }); } @override diff --git a/lib/features/cleanup/data/datasource/cleanup_datasource.dart b/lib/features/cleanup/data/datasource/cleanup_datasource.dart index 279c975ee..05674bdfa 100644 --- a/lib/features/cleanup/data/datasource/cleanup_datasource.dart +++ b/lib/features/cleanup/data/datasource/cleanup_datasource.dart @@ -1,10 +1,9 @@ -import 'package:tmail_ui_user/features/cleanup/domain/model/cleanup_rule.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/model/email_cleanup_rule.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/model/recent_search_cleanup_rule.dart'; abstract class CleanupDataSource { - Future cleanEmailCache(CleanupRule cleanupRule); + Future cleanEmailCache(EmailCleanupRule cleanupRule); - Future saveTimeCleanEmail(DateTime lastTime); - - Future getTimeCleanEmail(); + Future cleanRecentSearchCache(RecentSearchCleanupRule cleanupRule); } \ No newline at end of file diff --git a/lib/features/cleanup/data/datasource_impl/cleanup_datasource_impl.dart b/lib/features/cleanup/data/datasource_impl/cleanup_datasource_impl.dart index e33d978fe..b2167b76a 100644 --- a/lib/features/cleanup/data/datasource_impl/cleanup_datasource_impl.dart +++ b/lib/features/cleanup/data/datasource_impl/cleanup_datasource_impl.dart @@ -1,19 +1,19 @@ -import 'package:shared_preferences/shared_preferences.dart'; import 'package:tmail_ui_user/features/cleanup/data/datasource/cleanup_datasource.dart'; -import 'package:tmail_ui_user/features/cleanup/data/utils/cleanup_constant.dart'; -import 'package:tmail_ui_user/features/cleanup/domain/model/cleanup_rule.dart'; +import 'package:tmail_ui_user/features/cleanup/data/local/recent_search_cache_manager.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/model/email_cleanup_rule.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/model/recent_search_cleanup_rule.dart'; import 'package:tmail_ui_user/features/thread/data/local/email_cache_manager.dart'; class CleanupDataSourceImpl extends CleanupDataSource { final EmailCacheManager emailCacheManager; - final SharedPreferences sharedPreferences; + final RecentSearchCacheManager recentSearchCacheManager; - CleanupDataSourceImpl(this.emailCacheManager, this.sharedPreferences); + CleanupDataSourceImpl(this.emailCacheManager, this.recentSearchCacheManager); @override - Future cleanEmailCache(CleanupRule cleanupRule) { + Future cleanEmailCache(EmailCleanupRule cleanupRule) { return Future.sync(() async { return await emailCacheManager.clean(cleanupRule); }).catchError((error) { @@ -22,19 +22,9 @@ class CleanupDataSourceImpl extends CleanupDataSource { } @override - Future saveTimeCleanEmail(DateTime lastTime) { + Future cleanRecentSearchCache(RecentSearchCleanupRule cleanupRule) { return Future.sync(() async { - await sharedPreferences.setString(CleanupConstant.keyTimeCleanupEmail, lastTime.toIso8601String()); - }).catchError((error) { - throw error; - }); - } - - @override - Future getTimeCleanEmail() { - return Future.sync(() async { - final lastTime = sharedPreferences.getString(CleanupConstant.keyTimeCleanupEmail); - return DateTime.tryParse(lastTime ?? ''); + return await recentSearchCacheManager.clean(cleanupRule); }).catchError((error) { throw error; }); diff --git a/lib/features/cleanup/data/local/recent_search_cache_manager.dart b/lib/features/cleanup/data/local/recent_search_cache_manager.dart new file mode 100644 index 000000000..2a9e38d6d --- /dev/null +++ b/lib/features/cleanup/data/local/recent_search_cache_manager.dart @@ -0,0 +1,27 @@ + +import 'package:tmail_ui_user/features/caching/recent_search_cache_client.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/model/recent_search_cleanup_rule.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/recent_search_cache.dart'; + +class RecentSearchCacheManager { + + final RecentSearchCacheClient _recentSearchCacheClient; + + RecentSearchCacheManager(this._recentSearchCacheClient); + + Future clean(RecentSearchCleanupRule cleanupRule) async { + final recentSearchCacheExist = await _recentSearchCacheClient.isExistTable(); + if (recentSearchCacheExist) { + final listRecentSearchCache = await _recentSearchCacheClient.getAll(); + listRecentSearchCache.sortByCreationDate(); + + if (listRecentSearchCache.length > cleanupRule.storageLimit) { + final newListKeyRecent = listRecentSearchCache + .sublist(cleanupRule.storageLimit) + .map((recent) => recent.value) + .toList(); + await _recentSearchCacheClient.deleteMultipleItem(newListKeyRecent); + } + } + } +} \ No newline at end of file diff --git a/lib/features/cleanup/data/repository/cleanup_repository_impl.dart b/lib/features/cleanup/data/repository/cleanup_repository_impl.dart index d8419d02d..58d919970 100644 --- a/lib/features/cleanup/data/repository/cleanup_repository_impl.dart +++ b/lib/features/cleanup/data/repository/cleanup_repository_impl.dart @@ -1,6 +1,7 @@ import 'package:tmail_ui_user/features/cleanup/data/datasource/cleanup_datasource.dart'; -import 'package:tmail_ui_user/features/cleanup/domain/model/cleanup_rule.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/model/email_cleanup_rule.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/model/recent_search_cleanup_rule.dart'; import 'package:tmail_ui_user/features/cleanup/domain/repository/cleanup_repository.dart'; class CleanupRepositoryImpl extends CleanupRepository { @@ -10,10 +11,12 @@ class CleanupRepositoryImpl extends CleanupRepository { CleanupRepositoryImpl(this.cleanupDataSource); @override - Future cleanEmailCache(CleanupRule cleanupRule) async { - final isSuccess = await cleanupDataSource.cleanEmailCache(cleanupRule); - if (isSuccess) { - await cleanupDataSource.saveTimeCleanEmail(DateTime.now()); - } + Future cleanEmailCache(EmailCleanupRule cleanupRule) { + return cleanupDataSource.cleanEmailCache(cleanupRule); + } + + @override + Future cleanRecentSearchCache(RecentSearchCleanupRule cleanupRule) { + return cleanupDataSource.cleanRecentSearchCache(cleanupRule); } } \ No newline at end of file diff --git a/lib/features/cleanup/data/utils/cleanup_constant.dart b/lib/features/cleanup/data/utils/cleanup_constant.dart deleted file mode 100644 index 7827ccd31..000000000 --- a/lib/features/cleanup/data/utils/cleanup_constant.dart +++ /dev/null @@ -1,3 +0,0 @@ -class CleanupConstant { - static const keyTimeCleanupEmail = 'KEY_TIME_CLEANUP_EMAIL'; -} \ No newline at end of file diff --git a/lib/features/cleanup/domain/model/cleanup_rule.dart b/lib/features/cleanup/domain/model/cleanup_rule.dart index ad6570528..a11cc2369 100644 --- a/lib/features/cleanup/domain/model/cleanup_rule.dart +++ b/lib/features/cleanup/domain/model/cleanup_rule.dart @@ -1,13 +1,12 @@ import 'package:equatable/equatable.dart'; -class CleanupRule with EquatableMixin { - final Duration cachingEmailPeriod; +abstract class CleanupRule with EquatableMixin { - CleanupRule(this.cachingEmailPeriod); + CleanupRule(); @override - List get props => [cachingEmailPeriod]; + List get props => []; } class Duration with EquatableMixin { diff --git a/lib/features/cleanup/domain/model/email_cleanup_rule.dart b/lib/features/cleanup/domain/model/email_cleanup_rule.dart new file mode 100644 index 000000000..7bb9ba526 --- /dev/null +++ b/lib/features/cleanup/domain/model/email_cleanup_rule.dart @@ -0,0 +1,11 @@ + +import 'package:tmail_ui_user/features/cleanup/domain/model/cleanup_rule.dart'; + +class EmailCleanupRule extends CleanupRule { + final Duration cachingEmailPeriod; + + EmailCleanupRule(this.cachingEmailPeriod) : super(); + + @override + List get props => [cachingEmailPeriod]; +} \ No newline at end of file diff --git a/lib/features/cleanup/domain/model/recent_search_cleanup_rule.dart b/lib/features/cleanup/domain/model/recent_search_cleanup_rule.dart new file mode 100644 index 000000000..955faee33 --- /dev/null +++ b/lib/features/cleanup/domain/model/recent_search_cleanup_rule.dart @@ -0,0 +1,13 @@ + +import 'package:tmail_ui_user/features/cleanup/domain/model/cleanup_rule.dart'; + +class RecentSearchCleanupRule extends CleanupRule { + final int storageLimit; + + RecentSearchCleanupRule( + {this.storageLimit = 10} + ) : super(); + + @override + List get props => [storageLimit]; +} \ No newline at end of file diff --git a/lib/features/cleanup/domain/repository/cleanup_repository.dart b/lib/features/cleanup/domain/repository/cleanup_repository.dart index af4443ea2..6411709ba 100644 --- a/lib/features/cleanup/domain/repository/cleanup_repository.dart +++ b/lib/features/cleanup/domain/repository/cleanup_repository.dart @@ -1,5 +1,8 @@ -import 'package:tmail_ui_user/features/cleanup/domain/model/cleanup_rule.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/model/email_cleanup_rule.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/model/recent_search_cleanup_rule.dart'; abstract class CleanupRepository { - Future cleanEmailCache(CleanupRule cleanupRule); + Future cleanEmailCache(EmailCleanupRule cleanupRule); + + Future cleanRecentSearchCache(RecentSearchCleanupRule cleanupRule); } diff --git a/lib/features/cleanup/domain/state/cleanup_recent_search_cache_state.dart b/lib/features/cleanup/domain/state/cleanup_recent_search_cache_state.dart new file mode 100644 index 000000000..9a1dadbdb --- /dev/null +++ b/lib/features/cleanup/domain/state/cleanup_recent_search_cache_state.dart @@ -0,0 +1,18 @@ +import 'package:core/core.dart'; + +class CleanupRecentSearchCacheSuccess extends UIState { + + CleanupRecentSearchCacheSuccess(); + + @override + List get props => []; +} + +class CleanupRecentSearchCacheFailure extends FeatureFailure { + final dynamic exception; + + CleanupRecentSearchCacheFailure(this.exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/cleanup/domain/usecases/cleanup_email_cache_interactor.dart b/lib/features/cleanup/domain/usecases/cleanup_email_cache_interactor.dart index 64c2a224c..467415f64 100644 --- a/lib/features/cleanup/domain/usecases/cleanup_email_cache_interactor.dart +++ b/lib/features/cleanup/domain/usecases/cleanup_email_cache_interactor.dart @@ -1,6 +1,6 @@ import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; -import 'package:tmail_ui_user/features/cleanup/domain/model/cleanup_rule.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/model/email_cleanup_rule.dart'; import 'package:tmail_ui_user/features/cleanup/domain/repository/cleanup_repository.dart'; import 'package:tmail_ui_user/features/cleanup/domain/state/cleanup_email_cache_state.dart'; @@ -9,7 +9,7 @@ class CleanupEmailCacheInteractor { CleanupEmailCacheInteractor(this.cleanupRepository); - Future> execute(CleanupRule cleanupRule) async { + Future> execute(EmailCleanupRule cleanupRule) async { try { await cleanupRepository.cleanEmailCache(cleanupRule); return Right(CleanupEmailCacheSuccess()); diff --git a/lib/features/cleanup/domain/usecases/cleanup_recent_search_cache_interactor.dart b/lib/features/cleanup/domain/usecases/cleanup_recent_search_cache_interactor.dart new file mode 100644 index 000000000..769c926e9 --- /dev/null +++ b/lib/features/cleanup/domain/usecases/cleanup_recent_search_cache_interactor.dart @@ -0,0 +1,21 @@ +import 'package:core/core.dart'; +import 'package:dartz/dartz.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/model/recent_search_cleanup_rule.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/repository/cleanup_repository.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/state/cleanup_recent_search_cache_state.dart'; + +class CleanupRecentSearchCacheInteractor { + final CleanupRepository cleanupRepository; + + CleanupRecentSearchCacheInteractor(this.cleanupRepository); + + Future> execute(RecentSearchCleanupRule cleanupRule) async { + try { + await cleanupRepository.cleanRecentSearchCache(cleanupRule); + log('CleanupRecentSearchCacheInteractor::execute(): SUCCESS'); + return Right(CleanupRecentSearchCacheSuccess()); + } catch (e) { + return Left(CleanupRecentSearchCacheFailure(e)); + } + } +} \ No newline at end of file diff --git a/lib/features/home/presentation/home_bindings.dart b/lib/features/home/presentation/home_bindings.dart index bed7eec39..6f38646a7 100644 --- a/lib/features/home/presentation/home_bindings.dart +++ b/lib/features/home/presentation/home_bindings.dart @@ -1,12 +1,13 @@ import 'package:core/core.dart'; import 'package:get/get.dart'; -import 'package:shared_preferences/shared_preferences.dart'; import 'package:tmail_ui_user/features/base/base_bindings.dart'; import 'package:tmail_ui_user/features/cleanup/data/datasource/cleanup_datasource.dart'; import 'package:tmail_ui_user/features/cleanup/data/datasource_impl/cleanup_datasource_impl.dart'; +import 'package:tmail_ui_user/features/cleanup/data/local/recent_search_cache_manager.dart'; import 'package:tmail_ui_user/features/cleanup/data/repository/cleanup_repository_impl.dart'; import 'package:tmail_ui_user/features/cleanup/domain/repository/cleanup_repository.dart'; import 'package:tmail_ui_user/features/cleanup/domain/usecases/cleanup_email_cache_interactor.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/usecases/cleanup_recent_search_cache_interactor.dart'; import 'package:tmail_ui_user/features/home/presentation/home_controller.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/get_credential_interactor.dart'; import 'package:tmail_ui_user/features/thread/data/local/email_cache_manager.dart'; @@ -22,6 +23,7 @@ class HomeBindings extends BaseBindings { Get.find(), Get.find(), Get.find(), + Get.find(), )); } @@ -34,13 +36,14 @@ class HomeBindings extends BaseBindings { void bindingsDataSourceImpl() { Get.lazyPut(() => CleanupDataSourceImpl( Get.find(), - Get.find(), + Get.find(), )); } @override void bindingsInteractor() { Get.lazyPut(() => CleanupEmailCacheInteractor(Get.find())); + Get.lazyPut(() => CleanupRecentSearchCacheInteractor(Get.find())); } @override diff --git a/lib/features/home/presentation/home_controller.dart b/lib/features/home/presentation/home_controller.dart index 1a00d077d..3f2a668a9 100644 --- a/lib/features/home/presentation/home_controller.dart +++ b/lib/features/home/presentation/home_controller.dart @@ -4,7 +4,10 @@ import 'package:flutter_downloader/flutter_downloader.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:tmail_ui_user/features/cleanup/domain/model/cleanup_rule.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/model/email_cleanup_rule.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/model/recent_search_cleanup_rule.dart'; import 'package:tmail_ui_user/features/cleanup/domain/usecases/cleanup_email_cache_interactor.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/usecases/cleanup_recent_search_cache_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/state/get_credential_state.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/get_credential_interactor.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; @@ -17,6 +20,7 @@ class HomeController extends GetxController { final AuthorizationInterceptors _authorizationInterceptors; final CleanupEmailCacheInteractor _cleanupEmailCacheInteractor; final EmailReceiveManager _emailReceiveManager; + final CleanupRecentSearchCacheInteractor _cleanupRecentSearchCacheInteractor; HomeController( this._getCredentialInteractor, @@ -24,6 +28,7 @@ class HomeController extends GetxController { this._authorizationInterceptors, this._cleanupEmailCacheInteractor, this._emailReceiveManager, + this._cleanupRecentSearchCacheInteractor, ); @override @@ -38,8 +43,8 @@ class HomeController extends GetxController { @override void onReady() { + _cleanupCache(); super.onReady(); - _cleanupEmailCache(); } void _initFlutterDownloader() { @@ -50,9 +55,11 @@ class HomeController extends GetxController { static void downloadCallback(String id, DownloadTaskStatus status, int progress) {} - void _cleanupEmailCache() async { - await _cleanupEmailCacheInteractor.execute(CleanupRule(Duration.defaultCacheInternal)) - .then((value) => _getCredentialAction()); + void _cleanupCache() async { + await Future.wait([ + _cleanupEmailCacheInteractor.execute(EmailCleanupRule(Duration.defaultCacheInternal)), + _cleanupRecentSearchCacheInteractor.execute(RecentSearchCleanupRule()) + ]).then((value) => _getCredentialAction()); } void _getCredentialAction() async { diff --git a/lib/features/mailbox_dashboard/data/model/recent_search_cache.dart b/lib/features/mailbox_dashboard/data/model/recent_search_cache.dart index 12e53b459..db99131af 100644 --- a/lib/features/mailbox_dashboard/data/model/recent_search_cache.dart +++ b/lib/features/mailbox_dashboard/data/model/recent_search_cache.dart @@ -1,6 +1,7 @@ import 'package:equatable/equatable.dart'; import 'package:hive/hive.dart'; +import 'package:jmap_dart_client/jmap/core/extensions/date_time_extension.dart'; import 'package:tmail_ui_user/features/caching/utils/caching_constants.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart'; @@ -35,4 +36,13 @@ extension RecentSearchCacheExtension on RecentSearchCache { bool match(String pattern) { return value.toLowerCase().contains(pattern.toLowerCase()); } +} + +extension ListRecentSearchCacheExtension on List { + + void sortByCreationDate() { + sort((recentSearch1, recentSearch2) { + return recentSearch1.creationDate.compareToSort(recentSearch1.creationDate, false); + }); + } } \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/data/model/recent_search_cache.g.dart b/lib/features/mailbox_dashboard/data/model/recent_search_cache.g.dart new file mode 100644 index 000000000..b8c840d81 --- /dev/null +++ b/lib/features/mailbox_dashboard/data/model/recent_search_cache.g.dart @@ -0,0 +1,44 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'recent_search_cache.dart'; + +// ************************************************************************** +// TypeAdapterGenerator +// ************************************************************************** + +class RecentSearchCacheAdapter extends TypeAdapter { + @override + final int typeId = 7; + + @override + RecentSearchCache read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; + return RecentSearchCache( + fields[0] as String, + fields[1] as DateTime, + ); + } + + @override + void write(BinaryWriter writer, RecentSearchCache obj) { + writer + ..writeByte(2) + ..writeByte(0) + ..write(obj.value) + ..writeByte(1) + ..write(obj.creationDate); + } + + @override + int get hashCode => typeId.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is RecentSearchCacheAdapter && + runtimeType == other.runtimeType && + typeId == other.typeId; +} diff --git a/lib/features/thread/data/extensions/email_cache_extension.dart b/lib/features/thread/data/extensions/email_cache_extension.dart index 96d453c67..83ba6ce7a 100644 --- a/lib/features/thread/data/extensions/email_cache_extension.dart +++ b/lib/features/thread/data/extensions/email_cache_extension.dart @@ -6,7 +6,7 @@ import 'package:jmap_dart_client/jmap/core/utc_date.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; -import 'package:tmail_ui_user/features/cleanup/domain/model/cleanup_rule.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/model/email_cleanup_rule.dart'; import 'package:tmail_ui_user/features/thread/data/model/email_cache.dart'; import 'package:tmail_ui_user/features/thread/data/extensions/email_address_hive_cache_extension.dart'; @@ -34,7 +34,7 @@ extension EmailCacheExtension on EmailCache { ); } - bool expireTimeCaching(CleanupRule cleanupRule) { + bool expireTimeCaching(EmailCleanupRule cleanupRule) { final currentTime = DateTime.now(); if (receivedAt != null) { final countDay = currentTime.daysBetween(receivedAt!.toLocal()); diff --git a/lib/features/thread/data/local/email_cache_manager.dart b/lib/features/thread/data/local/email_cache_manager.dart index f1db0e4e2..a0b79d8c8 100644 --- a/lib/features/thread/data/local/email_cache_manager.dart +++ b/lib/features/thread/data/local/email_cache_manager.dart @@ -4,7 +4,7 @@ import 'package:model/model.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:tmail_ui_user/features/caching/email_cache_client.dart'; -import 'package:tmail_ui_user/features/cleanup/domain/model/cleanup_rule.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/model/email_cleanup_rule.dart'; import 'package:tmail_ui_user/features/thread/data/extensions/email_cache_extension.dart'; import 'package:tmail_ui_user/features/thread/data/extensions/email_extension.dart'; import 'package:tmail_ui_user/features/thread/data/extensions/list_email_cache_extension.dart'; @@ -63,7 +63,7 @@ class EmailCacheManager { } } - Future clean(CleanupRule cleanupRule) async { + Future clean(EmailCleanupRule cleanupRule) async { final emailCacheExist = await _emailCacheClient.isExistTable(); if (emailCacheExist) { final listEmailCache = await _emailCacheClient.getAll(); @@ -72,8 +72,6 @@ class EmailCacheManager { .map((emailCache) => emailCache.id) .toList(); await _emailCacheClient.deleteMultipleItem(listEmailIdCacheExpire); - return true; } - return false; } } \ No newline at end of file diff --git a/lib/main/bindings/local/local_bindings.dart b/lib/main/bindings/local/local_bindings.dart index 11cdced46..b6875b88e 100644 --- a/lib/main/bindings/local/local_bindings.dart +++ b/lib/main/bindings/local/local_bindings.dart @@ -6,6 +6,7 @@ import 'package:tmail_ui_user/features/caching/email_cache_client.dart'; import 'package:tmail_ui_user/features/caching/mailbox_cache_client.dart'; import 'package:tmail_ui_user/features/caching/recent_search_cache_client.dart'; import 'package:tmail_ui_user/features/caching/state_cache_client.dart'; +import 'package:tmail_ui_user/features/cleanup/data/local/recent_search_cache_manager.dart'; import 'package:tmail_ui_user/features/mailbox/data/local/mailbox_cache_manager.dart'; import 'package:tmail_ui_user/features/thread/data/local/email_cache_manager.dart'; @@ -28,6 +29,7 @@ class LocalBindings extends Bindings { Get.put(EmailCacheClient()); Get.put(EmailCacheManager(Get.find())); Get.put(RecentSearchCacheClient()); + Get.put(RecentSearchCacheManager(Get.find())); Get.put(CachingManager( Get.find(), Get.find(),