[mob][wip] remove from cluster feedback

This commit is contained in:
laurenspriem 2024-03-30 18:35:46 +05:30
parent a3b6a72315
commit 768fa3d1ce
3 changed files with 73 additions and 5 deletions

View file

@ -695,7 +695,7 @@ class FaceMLDataDB {
await db.execute(createNotPersonFeedbackTable);
}
Future<void> removePersonFromFiles(List<EnteFile> files, Person p) async {
Future<void> removeFilesFromPerson(List<EnteFile> files, Person p) async {
final db = await instance.database;
final result = await db.rawQuery(
'SELECT $faceIDColumn FROM $facesTable LEFT JOIN $clustersTable '
@ -715,4 +715,24 @@ class FaceMLDataDB {
}
await forceUpdateClusterIds(faceIDToClusterID);
}
Future<void> removeFilesFromCluster(
List<EnteFile> files,
int clusterID,
) async {
final db = await instance.database;
final result = await db.rawQuery(
'SELECT $faceIDColumn FROM $facesTable '
'WHERE $facesTable.$faceClusterId = ? AND $facesTable.$fileIDColumn IN (${files.map((e) => e.uploadedFileID).join(",")})',
[clusterID],
);
final Map<String, int> faceIDToClusterID = {};
int maxClusterID = DateTime.now().millisecondsSinceEpoch;
for (final faceRow in result) {
maxClusterID += 1;
final faceID = faceRow[faceIDColumn] as String;
faceIDToClusterID[faceID] = maxClusterID;
}
await forceUpdateClusterIds(faceIDToClusterID);
}
}

View file

@ -305,8 +305,12 @@ class ClusterFeedbackService {
}
}
Future<void> removePersonFromFiles(List<EnteFile> files, Person p) {
return FaceMLDataDB.instance.removePersonFromFiles(files, p);
Future<void> removeFilesFromPerson(List<EnteFile> files, Person p) {
return FaceMLDataDB.instance.removeFilesFromPerson(files, p);
}
Future<void> removeFilesFromCluster(List<EnteFile> files, int clusterID) {
return FaceMLDataDB.instance.removeFilesFromCluster(files, clusterID);
}
Future<bool> checkAndDoAutomaticMerges(Person p) async {

View file

@ -401,12 +401,13 @@ class _FileSelectionActionsWidgetState
),
);
// if (widget.type == GalleryType.cluster && widget.clusterID != null) {
if (widget.type == GalleryType.cluster) {
items.add(
SelectionActionButton(
labelText: 'Remove',
icon: CupertinoIcons.minus,
onTap: () => showToast(context, 'yet to implement'),
onTap: anyUploadedFiles ? _onRemoveFromClusterClicked : null,
),
);
}
@ -690,7 +691,7 @@ class _FileSelectionActionsWidgetState
);
if (actionResult?.action != null) {
if (actionResult!.action == ButtonAction.first) {
await ClusterFeedbackService.instance.removePersonFromFiles(
await ClusterFeedbackService.instance.removeFilesFromPerson(
widget.selectedFiles.files.toList(),
widget.person!,
);
@ -703,6 +704,49 @@ class _FileSelectionActionsWidgetState
}
}
Future<void> _onRemoveFromClusterClicked() async {
if (widget.clusterID == null) {
showShortToast(context, 'Cluster ID is null. Cannot remove files.');
return;
}
final actionResult = await showActionSheet(
context: context,
buttons: [
ButtonWidget(
labelText: S.of(context).yesRemove,
buttonType: ButtonType.neutral,
buttonSize: ButtonSize.large,
shouldStickToDarkTheme: true,
buttonAction: ButtonAction.first,
isInAlert: true,
),
ButtonWidget(
labelText: S.of(context).cancel,
buttonType: ButtonType.secondary,
buttonSize: ButtonSize.large,
buttonAction: ButtonAction.second,
shouldStickToDarkTheme: true,
isInAlert: true,
),
],
title: "Remove these photos?",
actionSheetType: ActionSheetType.defaultActionSheet,
);
if (actionResult?.action != null) {
if (actionResult!.action == ButtonAction.first) {
await ClusterFeedbackService.instance.removeFilesFromCluster(
widget.selectedFiles.files.toList(),
widget.clusterID!,
);
}
Bus.instance.fire(PeopleChangedEvent());
}
widget.selectedFiles.clearAll();
if (mounted) {
setState(() => {});
}
}
Future<void> _copyLink() async {
if (_cachedCollectionForSharedLink != null) {
final String collectionKey = Base58Encode(