diff --git a/mobile/lib/services/memories_cache_service.dart b/mobile/lib/services/memories_cache_service.dart index 649204e719..2a7ae85742 100644 --- a/mobile/lib/services/memories_cache_service.dart +++ b/mobile/lib/services/memories_cache_service.dart @@ -82,9 +82,13 @@ class MemoriesCacheService { return _prefs.getBool(_showAnyMemoryKey) ?? true; } - bool get enableSmartMemories => flagService.showSmartMemories; + bool get enableSmartMemories => + flagService.showSmartMemories && flagService.hasGrantedMLConsent; Future _checkIfTimeToUpdateCache() async { + if (!enableSmartMemories) { + return; + } if (lastMemoriesCacheUpdateTime < DateTime.now() .subtract(kMemoriesUpdateFrequency) @@ -121,6 +125,7 @@ class MemoriesCacheService { if (!showAnyMemories || !enableSmartMemories) { return; } + await _checkIfTimeToUpdateCache(); try { if ((!_shouldUpdate && !forced) || _isUpdateInProgress) { _logger.info( @@ -276,10 +281,10 @@ class MemoriesCacheService { } } - Future> _getMemoriesFromCache() async { + Future?> _getMemoriesFromCache() async { final cache = await _readCacheFromDisk(); if (cache == null) { - return []; + return null; } final result = await _fromCacheToMemories(cache); return result; @@ -289,10 +294,22 @@ class MemoriesCacheService { if (!showAnyMemories) { return []; } + if (!enableSmartMemories) { + final fillerMemories = await smartMemoriesService.calcFillerResults(); + return fillerMemories; + } if (_cachedMemories != null) { return _cachedMemories!; } _cachedMemories = await _getMemoriesFromCache(); + if (_cachedMemories == null) { + await updateCache(forced: true); + _cachedMemories = await _getMemoriesFromCache(); + } + if (_cachedMemories!.isEmpty) { + _logger.severe("No memories found in (computed) cache, getting fillers"); + _cachedMemories = await smartMemoriesService.calcFillerResults(); + } return _cachedMemories!; } diff --git a/mobile/lib/services/smart_memories_service.dart b/mobile/lib/services/smart_memories_service.dart index 2ff1f19c13..9cdfbf92cc 100644 --- a/mobile/lib/services/smart_memories_service.dart +++ b/mobile/lib/services/smart_memories_service.dart @@ -135,6 +135,15 @@ class SmartMemoriesService { } } + Future> calcFillerResults() async { + final now = DateTime.now(); + final allFiles = Set.from( + await SearchService.instance.getAllFilesForSearch(), + ); + final fillerMemories = await _getFillerResults(allFiles, now); + return fillerMemories; + } + void _deductUsedMemories( Set files, List memories, diff --git a/mobile/lib/ui/home/memories/memories_widget.dart b/mobile/lib/ui/home/memories/memories_widget.dart index ade6fcaaf5..416eaf5c4b 100644 --- a/mobile/lib/ui/home/memories/memories_widget.dart +++ b/mobile/lib/ui/home/memories/memories_widget.dart @@ -54,7 +54,7 @@ class _MemoriesWidgetState extends State { @override Widget build(BuildContext context) { - if (!MemoriesService.instance.showMemories) { + if (!memoriesCacheService.showAnyMemories) { return const SizedBox.shrink(); } if (memoriesCacheService.enableSmartMemories) { @@ -69,9 +69,6 @@ class _MemoriesWidgetState extends State { null, ), builder: (context, snapshot) { - if (snapshot.hasData && snapshot.data!.isEmpty) { - return _oldMemories(); - } if (snapshot.hasError || !snapshot.hasData) { return SizedBox( height: _maxHeight + 12 + 10,