From 3194538817476f74699ca76d865225e4f50e285c Mon Sep 17 00:00:00 2001 From: shenlong <139912620+shenlong-tanwen@users.noreply.github.com> Date: Mon, 27 Oct 2025 19:52:51 +0530 Subject: [PATCH] fix: handle null bucketId or name in android local sync (#23224) Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> --- .../app/alextran/immich/sync/MessagesImplBase.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/mobile/android/app/src/main/kotlin/app/alextran/immich/sync/MessagesImplBase.kt b/mobile/android/app/src/main/kotlin/app/alextran/immich/sync/MessagesImplBase.kt index 0ea86bb10d..ca2781f7b4 100644 --- a/mobile/android/app/src/main/kotlin/app/alextran/immich/sync/MessagesImplBase.kt +++ b/mobile/android/app/src/main/kotlin/app/alextran/immich/sync/MessagesImplBase.kt @@ -101,9 +101,15 @@ open class NativeSyncApiImplBase(context: Context) : ImmichPlugin() { while (c.moveToNext()) { val id = c.getLong(idColumn).toString() + val name = c.getStringOrNull(nameColumn) + val bucketId = c.getStringOrNull(bucketIdColumn) + val path = c.getStringOrNull(dataColumn) - val path = c.getString(dataColumn) - if (path.isNullOrBlank() || !File(path).exists()) { + // Skip assets with invalid metadata + if ( + name.isNullOrBlank() || bucketId.isNullOrBlank() || + path.isNullOrBlank() || !File(path).exists() + ) { yield(AssetResult.InvalidAsset(id)) continue } @@ -113,7 +119,6 @@ open class NativeSyncApiImplBase(context: Context) : ImmichPlugin() { MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO -> 2 else -> 0 } - val name = c.getString(nameColumn) // Date taken is milliseconds since epoch, Date added is seconds since epoch val createdAt = (c.getLong(dateTakenColumn).takeIf { it > 0 }?.div(1000)) ?: c.getLong(dateAddedColumn) @@ -124,7 +129,6 @@ open class NativeSyncApiImplBase(context: Context) : ImmichPlugin() { // Duration is milliseconds val duration = if (mediaType == MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE) 0 else c.getLong(durationColumn) / 1000 - val bucketId = c.getString(bucketIdColumn) val orientation = c.getInt(orientationColumn) val isFavorite = if (favoriteColumn == -1) false else c.getInt(favoriteColumn) != 0