fix: ensure manually tagged faces have proper source type (#16364)

immich-app/immich#16062 added manual face tagging and deletion, but did
not add a new 'SourceType'. The create faces would default to
'machine-learning' which is incorrect, and has the annoying downside
that they will be wiped when the 'Refresh Faces' job is run.

Handling of non-machine-learning faces was previously added in
immich-app/immich#6455. This PR simply extends it to the new manually
tagged faces.
This commit is contained in:
David Bourgault 2025-02-26 21:53:21 -05:00 committed by GitHub
parent 8fbd650483
commit 4b55888d16
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 63 additions and 6 deletions

View file

@ -18,6 +18,7 @@ class AssetFaceCreateDto {
required this.imageHeight,
required this.imageWidth,
required this.personId,
this.sourceType = SourceType.manual,
required this.width,
required this.x,
required this.y,
@ -33,6 +34,8 @@ class AssetFaceCreateDto {
String personId;
SourceType sourceType;
int width;
int x;
@ -46,6 +49,7 @@ class AssetFaceCreateDto {
other.imageHeight == imageHeight &&
other.imageWidth == imageWidth &&
other.personId == personId &&
other.sourceType == sourceType &&
other.width == width &&
other.x == x &&
other.y == y;
@ -58,12 +62,13 @@ class AssetFaceCreateDto {
(imageHeight.hashCode) +
(imageWidth.hashCode) +
(personId.hashCode) +
(sourceType.hashCode) +
(width.hashCode) +
(x.hashCode) +
(y.hashCode);
@override
String toString() => 'AssetFaceCreateDto[assetId=$assetId, height=$height, imageHeight=$imageHeight, imageWidth=$imageWidth, personId=$personId, width=$width, x=$x, y=$y]';
String toString() => 'AssetFaceCreateDto[assetId=$assetId, height=$height, imageHeight=$imageHeight, imageWidth=$imageWidth, personId=$personId, sourceType=$sourceType, width=$width, x=$x, y=$y]';
Map<String, dynamic> toJson() {
final json = <String, dynamic>{};
@ -72,6 +77,7 @@ class AssetFaceCreateDto {
json[r'imageHeight'] = this.imageHeight;
json[r'imageWidth'] = this.imageWidth;
json[r'personId'] = this.personId;
json[r'sourceType'] = this.sourceType;
json[r'width'] = this.width;
json[r'x'] = this.x;
json[r'y'] = this.y;
@ -92,6 +98,7 @@ class AssetFaceCreateDto {
imageHeight: mapValueOfType<int>(json, r'imageHeight')!,
imageWidth: mapValueOfType<int>(json, r'imageWidth')!,
personId: mapValueOfType<String>(json, r'personId')!,
sourceType: SourceType.fromJson(json[r'sourceType'])!,
width: mapValueOfType<int>(json, r'width')!,
x: mapValueOfType<int>(json, r'x')!,
y: mapValueOfType<int>(json, r'y')!,
@ -147,6 +154,7 @@ class AssetFaceCreateDto {
'imageHeight',
'imageWidth',
'personId',
'sourceType',
'width',
'x',
'y',