refactor(mobile): device asset entity to use modified time (#17064)

* refactor: device asset entity to use modified time

* chore: cleanup

* refactor: remove album media dependency from hashservice

* refactor: return updated copy of asset

* add hash service tests

* chore: rename hash batch constants

* chore: log the number of assets processed during migration

* chore: more logs

* refactor: use lookup and more tests

* use sort approach

* refactor hash service to use for loop instead

* refactor: rename to getByIds

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
shenlong 2025-04-04 01:12:35 +05:30 committed by GitHub
parent e8b4ac0522
commit 97e52c5156
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
23 changed files with 1801 additions and 185 deletions

View file

@ -6,6 +6,7 @@ import 'package:immich_mobile/extensions/string_extensions.dart';
import 'package:immich_mobile/infrastructure/entities/exif.entity.dart'
as entity;
import 'package:immich_mobile/infrastructure/utils/exif.converter.dart';
import 'package:immich_mobile/utils/diff.dart';
import 'package:immich_mobile/utils/hash.dart';
import 'package:isar/isar.dart';
import 'package:openapi/api.dart';
@ -358,7 +359,7 @@ class Asset {
// take most values from newer asset
// keep vales that can never be set by the asset not in DB
if (a.isRemote) {
return a._copyWith(
return a.copyWith(
id: id,
localId: localId,
width: a.width ?? width,
@ -366,7 +367,7 @@ class Asset {
exifInfo: a.exifInfo?.copyWith(assetId: id) ?? exifInfo,
);
} else if (isRemote) {
return _copyWith(
return copyWith(
localId: localId ?? a.localId,
width: width ?? a.width,
height: height ?? a.height,
@ -374,7 +375,7 @@ class Asset {
);
} else {
// TODO: Revisit this and remove all bool field assignments
return a._copyWith(
return a.copyWith(
id: id,
remoteId: remoteId,
livePhotoVideoId: livePhotoVideoId,
@ -394,7 +395,7 @@ class Asset {
// fill in potentially missing values, i.e. merge assets
if (a.isRemote) {
// values from remote take precedence
return _copyWith(
return copyWith(
remoteId: a.remoteId,
width: a.width,
height: a.height,
@ -416,7 +417,7 @@ class Asset {
);
} else {
// add only missing values (and set isLocal to true)
return _copyWith(
return copyWith(
localId: localId ?? a.localId,
width: width ?? a.width,
height: height ?? a.height,
@ -427,7 +428,7 @@ class Asset {
}
}
Asset _copyWith({
Asset copyWith({
Id? id,
String? checksum,
String? remoteId,
@ -488,6 +489,9 @@ class Asset {
static int compareById(Asset a, Asset b) => a.id.compareTo(b.id);
static int compareByLocalId(Asset a, Asset b) =>
compareToNullable(a.localId, b.localId);
static int compareByChecksum(Asset a, Asset b) =>
a.checksum.compareTo(b.checksum);