Merge branch 'wid-fix' of https://github.com/ente-io/ente into wid-fix
This commit is contained in:
@@ -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<void> setSelectedAlbums(List<String> selectedAlbums) async {
|
||||
Future<void> updateSelectedAlbums(List<String> 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<void> 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<void> updateAlbumsChanged(bool value) async {
|
||||
Future<void> setSelectionChange(bool value) async {
|
||||
_logger.info("Updating albums changed flag to $value");
|
||||
await _prefs.setBool(ALBUMS_CHANGED_KEY, value);
|
||||
}
|
||||
@@ -131,18 +132,16 @@ class AlbumHomeWidgetService {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> albumsChanged() async {
|
||||
Future<void> _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();
|
||||
}
|
||||
|
||||
@@ -151,7 +150,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);
|
||||
}
|
||||
}
|
||||
@@ -253,7 +254,7 @@ class AlbumHomeWidgetService {
|
||||
|
||||
Future<bool> _shouldUpdateWidgetCache() async {
|
||||
// Check if albums changed flag is set
|
||||
if (getAlbumsChanged() == true) {
|
||||
if (hasSelectionChanged() == true) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -269,7 +270,6 @@ class AlbumHomeWidgetService {
|
||||
|
||||
if (currentHash == lastHash) {
|
||||
final saveStatus = getAlbumsStatus();
|
||||
|
||||
switch (saveStatus) {
|
||||
case WidgetStatus.syncedPartially:
|
||||
return await countHomeWidgets() > 0;
|
||||
|
||||
@@ -145,7 +145,7 @@ class MemoriesCacheService {
|
||||
unawaited(_prefs.setBool(_shouldUpdateCacheKey, true));
|
||||
}
|
||||
|
||||
Future<List<SmartMemory>> getMemories() async {
|
||||
Future<List<SmartMemory>> 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;
|
||||
}
|
||||
|
||||
@@ -257,12 +257,13 @@ class MemoryHomeWidgetService {
|
||||
_logger.info("Home Widget updated: ${message ?? "standard update"}");
|
||||
}
|
||||
|
||||
Future<void> _updateMemoriesWidgetCache() async {
|
||||
// _updateMemoriesWidgetCache will return false if no memories were cached
|
||||
Future<bool> _updateMemoriesWidgetCache() async {
|
||||
// TODO: Can update the method to fetch directly max limit random memories
|
||||
final memoriesWithFiles = await _getMemoriesWithFiles();
|
||||
if (memoriesWithFiles.isEmpty) {
|
||||
await clearWidget();
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
final bool isWidgetPresent = await countHomeWidgets() > 0;
|
||||
@@ -305,7 +306,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
|
||||
@@ -329,7 +330,7 @@ class MemoryHomeWidgetService {
|
||||
}
|
||||
|
||||
if (renderedCount == 0) {
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (isWidgetPresent) {
|
||||
@@ -339,5 +340,6 @@ class MemoryHomeWidgetService {
|
||||
await _refreshWidget(
|
||||
message: "Switched to next memory set, total: $renderedCount",
|
||||
);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -280,11 +280,11 @@ class PeopleHomeWidgetService {
|
||||
return peopleIds ?? [];
|
||||
}
|
||||
|
||||
Future<Map<String, (String, Iterable<EnteFile>)>> _getPeople() async {
|
||||
final peopleIds = await _getEffectiveSelectedPeopleIds();
|
||||
Future<Map<String, (String, Iterable<EnteFile>)>> _getPeople(
|
||||
List<String> personIds,
|
||||
) async {
|
||||
final Map<String, (String, Iterable<EnteFile>)> 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);
|
||||
@@ -323,7 +323,7 @@ class PeopleHomeWidgetService {
|
||||
Future<void> _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");
|
||||
|
||||
@@ -101,10 +101,9 @@ class _AlbumsWidgetSettingsState extends State<AlbumsWidgetSettings> {
|
||||
.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,
|
||||
|
||||
@@ -128,7 +128,7 @@ class _HomeWidgetState extends State<HomeWidget> {
|
||||
super.initState();
|
||||
|
||||
if (LocalSyncService.instance.hasCompletedFirstImport()) {
|
||||
syncWidget();
|
||||
syncWidget();
|
||||
}
|
||||
_tabChangedEventSubscription =
|
||||
Bus.instance.on<TabChangedEvent>().listen((event) {
|
||||
|
||||
Reference in New Issue
Block a user