Browse Source

[mob] Better handling of cluster update

laurenspriem 1 năm trước cách đây
mục cha
commit
a9ca8a4a24

+ 20 - 1
mobile/lib/events/people_changed_event.dart

@@ -1,3 +1,22 @@
 import "package:photos/events/event.dart";
 import "package:photos/events/event.dart";
+import "package:photos/models/file/file.dart";
 
 
-class PeopleChangedEvent extends Event {}
+class PeopleChangedEvent extends Event {
+  final List<EnteFile>? relevantFiles;
+  final PeopleEventType type;
+  final String source;
+
+  PeopleChangedEvent({
+    this.relevantFiles, 
+    this.type = PeopleEventType.defaultType,
+    this.source = "",
+  });
+
+  @override
+  String get reason => '$runtimeType{type: ${type.name}, "via": $source}';
+}
+
+enum PeopleEventType {
+  defaultType,
+  removedFilesFromCluster,
+}

+ 12 - 6
mobile/lib/services/machine_learning/face_ml/feedback/cluster_feedback.dart

@@ -5,8 +5,8 @@ import "package:flutter/foundation.dart";
 import "package:logging/logging.dart";
 import "package:logging/logging.dart";
 import "package:photos/core/event_bus.dart";
 import "package:photos/core/event_bus.dart";
 import "package:photos/db/files_db.dart";
 import "package:photos/db/files_db.dart";
-import "package:photos/events/files_updated_event.dart";
-import "package:photos/events/local_photos_updated_event.dart";
+// import "package:photos/events/files_updated_event.dart";
+// import "package:photos/events/local_photos_updated_event.dart";
 import "package:photos/events/people_changed_event.dart";
 import "package:photos/events/people_changed_event.dart";
 import "package:photos/extensions/stop_watch.dart";
 import "package:photos/extensions/stop_watch.dart";
 import "package:photos/face/db.dart";
 import "package:photos/face/db.dart";
@@ -195,14 +195,20 @@ class ClusterFeedbackService {
       // Update the deleted faces
       // Update the deleted faces
       await FaceMLDataDB.instance.forceUpdateClusterIds(newFaceIdToClusterID);
       await FaceMLDataDB.instance.forceUpdateClusterIds(newFaceIdToClusterID);
 
 
-      Bus.instance.fire(PeopleChangedEvent());
       Bus.instance.fire(
       Bus.instance.fire(
-        LocalPhotosUpdatedEvent(
-          files,
-          type: EventType.peopleClusterChanged,
+        PeopleChangedEvent(
+          relevantFiles: files,
+          type: PeopleEventType.removedFilesFromCluster,
           source: "$clusterID",
           source: "$clusterID",
         ),
         ),
       );
       );
+      // Bus.instance.fire(
+      //   LocalPhotosUpdatedEvent(
+      //     files,
+      //     type: EventType.peopleClusterChanged,
+      //     source: "$clusterID",
+      //   ),
+      // );
       return;
       return;
     } catch (e, s) {
     } catch (e, s) {
       _logger.severe("Error in removeFilesFromCluster", e, s);
       _logger.severe("Error in removeFilesFromCluster", e, s);

+ 8 - 2
mobile/lib/ui/viewer/people/cluster_page.dart

@@ -6,6 +6,7 @@ import "package:flutter_animate/flutter_animate.dart";
 import 'package:photos/core/event_bus.dart';
 import 'package:photos/core/event_bus.dart';
 import 'package:photos/events/files_updated_event.dart';
 import 'package:photos/events/files_updated_event.dart';
 import 'package:photos/events/local_photos_updated_event.dart';
 import 'package:photos/events/local_photos_updated_event.dart';
+import "package:photos/events/people_changed_event.dart";
 import "package:photos/face/model/person.dart";
 import "package:photos/face/model/person.dart";
 import "package:photos/generated/l10n.dart";
 import "package:photos/generated/l10n.dart";
 import 'package:photos/models/file/file.dart';
 import 'package:photos/models/file/file.dart';
@@ -52,6 +53,7 @@ class _ClusterPageState extends State<ClusterPage> {
   final _selectedFiles = SelectedFiles();
   final _selectedFiles = SelectedFiles();
   late final List<EnteFile> files;
   late final List<EnteFile> files;
   late final StreamSubscription<LocalPhotosUpdatedEvent> _filesUpdatedEvent;
   late final StreamSubscription<LocalPhotosUpdatedEvent> _filesUpdatedEvent;
+  late final StreamSubscription<PeopleChangedEvent> _peopleChangedEvent;
 
 
   @override
   @override
   void initState() {
   void initState() {
@@ -69,9 +71,11 @@ class _ClusterPageState extends State<ClusterPage> {
         }
         }
         setState(() {});
         setState(() {});
       }
       }
-      if (event.type == EventType.peopleClusterChanged &&
+    });
+    _peopleChangedEvent = Bus.instance.on<PeopleChangedEvent>().listen((event) {
+      if (event.type == PeopleEventType.removedFilesFromCluster &&
           (event.source == widget.clusterID.toString())) {
           (event.source == widget.clusterID.toString())) {
-        for (var updatedFile in event.updatedFiles) {
+        for (var updatedFile in event.relevantFiles!) {
           files.remove(updatedFile);
           files.remove(updatedFile);
         }
         }
         setState(() {});
         setState(() {});
@@ -88,6 +92,7 @@ class _ClusterPageState extends State<ClusterPage> {
   @override
   @override
   void dispose() {
   void dispose() {
     _filesUpdatedEvent.cancel();
     _filesUpdatedEvent.cancel();
+    _peopleChangedEvent.cancel();
     super.dispose();
     super.dispose();
   }
   }
 
 
@@ -110,6 +115,7 @@ class _ClusterPageState extends State<ClusterPage> {
         );
         );
       },
       },
       reloadEvent: Bus.instance.on<LocalPhotosUpdatedEvent>(),
       reloadEvent: Bus.instance.on<LocalPhotosUpdatedEvent>(),
+      forceReloadEvents: [Bus.instance.on<PeopleChangedEvent>()],
       removalEventTypes: const {
       removalEventTypes: const {
         EventType.deletedFromRemote,
         EventType.deletedFromRemote,
         EventType.deletedFromEverywhere,
         EventType.deletedFromEverywhere,