[mob] Add support for removing people to cluster mapping

This commit is contained in:
Neeraj Gupta
2024-04-08 07:43:08 +05:30
parent 4a2b5fe27d
commit 2d58558737
3 changed files with 52 additions and 12 deletions

View File

@@ -368,6 +368,17 @@ class FaceMLDataDB {
await batch.commit(noResult: true);
}
Future<void> removePerson(String personID) async {
final db = await instance.database;
await db.delete(
clusterPersonTable,
where: '$personIdColumn = ?',
whereArgs: [personID],
);
await db.delete(notPersonFeedback,
where: '$personIdColumn = ?', whereArgs: [personID]);
}
/// Returns a map of faceID to record of clusterId and faceEmbeddingBlob
///
/// Only selects faces with score greater than [minScore] and blur score greater than [minClarity]

View File

@@ -1,5 +1,7 @@
import "dart:convert";
import "package:photos/core/event_bus.dart";
import "package:photos/events/people_changed_event.dart";
import "package:photos/face/db.dart";
import "package:photos/face/model/person.dart";
import "package:photos/models/api/entity/type.dart";
@@ -84,6 +86,29 @@ class PersonService {
return PersonEntity(result.id, data);
}
Future<void> deletePerson(String personID, {bool onlyMapping = true}) async {
if (onlyMapping) {
final PersonEntity? entity = await getPerson(personID);
if (entity == null) {
return;
}
final PersonEntity justName =
PersonEntity(personID, PersonData(name: entity.data.name));
await entityService.addOrUpdate(
EntityType.person,
json.encode(justName.data.toJson()),
id: personID,
);
await faceMLDataDB.removePerson(personID);
} else {
await entityService.deleteEntry(personID);
await faceMLDataDB.removePerson(personID);
}
// fire PeopleChangeEvent
Bus.instance.fire(PeopleChangedEvent());
}
Future<void> storeRemoteFeedback() async {
await entityService.syncEntities();
final entities = await entityService.getEntities(EntityType.person);

View File

@@ -39,6 +39,7 @@ class PeopleAppBar extends StatefulWidget {
enum PeoplPopupAction {
rename,
setCover,
remove,
viewPhotos,
confirmPhotos,
hide,
@@ -164,18 +165,19 @@ class _AppBarWidgetState extends State<PeopleAppBar> {
// ],
// ),
// ),
// PopupMenuItem(
// value: PeoplPopupAction.rename,
// child: Row(
// children: [
// const Icon(Icons.visibility_off),
// const Padding(
// padding: EdgeInsets.all(8),
// ),
// Text(S.of(context).hide),
// ],
// ),
// ),
PopupMenuItem(
value: PeoplPopupAction.remove,
child: Row(
children: [
const Icon(Icons.remove_circle_outline),
const Padding(
padding: EdgeInsets.all(8),
),
Text(S.of(context).remove),
],
),
),
const PopupMenuItem(
value: PeoplPopupAction.viewPhotos,
child: Row(
@@ -235,6 +237,8 @@ class _AppBarWidgetState extends State<PeopleAppBar> {
await setCoverPhoto(context);
} else if (value == PeoplPopupAction.hide) {
// ignore: unawaited_futures
} else if (value == PeoplPopupAction.remove) {
await PersonService.instance.deletePerson(widget.person.remoteID);
}
},
),