From bfe738c846299347dee3e8b3174ce99115378bab Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Thu, 5 Jun 2025 17:17:25 +0530 Subject: [PATCH] Fix duplicate memories decoding --- .../lib/services/memories_cache_service.dart | 53 ++++++++++--------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/mobile/lib/services/memories_cache_service.dart b/mobile/lib/services/memories_cache_service.dart index 7d6db009ca..f3d6eb9b59 100644 --- a/mobile/lib/services/memories_cache_service.dart +++ b/mobile/lib/services/memories_cache_service.dart @@ -50,6 +50,7 @@ class MemoriesCacheService { bool get isUpdatingMemories => _isUpdatingMemories; final _memoriesUpdateLock = Lock(); + final _memoriesGetLock = Lock(); MemoriesCacheService(this._prefs) { _logger.fine("MemoriesCacheService constructor"); @@ -143,37 +144,41 @@ class MemoriesCacheService { } Future> getMemories() async { + _logger.info("getMemories called"); if (!showAnyMemories) { _logger.info('Showing memories is disabled in settings, showing none'); return []; } - if (_cachedMemories != null && _cachedMemories!.isNotEmpty) { - return _cachedMemories!; - } - try { - if (!enableSmartMemories) { - await _calculateRegularFillers(); + return _memoriesGetLock.synchronized(() async { + if (_cachedMemories != null && _cachedMemories!.isNotEmpty) { + _logger.info("Found memories in memory cache"); return _cachedMemories!; } - _cachedMemories = await _getMemoriesFromCache(); - if (_cachedMemories == null || _cachedMemories!.isEmpty) { - _logger.warning( - "No memories found in cache, force updating cache. Possible severe caching issue", - ); - await updateCache(forced: true); - } else { - _logger.info("Found memories in cache"); + try { + if (!enableSmartMemories) { + await _calculateRegularFillers(); + return _cachedMemories!; + } + _cachedMemories = await _getMemoriesFromCache(); + if (_cachedMemories == null || _cachedMemories!.isEmpty) { + _logger.warning( + "No memories found in cache, force updating cache. Possible severe caching issue", + ); + await updateCache(forced: true); + } else { + _logger.info("Found memories in cache"); + } + if (_cachedMemories == null || _cachedMemories!.isEmpty) { + _logger + .severe("No memories found in (computed) cache, getting fillers"); + await _calculateRegularFillers(); + } + return _cachedMemories!; + } catch (e, s) { + _logger.severe("Error in getMemories", e, s); + return []; } - if (_cachedMemories == null || _cachedMemories!.isEmpty) { - _logger - .severe("No memories found in (computed) cache, getting fillers"); - await _calculateRegularFillers(); - } - return _cachedMemories!; - } catch (e, s) { - _logger.severe("Error in getMemories", e, s); - return []; - } + }); } Future _calculateRegularFillers() async {