mirror of
https://github.com/immich-app/immich.git
synced 2024-12-28 06:31:58 +00:00
fix: do not use trashed assets as album covers (#12905)
This commit is contained in:
parent
b45fce8ddf
commit
05d8c4c132
2 changed files with 26 additions and 31 deletions
|
@ -483,16 +483,13 @@ UPDATE "albums"
|
|||
SET
|
||||
"albumThumbnailAssetId" = (
|
||||
SELECT
|
||||
"albums_assets2"."assetsId"
|
||||
"album_assets"."assetsId"
|
||||
FROM
|
||||
"assets" "assets",
|
||||
"albums_assets_assets" "albums_assets2"
|
||||
"albums_assets_assets" "album_assets"
|
||||
INNER JOIN "assets" "assets" ON "album_assets"."assetsId" = "assets"."id"
|
||||
AND "assets"."deletedAt" IS NULL
|
||||
WHERE
|
||||
(
|
||||
"albums_assets2"."assetsId" = "assets"."id"
|
||||
AND "albums_assets2"."albumsId" = "albums"."id"
|
||||
)
|
||||
AND ("assets"."deletedAt" IS NULL)
|
||||
"album_assets"."albumsId" = "albums"."id"
|
||||
ORDER BY
|
||||
"assets"."fileCreatedAt" DESC
|
||||
LIMIT
|
||||
|
@ -505,17 +502,21 @@ WHERE
|
|||
SELECT
|
||||
1
|
||||
FROM
|
||||
"albums_assets_assets" "albums_assets"
|
||||
"albums_assets_assets" "album_assets"
|
||||
INNER JOIN "assets" "assets" ON "album_assets"."assetsId" = "assets"."id"
|
||||
AND "assets"."deletedAt" IS NULL
|
||||
WHERE
|
||||
"albums"."id" = "albums_assets"."albumsId"
|
||||
"album_assets"."albumsId" = "albums"."id"
|
||||
)
|
||||
OR "albums"."albumThumbnailAssetId" IS NOT NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
"albums_assets_assets" "albums_assets"
|
||||
"albums_assets_assets" "album_assets"
|
||||
INNER JOIN "assets" "assets" ON "album_assets"."assetsId" = "assets"."id"
|
||||
AND "assets"."deletedAt" IS NULL
|
||||
WHERE
|
||||
"albums"."id" = "albums_assets"."albumsId"
|
||||
AND "albums"."albumThumbnailAssetId" = "albums_assets"."assetsId"
|
||||
"album_assets"."albumsId" = "albums"."id"
|
||||
AND "albums"."albumThumbnailAssetId" = "album_assets"."assetsId"
|
||||
)
|
||||
|
|
|
@ -277,32 +277,26 @@ export class AlbumRepository implements IAlbumRepository {
|
|||
@GenerateSql()
|
||||
async updateThumbnails(): Promise<number | undefined> {
|
||||
// Subquery for getting a new thumbnail.
|
||||
const newThumbnail = this.assetRepository
|
||||
.createQueryBuilder('assets')
|
||||
.select('albums_assets2.assetsId')
|
||||
.addFrom('albums_assets_assets', 'albums_assets2')
|
||||
.where('albums_assets2.assetsId = assets.id')
|
||||
.andWhere('albums_assets2.albumsId = "albums"."id"') // Reference to albums.id outside this query
|
||||
.orderBy('assets.fileCreatedAt', 'DESC')
|
||||
.limit(1);
|
||||
|
||||
// Using dataSource, because there is no direct access to albums_assets_assets.
|
||||
const albumHasAssets = this.dataSource
|
||||
.createQueryBuilder()
|
||||
.select('1')
|
||||
.from('albums_assets_assets', 'albums_assets')
|
||||
.where('"albums"."id" = "albums_assets"."albumsId"');
|
||||
const builder = this.dataSource
|
||||
.createQueryBuilder('albums_assets_assets', 'album_assets')
|
||||
.innerJoin('assets', 'assets', '"album_assets"."assetsId" = "assets"."id"')
|
||||
.where('"album_assets"."albumsId" = "albums"."id"');
|
||||
|
||||
const albumContainsThumbnail = albumHasAssets
|
||||
const newThumbnail = builder
|
||||
.clone()
|
||||
.andWhere('"albums"."albumThumbnailAssetId" = "albums_assets"."assetsId"');
|
||||
.select('"album_assets"."assetsId"')
|
||||
.orderBy('"assets"."fileCreatedAt"', 'DESC')
|
||||
.limit(1);
|
||||
const hasAssets = builder.clone().select('1');
|
||||
const hasInvalidAsset = hasAssets.clone().andWhere('"albums"."albumThumbnailAssetId" = "album_assets"."assetsId"');
|
||||
|
||||
const updateAlbums = this.repository
|
||||
.createQueryBuilder('albums')
|
||||
.update(AlbumEntity)
|
||||
.set({ albumThumbnailAssetId: () => `(${newThumbnail.getQuery()})` })
|
||||
.where(`"albums"."albumThumbnailAssetId" IS NULL AND EXISTS (${albumHasAssets.getQuery()})`)
|
||||
.orWhere(`"albums"."albumThumbnailAssetId" IS NOT NULL AND NOT EXISTS (${albumContainsThumbnail.getQuery()})`);
|
||||
.where(`"albums"."albumThumbnailAssetId" IS NULL AND EXISTS (${hasAssets.getQuery()})`)
|
||||
.orWhere(`"albums"."albumThumbnailAssetId" IS NOT NULL AND NOT EXISTS (${hasInvalidAsset.getQuery()})`);
|
||||
|
||||
const result = await updateAlbums.execute();
|
||||
|
||||
|
|
Loading…
Reference in a new issue