[mob] Add support for removing people to cluster mapping
This commit is contained in:
@@ -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]
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
},
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user