diff --git a/mobile/lib/services/album_home_widget_service.dart b/mobile/lib/services/album_home_widget_service.dart index 0433e49742..62f47d495e 100644 --- a/mobile/lib/services/album_home_widget_service.dart +++ b/mobile/lib/services/album_home_widget_service.dart @@ -1,3 +1,4 @@ +import "dart:async"; import 'dart:convert'; import "dart:math"; @@ -50,8 +51,9 @@ class AlbumHomeWidgetService { return selectedAlbums?.map((id) => int.tryParse(id) ?? 0).toList(); } - Future setSelectedAlbums(List selectedAlbums) async { + Future updateSelectedAlbums(List selectedAlbums) async { await _prefs.setStringList(SELECTED_ALBUMS_KEY, selectedAlbums); + unawaited(_refreshOnSelection()); } String? getAlbumsLastHash() { @@ -74,7 +76,7 @@ class AlbumHomeWidgetService { if (forceFetchNewAlbums) { _logger.info("Initializing albums widget: updating albums cache"); await _updateAlbumsWidgetCache(); - await updateAlbumsChanged(false); + await setSelectionChange(false); } else { _logger.info("Initializing albums widget: syncing existing albums"); await _refreshAlbumsWidget(); @@ -84,7 +86,6 @@ class AlbumHomeWidgetService { Future clearWidget() async { if (getAlbumsStatus() == WidgetStatus.syncedEmpty) { - _logger.info("Widget already empty, nothing to clear"); return; } @@ -93,11 +94,11 @@ class AlbumHomeWidgetService { await _refreshWidget(message: "AlbumsHomeWidget cleared & updated"); } - bool? getAlbumsChanged() { + bool? hasSelectionChanged() { return _prefs.getBool(ALBUMS_CHANGED_KEY); } - Future updateAlbumsChanged(bool value) async { + Future setSelectionChange(bool value) async { _logger.info("Updating albums changed flag to $value"); await _prefs.setBool(ALBUMS_CHANGED_KEY, value); } @@ -132,18 +133,16 @@ class AlbumHomeWidgetService { } } - Future albumsChanged() async { + Future _refreshOnSelection() async { final lastHash = getAlbumsLastHash(); final selectedAlbumIds = await _getEffectiveSelectedAlbumIds(); final currentHash = _calculateHash(selectedAlbumIds); - if (lastHash != null && currentHash == lastHash) { _logger.info("No changes detected in albums"); return; } - _logger.info("Albums changed, updating widget"); - await updateAlbumsChanged(true); + await setSelectionChange(true); await initAlbumHomeWidget(); } @@ -152,7 +151,9 @@ class AlbumHomeWidgetService { for (final albumId in albumIds) { final collection = CollectionsService.instance.getCollectionByID(albumId); - if (collection != null) { + if (collection != null && + !collection.isDeleted && + collection.isHidden()) { albums.add(collection); } } @@ -232,7 +233,7 @@ class AlbumHomeWidgetService { final hasCompletedFirstImport = LocalSyncService.instance.hasCompletedFirstImport(); if (!hasCompletedFirstImport) { - _logger.warning("First import not completed"); + _logger.info("First import not completed"); return true; } @@ -241,7 +242,7 @@ class AlbumHomeWidgetService { final albums = getAlbumsByIds(selectedAlbumIds); if (albums.isEmpty) { - _logger.warning("Selected albums not found"); + _logger.info("Selected albums not found"); return true; } @@ -256,7 +257,7 @@ class AlbumHomeWidgetService { Future _shouldUpdateWidgetCache() async { // Check if albums changed flag is set - if (getAlbumsChanged() == true) { + if (hasSelectionChanged() == true) { return true; } @@ -273,7 +274,6 @@ class AlbumHomeWidgetService { if (currentHash == lastHash) { final saveStatus = getAlbumsStatus(); - switch (saveStatus) { case WidgetStatus.syncedPartially: return await countHomeWidgets() > 0; diff --git a/mobile/lib/services/memories_cache_service.dart b/mobile/lib/services/memories_cache_service.dart index b967244ad7..a7cb0eea26 100644 --- a/mobile/lib/services/memories_cache_service.dart +++ b/mobile/lib/services/memories_cache_service.dart @@ -145,7 +145,7 @@ class MemoriesCacheService { unawaited(_prefs.setBool(_shouldUpdateCacheKey, true)); } - Future> getMemories() async { + Future> getMemories({bool onlyUseCache = false}) async { _logger.info("getMemories called"); if (!showAnyMemories) { _logger.info('Showing memories is disabled in settings, showing none'); @@ -155,6 +155,9 @@ class MemoriesCacheService { if (_cachedMemories != null && _cachedMemories!.isNotEmpty) { _logger.info("Found memories in memory cache"); return _cachedMemories!; + } else if (onlyUseCache) { + _logger.info("Only using cache, no memories found"); + return []; } try { if (!enableSmartMemories) { @@ -434,7 +437,7 @@ class MemoriesCacheService { ); return []; } - final allMemories = await getMemories(); + final allMemories = await getMemories(onlyUseCache: true); if (onThisDay && pastYears && smart) { return allMemories; } diff --git a/mobile/lib/services/memory_home_widget_service.dart b/mobile/lib/services/memory_home_widget_service.dart index f03ccbf634..de54a236fd 100644 --- a/mobile/lib/services/memory_home_widget_service.dart +++ b/mobile/lib/services/memory_home_widget_service.dart @@ -163,14 +163,12 @@ class MemoryHomeWidgetService { final hasCompletedFirstImport = LocalSyncService.instance.hasCompletedFirstImport(); if (!hasCompletedFirstImport) { - _logger.warning("First import not completed"); return true; } // Check if memories are enabled final areMemoriesShown = memoriesCacheService.showAnyMemories; if (!areMemoriesShown) { - _logger.warning("Memories not enabled"); return true; } @@ -262,13 +260,14 @@ class MemoryHomeWidgetService { _logger.info("Home Widget updated: ${message ?? "standard update"}"); } - Future _updateMemoriesWidgetCache() async { + // _updateMemoriesWidgetCache will return false if no memories were cached + Future _updateMemoriesWidgetCache() async { // TODO: Can update the method to fetch directly max limit random memories final memoriesWithFiles = await _getMemoriesWithFiles(); if (memoriesWithFiles.isEmpty) { _logger.warning("No memories found, clearing widget"); await clearWidget(); - return; + return false; } final bool isWidgetPresent = await countHomeWidgets() > 0; @@ -311,7 +310,7 @@ class MemoryHomeWidgetService { // Check for blockers again before continuing if (await _hasAnyBlockers()) { await clearWidget(); - return; + return true; } // Show update toast after first item is rendered @@ -335,7 +334,7 @@ class MemoryHomeWidgetService { } if (renderedCount == 0) { - return; + return true; } if (isWidgetPresent) { @@ -345,5 +344,6 @@ class MemoryHomeWidgetService { await _refreshWidget( message: "Switched to next memory set, total: $renderedCount", ); + return true; } } diff --git a/mobile/lib/services/people_home_widget_service.dart b/mobile/lib/services/people_home_widget_service.dart index c958988bf2..a2b6636a82 100644 --- a/mobile/lib/services/people_home_widget_service.dart +++ b/mobile/lib/services/people_home_widget_service.dart @@ -212,7 +212,6 @@ class PeopleHomeWidgetService { final hasCompletedFirstImport = LocalSyncService.instance.hasCompletedFirstImport(); if (!hasCompletedFirstImport) { - _logger.warning("First import not completed"); return true; } @@ -278,11 +277,11 @@ class PeopleHomeWidgetService { return peopleIds ?? []; } - Future)>> _getPeople() async { - final peopleIds = await _getEffectiveSelectedPeopleIds(); + Future)>> _getPeople( + List personIds, + ) async { final Map)> peopleFiles = {}; - - final persons = await PersonService.instance.getCertainPersons(peopleIds); + final persons = await PersonService.instance.getCertainPersons(personIds); for (final person in persons) { final clusterFiles = await SearchService.instance .getClusterFilesForPersonID(person.remoteID); @@ -321,7 +320,7 @@ class PeopleHomeWidgetService { Future _updatePeopleWidgetCache() async { final peopleIds = await _getEffectiveSelectedPeopleIds(); // TODO: Add logic to directly get random people files from database - final peopleWithFiles = await _getPeople(); + final peopleWithFiles = await _getPeople(peopleIds); if (peopleWithFiles.isEmpty) { _logger.warning("No files found for any people, clearing widget"); diff --git a/mobile/lib/ui/settings/widgets/albums_widget_settings.dart b/mobile/lib/ui/settings/widgets/albums_widget_settings.dart index 03ec9e9b42..de1e0270a4 100644 --- a/mobile/lib/ui/settings/widgets/albums_widget_settings.dart +++ b/mobile/lib/ui/settings/widgets/albums_widget_settings.dart @@ -101,10 +101,9 @@ class _AlbumsWidgetSettingsState extends State { .map((e) => e.id.toString()) .toList(); await AlbumHomeWidgetService.instance - .setSelectedAlbums(albums); + .updateSelectedAlbums(albums); Navigator.pop(context); - await AlbumHomeWidgetService.instance - .albumsChanged(); + } : null, isDisabled: _selectedAlbums.albums.isEmpty, diff --git a/mobile/lib/ui/tabs/home_widget.dart b/mobile/lib/ui/tabs/home_widget.dart index de554f0ed1..6c187e0359 100644 --- a/mobile/lib/ui/tabs/home_widget.dart +++ b/mobile/lib/ui/tabs/home_widget.dart @@ -128,7 +128,7 @@ class _HomeWidgetState extends State { super.initState(); if (LocalSyncService.instance.hasCompletedFirstImport()) { - syncWidget(); + syncWidget(); } _tabChangedEventSubscription = Bus.instance.on().listen((event) {