Improve state update when removing face
This commit is contained in:
@@ -4,12 +4,14 @@ import "package:photos/models/ml/face/person.dart";
|
||||
|
||||
class PeopleChangedEvent extends Event {
|
||||
final List<EnteFile>? relevantFiles;
|
||||
final List<String>? relevantFaceIDs;
|
||||
final PeopleEventType type;
|
||||
final String source;
|
||||
final PersonEntity? person;
|
||||
|
||||
PeopleChangedEvent({
|
||||
this.relevantFiles,
|
||||
this.relevantFaceIDs,
|
||||
this.type = PeopleEventType.defaultType,
|
||||
this.source = "",
|
||||
this.person,
|
||||
|
||||
@@ -218,7 +218,11 @@ class ClusterFeedbackService<T> {
|
||||
.removeFacesFromPerson(person: person, faceIDs: {faceID});
|
||||
|
||||
Bus.instance.fire(
|
||||
PeopleChangedEvent(type: PeopleEventType.removedFaceFromCluster),
|
||||
PeopleChangedEvent(
|
||||
type: PeopleEventType.removedFaceFromCluster,
|
||||
relevantFaceIDs: [faceID],
|
||||
source: person.remoteID,
|
||||
),
|
||||
);
|
||||
_logger.info('removeFaceFromPerson done');
|
||||
return updatedClusterID;
|
||||
@@ -299,6 +303,7 @@ class ClusterFeedbackService<T> {
|
||||
Bus.instance.fire(
|
||||
PeopleChangedEvent(
|
||||
type: PeopleEventType.removedFaceFromCluster,
|
||||
relevantFaceIDs: [faceID],
|
||||
source: clusterID ?? "",
|
||||
),
|
||||
);
|
||||
|
||||
@@ -13,6 +13,7 @@ import 'package:photos/models/gallery_type.dart';
|
||||
import "package:photos/models/ml/face/person.dart";
|
||||
import 'package:photos/models/selected_files.dart';
|
||||
import "package:photos/services/machine_learning/face_ml/feedback/cluster_feedback.dart";
|
||||
import "package:photos/services/machine_learning/ml_result.dart";
|
||||
import "package:photos/ui/notification/toast.dart";
|
||||
import 'package:photos/ui/viewer/actions/file_selection_overlay_bar.dart';
|
||||
import 'package:photos/ui/viewer/gallery/gallery.dart';
|
||||
@@ -76,12 +77,20 @@ class _ClusterPageState extends State<ClusterPage> {
|
||||
}
|
||||
});
|
||||
_peopleChangedEvent = Bus.instance.on<PeopleChangedEvent>().listen((event) {
|
||||
if (event.type == PeopleEventType.removedFilesFromCluster &&
|
||||
(event.source == widget.clusterID.toString())) {
|
||||
for (var updatedFile in event.relevantFiles!) {
|
||||
files.remove(updatedFile);
|
||||
if (event.source == widget.clusterID.toString()) {
|
||||
if (event.type == PeopleEventType.removedFilesFromCluster) {
|
||||
for (var updatedFile in event.relevantFiles!) {
|
||||
files.remove(updatedFile);
|
||||
}
|
||||
setState(() {});
|
||||
}
|
||||
if (event.type == PeopleEventType.removedFaceFromCluster) {
|
||||
for (final String removedFaceID in event.relevantFaceIDs!) {
|
||||
final int fileID = getFileIdFromFaceId<int>(removedFaceID);
|
||||
files.removeWhere((file) => file.uploadedFileID == fileID);
|
||||
}
|
||||
setState(() {});
|
||||
}
|
||||
setState(() {});
|
||||
}
|
||||
});
|
||||
kDebugMode
|
||||
|
||||
@@ -15,6 +15,7 @@ import "package:photos/models/search/search_result.dart";
|
||||
import 'package:photos/models/selected_files.dart';
|
||||
import "package:photos/services/machine_learning/face_ml/face_filtering/face_filtering_constants.dart";
|
||||
import "package:photos/services/machine_learning/face_ml/feedback/cluster_feedback.dart";
|
||||
import "package:photos/services/machine_learning/ml_result.dart";
|
||||
import "package:photos/services/search_service.dart";
|
||||
import "package:photos/ui/components/end_to_end_banner.dart";
|
||||
import 'package:photos/ui/viewer/actions/file_selection_overlay_bar.dart';
|
||||
@@ -85,6 +86,17 @@ class _PeoplePageState extends State<PeoplePage> {
|
||||
});
|
||||
}
|
||||
}
|
||||
if (event.source == widget.person.remoteID) {
|
||||
if (event.type == PeopleEventType.removedFaceFromCluster) {
|
||||
final filesBefore = files?.length ?? 0;
|
||||
for (final String removedFaceID in event.relevantFaceIDs!) {
|
||||
final int fileID = getFileIdFromFaceId<int>(removedFaceID);
|
||||
files?.removeWhere((file) => file.uploadedFileID == fileID);
|
||||
}
|
||||
final filesAfter = files?.length ?? 0;
|
||||
if (filesBefore != filesAfter) setState(() {});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
filesFuture = loadPersonFiles();
|
||||
|
||||
@@ -14,6 +14,7 @@ import "package:photos/models/file/file.dart";
|
||||
import "package:photos/models/ml/face/person.dart";
|
||||
import 'package:photos/services/machine_learning/face_ml/feedback/cluster_feedback.dart';
|
||||
import "package:photos/services/machine_learning/face_ml/person/person_service.dart";
|
||||
import "package:photos/services/machine_learning/ml_result.dart";
|
||||
import "package:photos/theme/ente_theme.dart";
|
||||
import "package:photos/ui/components/buttons/button_widget.dart";
|
||||
import "package:photos/ui/components/models/button_type.dart";
|
||||
@@ -123,12 +124,20 @@ class _PersonClustersState extends State<PersonReviewClusterSuggestion> {
|
||||
|
||||
_peopleChangedEvent =
|
||||
Bus.instance.on<PeopleChangedEvent>().listen((event) {
|
||||
if (event.type == PeopleEventType.removedFilesFromCluster &&
|
||||
(event.source == clusterID.toString())) {
|
||||
for (var updatedFile in event.relevantFiles!) {
|
||||
files.remove(updatedFile);
|
||||
if (event.source == clusterID.toString()) {
|
||||
if (event.type == PeopleEventType.removedFilesFromCluster) {
|
||||
for (var updatedFile in event.relevantFiles!) {
|
||||
files.remove(updatedFile);
|
||||
}
|
||||
setState(() {});
|
||||
}
|
||||
if (event.type == PeopleEventType.removedFaceFromCluster) {
|
||||
for (final String removedFaceID in event.relevantFaceIDs!) {
|
||||
final int fileID = getFileIdFromFaceId<int>(removedFaceID);
|
||||
files.removeWhere((file) => file.uploadedFileID == fileID);
|
||||
}
|
||||
setState(() {});
|
||||
}
|
||||
setState(() {});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user