fix(memory-w): add force sync option for widget

This commit is contained in:
Prateek Sunal
2025-03-19 15:01:52 +05:30
parent 3912f00fb7
commit 2e9517d75f
3 changed files with 35 additions and 11 deletions

View File

@@ -124,7 +124,7 @@ ThemeMode _themeMode(AdaptiveThemeMode? savedThemeMode) {
Future<void> _homeWidgetSync() async {
try {
await HomeWidgetService.instance.initHomeWidget(false, true);
await HomeWidgetService.instance.initHomeWidget(false);
} catch (e, s) {
_logger.severe("Error in initSlideshowWidget", e, s);
}

View File

@@ -28,7 +28,7 @@ class HomeWidgetService {
static final HomeWidgetService instance =
HomeWidgetService._privateConstructor();
Future<void> initHomeWidget(bool isBackground, [bool syncIt = false]) async {
Future<void> 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<Size?> _renderFile(
@@ -169,6 +169,7 @@ class HomeWidgetService {
Future<void> 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<void> _updateWidget() async {
Future<void> _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<void> _lockAndLoadMemories() async {
Future<void> _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");
}
}

View File

@@ -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<MLDebugSectionWidget> {
},
),
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 ",