From 2e9517d75f87285f68bf7580f3b053323fc9b60f Mon Sep 17 00:00:00 2001 From: Prateek Sunal Date: Wed, 19 Mar 2025 15:01:52 +0530 Subject: [PATCH] fix(memory-w): add force sync option for widget --- mobile/lib/main.dart | 2 +- mobile/lib/services/home_widget_service.dart | 28 ++++++++++++------- .../debug/ml_debug_section_widget.dart | 16 +++++++++++ 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/mobile/lib/main.dart b/mobile/lib/main.dart index 45135aa991..17eab4c0f3 100644 --- a/mobile/lib/main.dart +++ b/mobile/lib/main.dart @@ -124,7 +124,7 @@ ThemeMode _themeMode(AdaptiveThemeMode? savedThemeMode) { Future _homeWidgetSync() async { try { - await HomeWidgetService.instance.initHomeWidget(false, true); + await HomeWidgetService.instance.initHomeWidget(false); } catch (e, s) { _logger.severe("Error in initSlideshowWidget", e, s); } diff --git a/mobile/lib/services/home_widget_service.dart b/mobile/lib/services/home_widget_service.dart index c7c8e025a0..26c9915356 100644 --- a/mobile/lib/services/home_widget_service.dart +++ b/mobile/lib/services/home_widget_service.dart @@ -28,7 +28,7 @@ class HomeWidgetService { static final HomeWidgetService instance = HomeWidgetService._privateConstructor(); - Future initHomeWidget(bool isBackground, [bool syncIt = false]) async { + Future initHomeWidget(bool isBackground, {bool bypass = false}) async { if (isBackground) { _logger.warning("app is running in background"); return; @@ -56,7 +56,7 @@ class HomeWidgetService { return; } - await _lockAndLoadMemories(); + await _lockAndLoadMemories(bypass: bypass); } Future _renderFile( @@ -169,6 +169,7 @@ class HomeWidgetService { Future onLaunchFromWidget(Uri? uri, BuildContext context) async { if (uri == null) { _logger.warning("onLaunchFromWidget: uri is null"); + await initHomeWidget(false); return; } @@ -219,7 +220,7 @@ class HomeWidgetService { return hash; } - Future _updateWidget() async { + Future _updateWidget({String? text}) async { await hw.HomeWidget.updateWidget( name: 'SlideshowWidgetProvider', androidName: 'SlideshowWidgetProvider', @@ -228,7 +229,7 @@ class HomeWidgetService { ); if (flagService.internalUser) { await Fluttertoast.showToast( - msg: "[i] SlideshowWidget updated", + msg: text ?? "[i] SlideshowWidget updated", toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.BOTTOM, timeInSecForIosWeb: 1, @@ -248,7 +249,7 @@ class HomeWidgetService { await hw.HomeWidget.saveWidgetData("totalSet", total); } - Future _lockAndLoadMemories() async { + Future _lockAndLoadMemories({bool bypass = false}) async { final files = await _getMemories(); if (files.isEmpty) { @@ -260,13 +261,12 @@ class HomeWidgetService { final keyHash = _getFilesKey(files); final value = await _getFilesHash(); - if (value == keyHash) { + if (value != null && value == keyHash) { _logger.info("No changes detected in memories"); - await _updateWidget(); + await _updateWidget(text: "[i] No changes, refreshing from same set"); _logger.info(">>> Refreshing memory from same set"); return; } - await _setFilesHash(keyHash); int index = 0; @@ -283,7 +283,11 @@ class HomeWidgetService { if (value != null) { await _setTotal(index); if (index == 1) { - await _updateWidget(); + await _updateWidget( + text: bypass + ? "[i] First memory after bypass, updating widget" + : "[i] First memory fetched. updating widget", + ); } index++; } @@ -294,7 +298,11 @@ class HomeWidgetService { return; } - await _updateWidget(); + await _setFilesHash(keyHash); + + await _updateWidget( + text: bypass ? "[i] Bypassing memory set check, updated widget" : null, + ); _logger.info(">>> Switching to next memory set"); } } diff --git a/mobile/lib/ui/settings/debug/ml_debug_section_widget.dart b/mobile/lib/ui/settings/debug/ml_debug_section_widget.dart index cec969abba..cb1ac1aa19 100644 --- a/mobile/lib/ui/settings/debug/ml_debug_section_widget.dart +++ b/mobile/lib/ui/settings/debug/ml_debug_section_widget.dart @@ -7,6 +7,7 @@ import "package:photos/db/ml/db.dart"; import "package:photos/events/people_changed_event.dart"; import "package:photos/models/ml/face/person.dart"; import "package:photos/service_locator.dart"; +import "package:photos/services/home_widget_service.dart"; import "package:photos/services/machine_learning/face_ml/person/person_service.dart"; import "package:photos/services/machine_learning/ml_indexing_isolate.dart"; import 'package:photos/services/machine_learning/ml_service.dart'; @@ -319,6 +320,21 @@ class _MLDebugSectionWidgetState extends State { }, ), sectionOptionSpacing, + MenuItemWidget( + captionedTextWidget: const CaptionedTextWidget( + title: "Force sync memory widget", + ), + pressedColor: getEnteColorScheme(context).fillFaint, + trailingIcon: Icons.chevron_right_outlined, + trailingIconIsMuted: true, + onTap: () async { + await HomeWidgetService.instance.initHomeWidget( + false, + bypass: true, + ); + }, + ), + sectionOptionSpacing, MenuItemWidget( captionedTextWidget: const CaptionedTextWidget( title: "Sync person mappings ",