diff --git a/mobile/lib/infrastructure/repositories/people.repository.dart b/mobile/lib/infrastructure/repositories/people.repository.dart index cd5f702ce7..40402b6f72 100644 --- a/mobile/lib/infrastructure/repositories/people.repository.dart +++ b/mobile/lib/infrastructure/repositories/people.repository.dart @@ -1,4 +1,5 @@ import 'package:drift/drift.dart'; +import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:immich_mobile/domain/models/person.model.dart'; import 'package:immich_mobile/infrastructure/entities/person.entity.drift.dart'; import 'package:immich_mobile/infrastructure/repositories/db.repository.dart'; @@ -26,19 +27,28 @@ class DriftPeopleRepository extends DriftDatabaseRepository { } Future> getAllPeople() async { + final people = _db.personEntity; + final faces = _db.assetFaceEntity; + final assets = _db.remoteAssetEntity; + final query = - _db.select(_db.personEntity).join([ - leftOuterJoin(_db.assetFaceEntity, _db.assetFaceEntity.personId.equalsExp(_db.personEntity.id)), + _db.select(people).join([ + innerJoin(faces, faces.personId.equalsExp(people.id)), + innerJoin(assets, assets.id.equalsExp(faces.assetId)), ]) - ..where(_db.personEntity.isHidden.equals(false)) - ..groupBy([_db.personEntity.id], having: _db.assetFaceEntity.id.count().isBiggerOrEqualValue(3)) + ..where( + people.isHidden.equals(false) & + assets.deletedAt.isNull() & + assets.visibility.equalsValue(AssetVisibility.timeline), + ) + ..groupBy([people.id], having: faces.id.count().isBiggerOrEqualValue(3) | people.name.equals('').not()) ..orderBy([ - OrderingTerm(expression: _db.personEntity.name.equals('').not(), mode: OrderingMode.desc), - OrderingTerm(expression: _db.assetFaceEntity.id.count(), mode: OrderingMode.desc), + OrderingTerm(expression: people.name.equals('').not(), mode: OrderingMode.desc), + OrderingTerm(expression: faces.id.count(), mode: OrderingMode.desc), ]); return query.map((row) { - final person = row.readTable(_db.personEntity); + final person = row.readTable(people); return person.toDto(); }).get(); }