From 66c3870518c8f93c7b95cd403ad12f5e4cd69f5a Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Tue, 17 Sep 2024 15:47:26 +0530 Subject: [PATCH] [mob] Cache magic result in memory --- mobile/lib/services/magic_cache_service.dart | 30 ++++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/mobile/lib/services/magic_cache_service.dart b/mobile/lib/services/magic_cache_service.dart index 05aaf00565..776982514a 100644 --- a/mobile/lib/services/magic_cache_service.dart +++ b/mobile/lib/services/magic_cache_service.dart @@ -49,7 +49,7 @@ class MagicCache { } extension MagicCacheServiceExtension on MagicCache { - Future toGenericSearchResult() async { + Future toGenericSearchResult() async { final enteFilesInMagicCache = []; await FilesDB.instance .getFilesFromIDs(fileUploadedIDs) @@ -60,6 +60,9 @@ extension MagicCacheServiceExtension on MagicCache { } } }); + if (enteFilesInMagicCache.isEmpty) { + return null; + } return GenericSearchResult( ResultType.magic, title, @@ -94,6 +97,8 @@ class MagicCacheService { final Logger _logger = Logger((MagicCacheService).toString()); MagicCacheService._privateConstructor(); + Future>? _magicCacheFuture; + static final MagicCacheService instance = MagicCacheService._privateConstructor(); @@ -172,6 +177,7 @@ class MagicCacheService { if (!file.existsSync()) { file.createSync(recursive: true); } + _magicCacheFuture = Future.value(magicCaches); await file .writeAsBytes(MagicCache.encodeListToJson(magicCaches).codeUnits); w?.log("cacheWritten"); @@ -182,11 +188,20 @@ class MagicCacheService { } } - Future?> _getMagicCache() async { + Future> _getMagicCache() async { + if (_magicCacheFuture != null) { + return _magicCacheFuture!; + } + _magicCacheFuture = _readResultFromDisk(); + return _magicCacheFuture!; + } + + Future> _readResultFromDisk() async { + _logger.info("Reading magic cache result from disk"); final file = File(await _getCachePath()); if (!file.existsSync()) { _logger.info("No magic cache found"); - return null; + return []; } final jsonString = file.readAsStringSync(); return MagicCache.decodeJsonToList(jsonString); @@ -202,15 +217,20 @@ class MagicCacheService { kDebugMode ? EnteWatch("magicGenericSearchResult") : null; w?.start(); final magicCaches = await _getMagicCache(); - if (magicCaches == null) { + if (magicCaches.isEmpty) { + w?.log("noCacheFound"); _logger.info("No magic cache found"); return []; + } else { + w?.log("cacheFound"); } final List genericSearchResults = []; for (MagicCache magicCache in magicCaches) { final genericSearchResult = await magicCache.toGenericSearchResult(); - genericSearchResults.add(genericSearchResult); + if (genericSearchResult != null) { + genericSearchResults.add(genericSearchResult); + } } w?.logAndReset("done"); return genericSearchResults;