From 32a5399c58d1d74ee0ca026fd406d10101a525d1 Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Mon, 17 Mar 2025 10:55:05 +0530 Subject: [PATCH 1/7] [mob][photos] Log faceIDs --- mobile/lib/ui/viewer/file_details/faces_item_widget.dart | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mobile/lib/ui/viewer/file_details/faces_item_widget.dart b/mobile/lib/ui/viewer/file_details/faces_item_widget.dart index 8db2589aa2..25b7bf6087 100644 --- a/mobile/lib/ui/viewer/file_details/faces_item_widget.dart +++ b/mobile/lib/ui/viewer/file_details/faces_item_widget.dart @@ -13,6 +13,8 @@ import "package:photos/ui/components/info_item_widget.dart"; import "package:photos/ui/viewer/file_details/face_widget.dart"; import "package:photos/utils/face/face_box_crop.dart"; +final Logger _logger = Logger("FacesItemWidget"); + class FacesItemWidget extends StatefulWidget { final EnteFile file; const FacesItemWidget(this.file, {super.key}); @@ -135,6 +137,7 @@ class _FacesItemWidgetState extends State { final _ = await getCachedFaceCrops(file, faces); final faceCrops = getCachedFaceCrops(file, faces); + final List faceIDs = []; for (final Face face in faces) { final String? clusterID = faceIdsToClusterIds[face.faceID]; final PersonEntity? person = clusterIDToPerson[clusterID] != null @@ -142,6 +145,7 @@ class _FacesItemWidgetState extends State { : null; final highlight = (clusterID == lastViewedClusterID) && (person == null); + faceIDs.add(face.faceID); faceWidgets.add( FaceWidget( file, @@ -155,9 +159,11 @@ class _FacesItemWidgetState extends State { ); } + _logger.info('File ${file.uploadedFileID} has FaceIDs: $faceIDs'); + return faceWidgets; } catch (e, s) { - Logger("FacesItemWidget").info(e, s); + _logger.severe('failed to get face widgets in file info', e, s); return []; } } From 49b280d2b0edb6b175a6ba874a619fef9bf97c74 Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Mon, 17 Mar 2025 11:42:20 +0530 Subject: [PATCH 2/7] [mob][photos] Fix consistent time format --- .../lib/ui/viewer/date/date_time_picker.dart | 2 +- .../lib/ui/viewer/date/edit_date_sheet.dart | 27 ++++++++++++------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/mobile/lib/ui/viewer/date/date_time_picker.dart b/mobile/lib/ui/viewer/date/date_time_picker.dart index 99ca78b7a9..ac7034c1bd 100644 --- a/mobile/lib/ui/viewer/date/date_time_picker.dart +++ b/mobile/lib/ui/viewer/date/date_time_picker.dart @@ -177,4 +177,4 @@ class _DateTimePickerWidgetState extends State { ), ); } -} \ No newline at end of file +} diff --git a/mobile/lib/ui/viewer/date/edit_date_sheet.dart b/mobile/lib/ui/viewer/date/edit_date_sheet.dart index 7b0e70faff..843054bacd 100644 --- a/mobile/lib/ui/viewer/date/edit_date_sheet.dart +++ b/mobile/lib/ui/viewer/date/edit_date_sheet.dart @@ -13,8 +13,7 @@ Future showEditDateSheet( BuildContext context, Iterable enteFiles, { bool showHeader = true, - } -) async { +}) async { final newDate = await showModalBottomSheet( context: context, isScrollControlled: true, @@ -266,7 +265,9 @@ class DateAndTimeWidget extends StatelessWidget { final colorScheme = getEnteColorScheme(context); final locale = Localizations.localeOf(context); final String date = DateFormat.yMMMd(locale.languageCode).format(dateTime); - final String time = DateFormat.Hm(locale.languageCode).format(dateTime); + final String time = DateFormat( + MediaQuery.of(context).alwaysUse24HourFormat ? 'HH:mm' : 'h:mm a', + ).format(dateTime); return Padding( padding: const EdgeInsets.symmetric(vertical: 8), child: Column( @@ -396,7 +397,7 @@ class DateAndTimeWidget extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - _formatDate(dateTime, locale), + _formatDate(dateTime, locale, context), style: TextStyle( color: colorScheme.textFaint, fontSize: 12, @@ -413,7 +414,7 @@ class DateAndTimeWidget extends StatelessWidget { ), ), Text( - _formatDate(newRangeEnd!, locale), + _formatDate(newRangeEnd!, locale, context), style: TextStyle( color: colorScheme.textFaint, fontSize: 12, @@ -578,7 +579,7 @@ class PhotoDateHeaderWidget extends StatelessWidget { Row( children: [ Text( - _formatDate(startDate, locale), + _formatDate(startDate, locale, context), style: TextStyle( color: colorScheme.textMuted, fontSize: 12, @@ -595,7 +596,7 @@ class PhotoDateHeaderWidget extends StatelessWidget { ), ), Text( - _formatDate(endDate, locale), + _formatDate(endDate, locale, context), style: TextStyle( color: colorScheme.textMuted, fontSize: 12, @@ -627,7 +628,11 @@ class PhotoDateHeaderWidget extends StatelessWidget { ), const SizedBox(height: 4), Text( - "${DateFormat.yMEd(locale.languageCode).format(startDate)} · ${DateFormat.Hm(locale.languageCode).format(startDate)}", + "${DateFormat.yMEd(locale.languageCode).format(startDate)} · ${DateFormat( + MediaQuery.of(context).alwaysUse24HourFormat + ? 'HH:mm' + : 'h:mm a', + ).format(startDate)}", style: TextStyle( color: colorScheme.textMuted, fontSize: 12, @@ -642,6 +647,8 @@ class PhotoDateHeaderWidget extends StatelessWidget { } } -String _formatDate(DateTime date, Locale locale) { - return "${DateFormat.yMEd(locale.languageCode).format(date)}\n${DateFormat.Hm(locale.languageCode).format(date)}"; +String _formatDate(DateTime date, Locale locale, BuildContext context) { + return "${DateFormat.yMEd(locale.languageCode).format(date)}\n${DateFormat( + MediaQuery.of(context).alwaysUse24HourFormat ? 'HH:mm' : 'h:mm a', + ).format(date)}"; } From e807747079861c3b737e8e9e3f50339d8f10465f Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Mon, 17 Mar 2025 15:18:06 +0530 Subject: [PATCH 3/7] [mob][photos] Compute trigger --- mobile/lib/services/machine_learning/ml_service.dart | 4 ++-- mobile/lib/services/memories_cache_service.dart | 12 ++++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/mobile/lib/services/machine_learning/ml_service.dart b/mobile/lib/services/machine_learning/ml_service.dart index e7afaf56e5..0961b50e4c 100644 --- a/mobile/lib/services/machine_learning/ml_service.dart +++ b/mobile/lib/services/machine_learning/ml_service.dart @@ -152,8 +152,8 @@ class MLService { if (_mlControllerStatus == true) { // refresh discover section magicCacheService.updateCache().ignore(); - // refresh memories section - memoriesCacheService.updateCache().ignore(); + // refresh memories section (only runs if forced is true) + memoriesCacheService.updateCache(forced: force).ignore(); } } catch (e, s) { _logger.severe("runAllML failed", e, s); diff --git a/mobile/lib/services/memories_cache_service.dart b/mobile/lib/services/memories_cache_service.dart index 4b63484642..4d6e0da42c 100644 --- a/mobile/lib/services/memories_cache_service.dart +++ b/mobile/lib/services/memories_cache_service.dart @@ -20,6 +20,7 @@ import "package:shared_preferences/shared_preferences.dart"; class MemoriesCacheService { static const _lastMemoriesCacheUpdateTimeKey = "lastMemoriesCacheUpdateTime"; static const _showAnyMemoryKey = "memories.enabled"; + static const _shouldUpdateCacheKey = "memories.shouldUpdateCache"; /// Delay is for cache update to be done not during app init, during which a /// lot of other things are happening. @@ -88,8 +89,9 @@ class MemoriesCacheService { if (!enableSmartMemories) { return; } + _shouldUpdate = _prefs.getBool(_shouldUpdateCacheKey) ?? _shouldUpdate; if (_timeToUpdateCache()) { - _shouldUpdate = true; + queueUpdateCache(); } } @@ -125,6 +127,12 @@ class MemoriesCacheService { void queueUpdateCache() { _shouldUpdate = true; + unawaited(_prefs.setBool(_shouldUpdateCacheKey, true)); + } + + void _cacheUpdated() { + _shouldUpdate = false; + unawaited(_prefs.setBool(_shouldUpdateCacheKey, false)); } Future updateCache({bool forced = false}) async { @@ -185,7 +193,7 @@ class MemoriesCacheService { w?.log("cacheWritten"); await _resetLastMemoriesCacheUpdateTime(); w?.logAndReset('done'); - _shouldUpdate = false; + _cacheUpdated(); } catch (e, s) { _logger.info("Error updating memories cache", e, s); } finally { From c1cca999739bbbc1363d68d48c29541a88c4ba7a Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Mon, 17 Mar 2025 15:31:17 +0530 Subject: [PATCH 4/7] [mob][photos] Fix you and me memory --- mobile/lib/services/smart_memories_service.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/lib/services/smart_memories_service.dart b/mobile/lib/services/smart_memories_service.dart index e6f519ae8d..896089c764 100644 --- a/mobile/lib/services/smart_memories_service.dart +++ b/mobile/lib/services/smart_memories_service.dart @@ -421,7 +421,7 @@ class SmartMemoriesService { for (final fileID in personFileIDs) { final bool mePresent = meFileIDs!.contains(fileID); final personFaces = fileIdToFaces[fileID] ?? []; - if (mePresent || personFaces.length != 2) continue; + if (!mePresent || personFaces.length != 2) continue; final file = allFileIdsToFile[fileID]; if (file != null) { youAndThemFiles.add(file); From 7a4fa1c2acbf3ba39c7bedfad7b1a295109bf26c Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Mon, 17 Mar 2025 15:47:01 +0530 Subject: [PATCH 5/7] [mob][photos] Copy --- mobile/lib/services/smart_memories_service.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mobile/lib/services/smart_memories_service.dart b/mobile/lib/services/smart_memories_service.dart index 896089c764..8ce4440d03 100644 --- a/mobile/lib/services/smart_memories_service.dart +++ b/mobile/lib/services/smart_memories_service.dart @@ -1320,6 +1320,7 @@ class SmartMemoriesService { fileIDToImageEmbedding: fileIDToImageEmbedding, clipPositiveTextVector: clipPositiveTextVector, ); + // TODO: here is the issue!! final name = "${DateFormat.MMMd()}, ${currentTime.year - date.year} years ago"; memoryResult.add( @@ -1393,7 +1394,7 @@ class SmartMemoriesService { clipPositiveTextVector: clipPositiveTextVector, ); final name = - "This week, ${currentTime.year - date.year} years back"; + "This week, ${currentTime.year - date.year} years ago"; memoryResult.add( TimeMemory( @@ -1451,7 +1452,7 @@ class SmartMemoriesService { final monthName = DateFormat.MMMM().format(DateTime(year, currentMonth)); final daysLeftInMonth = DateTime(currentYear, currentMonth + 1, 0).day - currentTime.day + 1; - final name = monthName + ", ${currentTime.year - year} years back"; + final name = monthName + ", ${currentTime.year - year} years ago"; memoryResult.add( TimeMemory( photoSelection, From 2aad26b048b51d8f67baaf7a044c18779c7ae771 Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Mon, 17 Mar 2025 16:01:58 +0530 Subject: [PATCH 6/7] [mob][photos] Fix dateformat --- mobile/lib/services/smart_memories_service.dart | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mobile/lib/services/smart_memories_service.dart b/mobile/lib/services/smart_memories_service.dart index 8ce4440d03..56d56bdd45 100644 --- a/mobile/lib/services/smart_memories_service.dart +++ b/mobile/lib/services/smart_memories_service.dart @@ -1320,9 +1320,8 @@ class SmartMemoriesService { fileIDToImageEmbedding: fileIDToImageEmbedding, clipPositiveTextVector: clipPositiveTextVector, ); - // TODO: here is the issue!! final name = - "${DateFormat.MMMd()}, ${currentTime.year - date.year} years ago"; + "${DateFormat.MMMd().format(date)}, ${currentTime.year - date.year} years ago"; memoryResult.add( TimeMemory( photoSelection, @@ -1393,8 +1392,7 @@ class SmartMemoriesService { fileIDToImageEmbedding: fileIDToImageEmbedding, clipPositiveTextVector: clipPositiveTextVector, ); - final name = - "This week, ${currentTime.year - date.year} years ago"; + final name = "This week, ${currentTime.year - date.year} years ago"; memoryResult.add( TimeMemory( From 8220f5a484f46489ecb90257a1b69bfc3e83cbf8 Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Mon, 17 Mar 2025 16:47:57 +0530 Subject: [PATCH 7/7] [mob][photos] Less empty space --- mobile/lib/ui/viewer/date/edit_date_sheet.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/lib/ui/viewer/date/edit_date_sheet.dart b/mobile/lib/ui/viewer/date/edit_date_sheet.dart index 843054bacd..f04f45a689 100644 --- a/mobile/lib/ui/viewer/date/edit_date_sheet.dart +++ b/mobile/lib/ui/viewer/date/edit_date_sheet.dart @@ -196,7 +196,7 @@ class _EditDateSheetState extends State { ], ), // Bottom indicator line - const SizedBox(height: 48), + const SizedBox(height: 20), ], ), ),