mirror of
https://github.com/ente-io/ente.git
synced 2025-08-07 23:18:10 +00:00
[mob] Update local feedback on remote data change
This commit is contained in:
parent
d769cfad55
commit
619476892a
@ -1,13 +1,24 @@
|
||||
import "package:photos/events/event.dart";
|
||||
import "package:photos/models/file/file.dart";
|
||||
|
||||
class PeopleRemoteFeedbackEvent extends Event {
|
||||
final String source;
|
||||
|
||||
PeopleRemoteFeedbackEvent({
|
||||
this.source = "",
|
||||
});
|
||||
|
||||
@override
|
||||
String get reason => '$runtimeType{"via": $source}';
|
||||
}
|
||||
|
||||
class PeopleChangedEvent extends Event {
|
||||
final List<EnteFile>? relevantFiles;
|
||||
final PeopleEventType type;
|
||||
final String source;
|
||||
|
||||
PeopleChangedEvent({
|
||||
this.relevantFiles,
|
||||
this.relevantFiles,
|
||||
this.type = PeopleEventType.defaultType,
|
||||
this.source = "",
|
||||
});
|
||||
@ -20,4 +31,4 @@ enum PeopleEventType {
|
||||
defaultType,
|
||||
removedFilesFromCluster,
|
||||
syncDone,
|
||||
}
|
||||
}
|
||||
|
@ -6,8 +6,6 @@ import "package:logging/logging.dart";
|
||||
import "package:photos/core/event_bus.dart";
|
||||
import "package:photos/events/diff_sync_complete_event.dart";
|
||||
import "package:photos/events/people_changed_event.dart";
|
||||
import "package:photos/models/api/entity/type.dart";
|
||||
import "package:photos/service_locator.dart";
|
||||
import "package:photos/services/machine_learning/face_ml/face_detection/detection.dart";
|
||||
import "package:photos/services/machine_learning/face_ml/face_detection/face_detection_service.dart";
|
||||
import "package:photos/services/machine_learning/face_ml/face_embedding/face_embedding_service.dart";
|
||||
@ -61,7 +59,11 @@ class FaceRecognitionService {
|
||||
Bus.instance.fire(PeopleChangedEvent(type: PeopleEventType.syncDone));
|
||||
_shouldReconcilePeople = false;
|
||||
} else {
|
||||
await entityService.syncEntity(EntityType.cgroup);
|
||||
final bool didChange =
|
||||
await PersonService.instance.fetchRemoteClusterFeedback();
|
||||
if (didChange) {
|
||||
Bus.instance.fire(PeopleChangedEvent(type: PeopleEventType.syncDone));
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
_isSyncing = false;
|
||||
|
@ -74,7 +74,7 @@ class PersonService {
|
||||
Future<void> reconcileClusters() async {
|
||||
final EnteWatch? w = kDebugMode ? EnteWatch("reconcileClusters") : null;
|
||||
w?.start();
|
||||
await fetchRemoteClusterFeedback();
|
||||
await fetchRemoteClusterFeedback(skipClusterUpdateIfNoChange: false);
|
||||
w?.log("Stored remote feedback");
|
||||
final dbPersonClusterInfo =
|
||||
await faceMLDataDB.getPersonToClusterIdToFaceIds();
|
||||
@ -251,8 +251,17 @@ class PersonService {
|
||||
Bus.instance.fire(PeopleChangedEvent());
|
||||
}
|
||||
|
||||
Future<void> fetchRemoteClusterFeedback() async {
|
||||
await entityService.syncEntity(EntityType.cgroup);
|
||||
// fetchRemoteClusterFeedback returns true if remote data has changed
|
||||
Future<bool> fetchRemoteClusterFeedback({
|
||||
bool skipClusterUpdateIfNoChange = true,
|
||||
}) async {
|
||||
final int changedEntities =
|
||||
await entityService.syncEntity(EntityType.cgroup);
|
||||
final bool changed = changedEntities > 0;
|
||||
if (changed == false && skipClusterUpdateIfNoChange) {
|
||||
return false;
|
||||
}
|
||||
|
||||
final entities = await entityService.getEntities(EntityType.cgroup);
|
||||
// todo: (neerajg) perf change, this can be expensive to do on every sync
|
||||
// especially when we have a lot of people. We should only do this when the
|
||||
@ -294,6 +303,7 @@ class PersonService {
|
||||
logger.info("Storing feedback for ${faceIdToClusterID.length} faces");
|
||||
await faceMLDataDB.updateFaceIdToClusterId(faceIdToClusterID);
|
||||
await faceMLDataDB.bulkAssignClusterToPersonID(clusterToPersonID);
|
||||
return changed;
|
||||
}
|
||||
|
||||
Future<void> updateAvatar(PersonEntity p, EnteFile file) async {
|
||||
|
Loading…
x
Reference in New Issue
Block a user