Fix NPE when syncing a delected face from Recognize

This commit is contained in:
Ming Ming 2023-08-05 16:39:10 +08:00
parent 46460e99e9
commit 4c5410d9d1

View file

@ -30,16 +30,10 @@ class SyncRecognizeFace {
if (faces == null) { if (faces == null) {
return false; return false;
} }
var shouldUpdate = faces.inserts.isNotEmpty || var shouldUpdate = !faces.isEmpty;
faces.deletes.isNotEmpty ||
faces.updates.isNotEmpty;
final items = final items =
await _getFaceItemResults(account, faces.results.values.toList()); await _getFaceItemResults(account, faces.results.values.toList());
shouldUpdate = shouldUpdate || shouldUpdate = shouldUpdate || items.values.any((e) => !e.isEmpty);
items.values.any((e) =>
e.inserts.isNotEmpty ||
e.deletes.isNotEmpty ||
e.updates.isNotEmpty);
if (!shouldUpdate) { if (!shouldUpdate) {
return false; return false;
} }
@ -51,8 +45,7 @@ class SyncRecognizeFace {
batch.deleteWhere( batch.deleteWhere(
db.recognizeFaces, db.recognizeFaces,
(sql.$RecognizeFacesTable t) => (sql.$RecognizeFacesTable t) =>
t.account.equals(dbAccount.rowId) & t.account.equals(dbAccount.rowId) & t.label.equals(d),
t.label.equals(faces.results[d]!.label),
); );
} }
for (final u in faces.updates) { for (final u in faces.updates) {
@ -62,8 +55,7 @@ class SyncRecognizeFace {
label: sql.Value(faces.results[u]!.label), label: sql.Value(faces.results[u]!.label),
), ),
where: (sql.$RecognizeFacesTable t) => where: (sql.$RecognizeFacesTable t) =>
t.account.equals(dbAccount.rowId) & t.account.equals(dbAccount.rowId) & t.label.equals(u),
t.label.equals(faces.results[u]!.label),
); );
} }
for (final i in faces.inserts) { for (final i in faces.inserts) {
@ -267,6 +259,8 @@ class _FaceResult {
required this.deletes, required this.deletes,
}); });
bool get isEmpty => inserts.isEmpty && updates.isEmpty && deletes.isEmpty;
final Map<String, RecognizeFace> results; final Map<String, RecognizeFace> results;
final List<String> inserts; final List<String> inserts;
final List<String> updates; final List<String> updates;
@ -281,6 +275,8 @@ class _FaceItemResult {
required this.deletes, required this.deletes,
}); });
bool get isEmpty => inserts.isEmpty && updates.isEmpty && deletes.isEmpty;
final Map<int, RecognizeFaceItem> results; final Map<int, RecognizeFaceItem> results;
final List<int> inserts; final List<int> inserts;
final List<int> updates; final List<int> updates;