mirror of
https://github.com/immich-app/immich.git
synced 2026-05-18 03:10:24 +03:00
feat: add isTransparent to db (#26413)
This commit is contained in:
@@ -352,6 +352,7 @@ export const columns = {
|
|||||||
'asset_file.type',
|
'asset_file.type',
|
||||||
'asset_file.isEdited',
|
'asset_file.isEdited',
|
||||||
'asset_file.isProgressive',
|
'asset_file.isProgressive',
|
||||||
|
'asset_file.isTransparent',
|
||||||
],
|
],
|
||||||
authUser: ['user.id', 'user.name', 'user.email', 'user.isAdmin', 'user.quotaUsageInBytes', 'user.quotaSizeInBytes'],
|
authUser: ['user.id', 'user.name', 'user.email', 'user.isAdmin', 'user.quotaUsageInBytes', 'user.quotaSizeInBytes'],
|
||||||
authApiKey: ['api_key.id', 'api_key.permissions'],
|
authApiKey: ['api_key.id', 'api_key.permissions'],
|
||||||
|
|||||||
@@ -216,7 +216,8 @@ select
|
|||||||
"asset_file"."path",
|
"asset_file"."path",
|
||||||
"asset_file"."type",
|
"asset_file"."type",
|
||||||
"asset_file"."isEdited",
|
"asset_file"."isEdited",
|
||||||
"asset_file"."isProgressive"
|
"asset_file"."isProgressive",
|
||||||
|
"asset_file"."isTransparent"
|
||||||
from
|
from
|
||||||
"asset_file"
|
"asset_file"
|
||||||
where
|
where
|
||||||
|
|||||||
@@ -903,7 +903,10 @@ export class AssetRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async upsertFile(
|
async upsertFile(
|
||||||
file: Pick<Insertable<AssetFileTable>, 'assetId' | 'path' | 'type' | 'isEdited' | 'isProgressive'>,
|
file: Pick<
|
||||||
|
Insertable<AssetFileTable>,
|
||||||
|
'assetId' | 'path' | 'type' | 'isEdited' | 'isProgressive' | 'isTransparent'
|
||||||
|
>,
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
await this.db
|
await this.db
|
||||||
.insertInto('asset_file')
|
.insertInto('asset_file')
|
||||||
@@ -917,7 +920,10 @@ export class AssetRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async upsertFiles(
|
async upsertFiles(
|
||||||
files: Pick<Insertable<AssetFileTable>, 'assetId' | 'path' | 'type' | 'isEdited' | 'isProgressive'>[],
|
files: Pick<
|
||||||
|
Insertable<AssetFileTable>,
|
||||||
|
'assetId' | 'path' | 'type' | 'isEdited' | 'isProgressive' | 'isTransparent'
|
||||||
|
>[],
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
if (files.length === 0) {
|
if (files.length === 0) {
|
||||||
return;
|
return;
|
||||||
@@ -930,6 +936,7 @@ export class AssetRepository {
|
|||||||
oc.columns(['assetId', 'type', 'isEdited']).doUpdateSet((eb) => ({
|
oc.columns(['assetId', 'type', 'isEdited']).doUpdateSet((eb) => ({
|
||||||
path: eb.ref('excluded.path'),
|
path: eb.ref('excluded.path'),
|
||||||
isProgressive: eb.ref('excluded.isProgressive'),
|
isProgressive: eb.ref('excluded.isProgressive'),
|
||||||
|
isTransparent: eb.ref('excluded.isTransparent'),
|
||||||
})),
|
})),
|
||||||
)
|
)
|
||||||
.execute();
|
.execute();
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import { Kysely, sql } from 'kysely';
|
||||||
|
|
||||||
|
export async function up(db: Kysely<any>): Promise<void> {
|
||||||
|
await sql`ALTER TABLE "asset_file" ADD "isTransparent" boolean NOT NULL DEFAULT false;`.execute(db);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function down(db: Kysely<any>): Promise<void> {
|
||||||
|
await sql`ALTER TABLE "asset_file" DROP COLUMN "isTransparent";`.execute(db);
|
||||||
|
}
|
||||||
@@ -43,4 +43,7 @@ export class AssetFileTable {
|
|||||||
|
|
||||||
@Column({ type: 'boolean', default: false })
|
@Column({ type: 'boolean', default: false })
|
||||||
isProgressive!: Generated<boolean>;
|
isProgressive!: Generated<boolean>;
|
||||||
|
|
||||||
|
@Column({ type: 'boolean', default: false })
|
||||||
|
isTransparent!: Generated<boolean>;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -468,6 +468,7 @@ describe(MediaService.name, () => {
|
|||||||
path: expect.any(String),
|
path: expect.any(String),
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
assetId: asset.id,
|
assetId: asset.id,
|
||||||
@@ -475,6 +476,7 @@ describe(MediaService.name, () => {
|
|||||||
path: expect.any(String),
|
path: expect.any(String),
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(mocks.asset.update).toHaveBeenCalledWith({ id: asset.id, thumbhash: thumbhashBuffer });
|
expect(mocks.asset.update).toHaveBeenCalledWith({ id: asset.id, thumbhash: thumbhashBuffer });
|
||||||
@@ -509,6 +511,7 @@ describe(MediaService.name, () => {
|
|||||||
path: expect.any(String),
|
path: expect.any(String),
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
assetId: asset.id,
|
assetId: asset.id,
|
||||||
@@ -516,6 +519,7 @@ describe(MediaService.name, () => {
|
|||||||
path: expect.any(String),
|
path: expect.any(String),
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
@@ -549,6 +553,7 @@ describe(MediaService.name, () => {
|
|||||||
path: expect.any(String),
|
path: expect.any(String),
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
assetId: asset.id,
|
assetId: asset.id,
|
||||||
@@ -556,6 +561,7 @@ describe(MediaService.name, () => {
|
|||||||
path: expect.any(String),
|
path: expect.any(String),
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
@@ -771,10 +777,12 @@ describe(MediaService.name, () => {
|
|||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
type: AssetFileType.Preview,
|
type: AssetFileType.Preview,
|
||||||
isProgressive: true,
|
isProgressive: true,
|
||||||
|
isTransparent: false,
|
||||||
}),
|
}),
|
||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
type: AssetFileType.Thumbnail,
|
type: AssetFileType.Thumbnail,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
@@ -808,10 +816,12 @@ describe(MediaService.name, () => {
|
|||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
type: AssetFileType.Preview,
|
type: AssetFileType.Preview,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
}),
|
}),
|
||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
type: AssetFileType.Thumbnail,
|
type: AssetFileType.Thumbnail,
|
||||||
isProgressive: true,
|
isProgressive: true,
|
||||||
|
isTransparent: false,
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
@@ -830,10 +840,12 @@ describe(MediaService.name, () => {
|
|||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
type: AssetFileType.Preview,
|
type: AssetFileType.Preview,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
}),
|
}),
|
||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
type: AssetFileType.Thumbnail,
|
type: AssetFileType.Thumbnail,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
@@ -3583,6 +3595,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/new/preview.jpg',
|
path: '/new/preview.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
assetId: asset.id,
|
assetId: asset.id,
|
||||||
@@ -3590,6 +3603,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/new/thumbnail.jpg',
|
path: '/new/thumbnail.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@@ -3600,6 +3614,7 @@ describe(MediaService.name, () => {
|
|||||||
type: AssetFileType.Preview,
|
type: AssetFileType.Preview,
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
assetId: 'asset-id',
|
assetId: 'asset-id',
|
||||||
@@ -3607,6 +3622,7 @@ describe(MediaService.name, () => {
|
|||||||
type: AssetFileType.Thumbnail,
|
type: AssetFileType.Thumbnail,
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(mocks.asset.deleteFiles).not.toHaveBeenCalled();
|
expect(mocks.asset.deleteFiles).not.toHaveBeenCalled();
|
||||||
@@ -3624,6 +3640,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/old/preview.jpg',
|
path: '/old/preview.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'file-2',
|
id: 'file-2',
|
||||||
@@ -3632,6 +3649,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/old/thumbnail.jpg',
|
path: '/old/thumbnail.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
@@ -3643,6 +3661,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/new/preview.jpg',
|
path: '/new/preview.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
assetId: asset.id,
|
assetId: asset.id,
|
||||||
@@ -3650,6 +3669,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/new/thumbnail.jpg',
|
path: '/new/thumbnail.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@@ -3660,6 +3680,7 @@ describe(MediaService.name, () => {
|
|||||||
type: AssetFileType.Preview,
|
type: AssetFileType.Preview,
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
assetId: 'asset-id',
|
assetId: 'asset-id',
|
||||||
@@ -3667,6 +3688,7 @@ describe(MediaService.name, () => {
|
|||||||
type: AssetFileType.Thumbnail,
|
type: AssetFileType.Thumbnail,
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(mocks.asset.deleteFiles).not.toHaveBeenCalled();
|
expect(mocks.asset.deleteFiles).not.toHaveBeenCalled();
|
||||||
@@ -3687,6 +3709,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/old/preview.jpg',
|
path: '/old/preview.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'file-2',
|
id: 'file-2',
|
||||||
@@ -3695,6 +3718,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/old/thumbnail.jpg',
|
path: '/old/thumbnail.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
@@ -3710,6 +3734,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/old/preview.jpg',
|
path: '/old/preview.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'file-2',
|
id: 'file-2',
|
||||||
@@ -3718,6 +3743,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/old/thumbnail.jpg',
|
path: '/old/thumbnail.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(mocks.job.queue).toHaveBeenCalledWith({
|
expect(mocks.job.queue).toHaveBeenCalledWith({
|
||||||
@@ -3737,6 +3763,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/same/preview.jpg',
|
path: '/same/preview.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'file-2',
|
id: 'file-2',
|
||||||
@@ -3745,6 +3772,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/same/thumbnail.jpg',
|
path: '/same/thumbnail.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
@@ -3756,6 +3784,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/same/preview.jpg',
|
path: '/same/preview.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
assetId: asset.id,
|
assetId: asset.id,
|
||||||
@@ -3763,6 +3792,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/same/thumbnail.jpg',
|
path: '/same/thumbnail.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@@ -3782,6 +3812,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/old/preview.jpg',
|
path: '/old/preview.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'file-2',
|
id: 'file-2',
|
||||||
@@ -3790,6 +3821,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/old/thumbnail.jpg',
|
path: '/old/thumbnail.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
@@ -3801,6 +3833,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/new/preview.jpg',
|
path: '/new/preview.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
}, // replace
|
}, // replace
|
||||||
{
|
{
|
||||||
assetId: asset.id,
|
assetId: asset.id,
|
||||||
@@ -3808,6 +3841,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/new/fullsize.jpg',
|
path: '/new/fullsize.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
}, // new
|
}, // new
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@@ -3818,6 +3852,7 @@ describe(MediaService.name, () => {
|
|||||||
type: AssetFileType.Preview,
|
type: AssetFileType.Preview,
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
assetId: 'asset-id',
|
assetId: 'asset-id',
|
||||||
@@ -3825,6 +3860,7 @@ describe(MediaService.name, () => {
|
|||||||
type: AssetFileType.FullSize,
|
type: AssetFileType.FullSize,
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(mocks.asset.deleteFiles).toHaveBeenCalledWith([
|
expect(mocks.asset.deleteFiles).toHaveBeenCalledWith([
|
||||||
@@ -3835,6 +3871,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/old/thumbnail.jpg',
|
path: '/old/thumbnail.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(mocks.job.queue).toHaveBeenCalledWith({
|
expect(mocks.job.queue).toHaveBeenCalledWith({
|
||||||
@@ -3867,6 +3904,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/old/preview.jpg',
|
path: '/old/preview.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
@@ -3882,6 +3920,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/old/preview.jpg',
|
path: '/old/preview.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(mocks.job.queue).toHaveBeenCalledWith({
|
expect(mocks.job.queue).toHaveBeenCalledWith({
|
||||||
@@ -3901,6 +3940,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/old/preview.jpg',
|
path: '/old/preview.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'file-2',
|
id: 'file-2',
|
||||||
@@ -3909,6 +3949,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/old/thumbnail.jpg',
|
path: '/old/thumbnail.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
@@ -3920,6 +3961,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/old/preview.jpg',
|
path: '/old/preview.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: true,
|
isProgressive: true,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
assetId: asset.id,
|
assetId: asset.id,
|
||||||
@@ -3927,6 +3969,7 @@ describe(MediaService.name, () => {
|
|||||||
path: '/old/thumbnail.jpg',
|
path: '/old/thumbnail.jpg',
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@@ -3937,6 +3980,7 @@ describe(MediaService.name, () => {
|
|||||||
type: AssetFileType.Preview,
|
type: AssetFileType.Preview,
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: true,
|
isProgressive: true,
|
||||||
|
isTransparent: false,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(mocks.asset.deleteFiles).not.toHaveBeenCalled();
|
expect(mocks.asset.deleteFiles).not.toHaveBeenCalled();
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ interface UpsertFileOptions {
|
|||||||
path: string;
|
path: string;
|
||||||
isEdited: boolean;
|
isEdited: boolean;
|
||||||
isProgressive: boolean;
|
isProgressive: boolean;
|
||||||
|
isTransparent: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
type ThumbnailAsset = NonNullable<Awaited<ReturnType<AssetJobRepository['getForGenerateThumbnailJob']>>>;
|
type ThumbnailAsset = NonNullable<Awaited<ReturnType<AssetJobRepository['getForGenerateThumbnailJob']>>>;
|
||||||
@@ -321,12 +322,14 @@ export class MediaService extends BaseService {
|
|||||||
format: previewFormat,
|
format: previewFormat,
|
||||||
isEdited: useEdits,
|
isEdited: useEdits,
|
||||||
isProgressive: !!image.preview.progressive && previewFormat !== ImageFormat.Webp,
|
isProgressive: !!image.preview.progressive && previewFormat !== ImageFormat.Webp,
|
||||||
|
isTransparent,
|
||||||
});
|
});
|
||||||
const thumbnailFile = this.getImageFile(asset, {
|
const thumbnailFile = this.getImageFile(asset, {
|
||||||
fileType: AssetFileType.Thumbnail,
|
fileType: AssetFileType.Thumbnail,
|
||||||
format: thumbnailFormat,
|
format: thumbnailFormat,
|
||||||
isEdited: useEdits,
|
isEdited: useEdits,
|
||||||
isProgressive: !!image.thumbnail.progressive && thumbnailFormat !== ImageFormat.Webp,
|
isProgressive: !!image.thumbnail.progressive && thumbnailFormat !== ImageFormat.Webp,
|
||||||
|
isTransparent,
|
||||||
});
|
});
|
||||||
this.storageCore.ensureFolders(previewFile.path);
|
this.storageCore.ensureFolders(previewFile.path);
|
||||||
|
|
||||||
@@ -350,6 +353,7 @@ export class MediaService extends BaseService {
|
|||||||
format: fullsizeFormat,
|
format: fullsizeFormat,
|
||||||
isEdited: useEdits,
|
isEdited: useEdits,
|
||||||
isProgressive: !!image.fullsize.progressive && fullsizeFormat !== ImageFormat.Webp,
|
isProgressive: !!image.fullsize.progressive && fullsizeFormat !== ImageFormat.Webp,
|
||||||
|
isTransparent,
|
||||||
});
|
});
|
||||||
const fullsizeOptions = {
|
const fullsizeOptions = {
|
||||||
...baseOptions,
|
...baseOptions,
|
||||||
@@ -364,6 +368,7 @@ export class MediaService extends BaseService {
|
|||||||
format: extracted.format,
|
format: extracted.format,
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: !!image.fullsize.progressive && image.fullsize.format !== ImageFormat.Webp,
|
isProgressive: !!image.fullsize.progressive && image.fullsize.format !== ImageFormat.Webp,
|
||||||
|
isTransparent,
|
||||||
});
|
});
|
||||||
this.storageCore.ensureFolders(fullsizeFile.path);
|
this.storageCore.ensureFolders(fullsizeFile.path);
|
||||||
|
|
||||||
@@ -510,12 +515,14 @@ export class MediaService extends BaseService {
|
|||||||
format: image.preview.format,
|
format: image.preview.format,
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
});
|
});
|
||||||
const thumbnailFile = this.getImageFile(asset, {
|
const thumbnailFile = this.getImageFile(asset, {
|
||||||
fileType: AssetFileType.Thumbnail,
|
fileType: AssetFileType.Thumbnail,
|
||||||
format: image.thumbnail.format,
|
format: image.thumbnail.format,
|
||||||
isEdited: false,
|
isEdited: false,
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
});
|
});
|
||||||
this.storageCore.ensureFolders(previewFile.path);
|
this.storageCore.ensureFolders(previewFile.path);
|
||||||
|
|
||||||
@@ -802,7 +809,10 @@ export class MediaService extends BaseService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async syncFiles(oldFiles: (AssetFile & { isProgressive: boolean })[], newFiles: UpsertFileOptions[]) {
|
private async syncFiles(
|
||||||
|
oldFiles: (AssetFile & { isProgressive: boolean; isTransparent: boolean })[],
|
||||||
|
newFiles: UpsertFileOptions[],
|
||||||
|
) {
|
||||||
const toUpsert: UpsertFileOptions[] = [];
|
const toUpsert: UpsertFileOptions[] = [];
|
||||||
const pathsToDelete: string[] = [];
|
const pathsToDelete: string[] = [];
|
||||||
const toDelete = new Set(oldFiles);
|
const toDelete = new Set(oldFiles);
|
||||||
@@ -814,7 +824,11 @@ export class MediaService extends BaseService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// upsert new file path
|
// upsert new file path
|
||||||
if (existingFile?.path !== newFile.path || existingFile.isProgressive !== newFile.isProgressive) {
|
if (
|
||||||
|
existingFile?.path !== newFile.path ||
|
||||||
|
existingFile.isProgressive !== newFile.isProgressive ||
|
||||||
|
existingFile.isTransparent !== newFile.isTransparent
|
||||||
|
) {
|
||||||
toUpsert.push(newFile);
|
toUpsert.push(newFile);
|
||||||
|
|
||||||
// delete old file from disk
|
// delete old file from disk
|
||||||
@@ -882,7 +896,10 @@ export class MediaService extends BaseService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private getImageFile(asset: ThumbnailPathEntity, options: ImagePathOptions & { isProgressive: boolean }) {
|
private getImageFile(
|
||||||
|
asset: ThumbnailPathEntity,
|
||||||
|
options: ImagePathOptions & { isProgressive: boolean; isTransparent: boolean },
|
||||||
|
) {
|
||||||
const path = StorageCore.getImagePath(asset, options);
|
const path = StorageCore.getImagePath(asset, options);
|
||||||
return {
|
return {
|
||||||
assetId: asset.id,
|
assetId: asset.id,
|
||||||
@@ -890,6 +907,7 @@ export class MediaService extends BaseService {
|
|||||||
path,
|
path,
|
||||||
isEdited: options.isEdited,
|
isEdited: options.isEdited,
|
||||||
isProgressive: options.isProgressive,
|
isProgressive: options.isProgressive,
|
||||||
|
isTransparent: options.isTransparent,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ export class AssetFileFactory {
|
|||||||
path: `/data/12/34/thumbs/${id.slice(0, 2)}/${id.slice(2, 4)}/${id}${isEdited ? '_edited' : ''}.jpg`,
|
path: `/data/12/34/thumbs/${id.slice(0, 2)}/${id.slice(2, 4)}/${id}${isEdited ? '_edited' : ''}.jpg`,
|
||||||
updateId: newUuidV7(),
|
updateId: newUuidV7(),
|
||||||
isProgressive: false,
|
isProgressive: false,
|
||||||
|
isTransparent: false,
|
||||||
isEdited,
|
isEdited,
|
||||||
...dto,
|
...dto,
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user