From a6d8a2dfe1ba4b4a17f54ac8e5c7a9c979809a60 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 5 Jan 2026 15:50:17 -0600 Subject: [PATCH] fix: don't include iCloud Shared Album --- mobile/lib/domain/services/local_sync.service.dart | 1 + .../entities/local_album.entity.dart | 1 + .../repositories/local_asset.repository.dart | 14 ++++++++++++++ 3 files changed, 16 insertions(+) diff --git a/mobile/lib/domain/services/local_sync.service.dart b/mobile/lib/domain/services/local_sync.service.dart index c49ac49cce..1194331a6d 100644 --- a/mobile/lib/domain/services/local_sync.service.dart +++ b/mobile/lib/domain/services/local_sync.service.dart @@ -360,6 +360,7 @@ extension on Iterable { name: e.name, updatedAt: tryFromSecondsSinceEpoch(e.updatedAt, isUtc: true) ?? DateTime.timestamp(), assetCount: e.assetCount, + isIosSharedAlbum: e.isCloud, ), ).toList(); } diff --git a/mobile/lib/infrastructure/entities/local_album.entity.dart b/mobile/lib/infrastructure/entities/local_album.entity.dart index 707d3326a4..641a5359f6 100644 --- a/mobile/lib/infrastructure/entities/local_album.entity.dart +++ b/mobile/lib/infrastructure/entities/local_album.entity.dart @@ -33,6 +33,7 @@ extension LocalAlbumEntityDataHelper on LocalAlbumEntityData { assetCount: assetCount, backupSelection: backupSelection, linkedRemoteAlbumId: linkedRemoteAlbumId, + isIosSharedAlbum: isIosSharedAlbum, ); } } diff --git a/mobile/lib/infrastructure/repositories/local_asset.repository.dart b/mobile/lib/infrastructure/repositories/local_asset.repository.dart index e16e621020..c991b09315 100644 --- a/mobile/lib/infrastructure/repositories/local_asset.repository.dart +++ b/mobile/lib/infrastructure/repositories/local_asset.repository.dart @@ -134,6 +134,17 @@ class DriftLocalAssetRepository extends DriftDatabaseRepository { AssetFilterType filterType = AssetFilterType.all, bool keepFavorites = true, }) async { + final iosSharedAlbumAssets = _db.localAlbumAssetEntity.selectOnly() + ..addColumns([_db.localAlbumAssetEntity.assetId]) + ..join([ + innerJoin( + _db.localAlbumEntity, + _db.localAlbumAssetEntity.albumId.equalsExp(_db.localAlbumEntity.id), + useColumns: false, + ), + ]) + ..where(_db.localAlbumEntity.isIosSharedAlbum.equals(true)); + final query = _db.localAssetEntity.select().join([ innerJoin( _db.remoteAssetEntity, @@ -145,6 +156,9 @@ class DriftLocalAssetRepository extends DriftDatabaseRepository { Expression whereClause = _db.localAssetEntity.createdAt.isSmallerOrEqualValue(cutoffDate); + // Exclude assets that are in iOS shared albums + whereClause = whereClause & _db.localAssetEntity.id.isNotInQuery(iosSharedAlbumAssets); + if (filterType == AssetFilterType.photosOnly) { whereClause = whereClause & _db.localAssetEntity.type.equals(AssetType.image.index); } else if (filterType == AssetFilterType.videosOnly) {