[mob] Better handling of cluster update
This commit is contained in:
parent
ab0a99cf76
commit
a9ca8a4a24
3 changed files with 40 additions and 9 deletions
|
@ -1,3 +1,22 @@
|
|||
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,
|
||||
}
|
|
@ -5,8 +5,8 @@ import "package:flutter/foundation.dart";
|
|||
import "package:logging/logging.dart";
|
||||
import "package:photos/core/event_bus.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/extensions/stop_watch.dart";
|
||||
import "package:photos/face/db.dart";
|
||||
|
@ -195,14 +195,20 @@ class ClusterFeedbackService {
|
|||
// Update the deleted faces
|
||||
await FaceMLDataDB.instance.forceUpdateClusterIds(newFaceIdToClusterID);
|
||||
|
||||
Bus.instance.fire(PeopleChangedEvent());
|
||||
Bus.instance.fire(
|
||||
LocalPhotosUpdatedEvent(
|
||||
files,
|
||||
type: EventType.peopleClusterChanged,
|
||||
PeopleChangedEvent(
|
||||
relevantFiles: files,
|
||||
type: PeopleEventType.removedFilesFromCluster,
|
||||
source: "$clusterID",
|
||||
),
|
||||
);
|
||||
// Bus.instance.fire(
|
||||
// LocalPhotosUpdatedEvent(
|
||||
// files,
|
||||
// type: EventType.peopleClusterChanged,
|
||||
// source: "$clusterID",
|
||||
// ),
|
||||
// );
|
||||
return;
|
||||
} catch (e, s) {
|
||||
_logger.severe("Error in removeFilesFromCluster", e, s);
|
||||
|
|
|
@ -6,6 +6,7 @@ import "package:flutter_animate/flutter_animate.dart";
|
|||
import 'package:photos/core/event_bus.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/face/model/person.dart";
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import 'package:photos/models/file/file.dart';
|
||||
|
@ -52,6 +53,7 @@ class _ClusterPageState extends State<ClusterPage> {
|
|||
final _selectedFiles = SelectedFiles();
|
||||
late final List<EnteFile> files;
|
||||
late final StreamSubscription<LocalPhotosUpdatedEvent> _filesUpdatedEvent;
|
||||
late final StreamSubscription<PeopleChangedEvent> _peopleChangedEvent;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
|
@ -69,9 +71,11 @@ class _ClusterPageState extends State<ClusterPage> {
|
|||
}
|
||||
setState(() {});
|
||||
}
|
||||
if (event.type == EventType.peopleClusterChanged &&
|
||||
});
|
||||
_peopleChangedEvent = Bus.instance.on<PeopleChangedEvent>().listen((event) {
|
||||
if (event.type == PeopleEventType.removedFilesFromCluster &&
|
||||
(event.source == widget.clusterID.toString())) {
|
||||
for (var updatedFile in event.updatedFiles) {
|
||||
for (var updatedFile in event.relevantFiles!) {
|
||||
files.remove(updatedFile);
|
||||
}
|
||||
setState(() {});
|
||||
|
@ -88,6 +92,7 @@ class _ClusterPageState extends State<ClusterPage> {
|
|||
@override
|
||||
void dispose() {
|
||||
_filesUpdatedEvent.cancel();
|
||||
_peopleChangedEvent.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
|
@ -110,6 +115,7 @@ class _ClusterPageState extends State<ClusterPage> {
|
|||
);
|
||||
},
|
||||
reloadEvent: Bus.instance.on<LocalPhotosUpdatedEvent>(),
|
||||
forceReloadEvents: [Bus.instance.on<PeopleChangedEvent>()],
|
||||
removalEventTypes: const {
|
||||
EventType.deletedFromRemote,
|
||||
EventType.deletedFromEverywhere,
|
||||
|
|
Loading…
Add table
Reference in a new issue