mirror of
https://github.com/immich-app/immich.git
synced 2026-02-04 08:49:01 +03:00
feat: make progressive system config optional (#25486)
This commit is contained in:
@@ -15,7 +15,7 @@ class SystemConfigGeneratedFullsizeImageDto {
|
|||||||
SystemConfigGeneratedFullsizeImageDto({
|
SystemConfigGeneratedFullsizeImageDto({
|
||||||
required this.enabled,
|
required this.enabled,
|
||||||
required this.format,
|
required this.format,
|
||||||
required this.progressive,
|
this.progressive = false,
|
||||||
required this.quality,
|
required this.quality,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ class SystemConfigGeneratedFullsizeImageDto {
|
|||||||
return SystemConfigGeneratedFullsizeImageDto(
|
return SystemConfigGeneratedFullsizeImageDto(
|
||||||
enabled: mapValueOfType<bool>(json, r'enabled')!,
|
enabled: mapValueOfType<bool>(json, r'enabled')!,
|
||||||
format: ImageFormat.fromJson(json[r'format'])!,
|
format: ImageFormat.fromJson(json[r'format'])!,
|
||||||
progressive: mapValueOfType<bool>(json, r'progressive')!,
|
progressive: mapValueOfType<bool>(json, r'progressive') ?? false,
|
||||||
quality: mapValueOfType<int>(json, r'quality')!,
|
quality: mapValueOfType<int>(json, r'quality')!,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -118,7 +118,6 @@ class SystemConfigGeneratedFullsizeImageDto {
|
|||||||
static const requiredKeys = <String>{
|
static const requiredKeys = <String>{
|
||||||
'enabled',
|
'enabled',
|
||||||
'format',
|
'format',
|
||||||
'progressive',
|
|
||||||
'quality',
|
'quality',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ class SystemConfigGeneratedImageDto {
|
|||||||
/// Returns a new [SystemConfigGeneratedImageDto] instance.
|
/// Returns a new [SystemConfigGeneratedImageDto] instance.
|
||||||
SystemConfigGeneratedImageDto({
|
SystemConfigGeneratedImageDto({
|
||||||
required this.format,
|
required this.format,
|
||||||
required this.progressive,
|
this.progressive = false,
|
||||||
required this.quality,
|
required this.quality,
|
||||||
required this.size,
|
required this.size,
|
||||||
});
|
});
|
||||||
@@ -67,7 +67,7 @@ class SystemConfigGeneratedImageDto {
|
|||||||
|
|
||||||
return SystemConfigGeneratedImageDto(
|
return SystemConfigGeneratedImageDto(
|
||||||
format: ImageFormat.fromJson(json[r'format'])!,
|
format: ImageFormat.fromJson(json[r'format'])!,
|
||||||
progressive: mapValueOfType<bool>(json, r'progressive')!,
|
progressive: mapValueOfType<bool>(json, r'progressive') ?? false,
|
||||||
quality: mapValueOfType<int>(json, r'quality')!,
|
quality: mapValueOfType<int>(json, r'quality')!,
|
||||||
size: mapValueOfType<int>(json, r'size')!,
|
size: mapValueOfType<int>(json, r'size')!,
|
||||||
);
|
);
|
||||||
@@ -118,7 +118,6 @@ class SystemConfigGeneratedImageDto {
|
|||||||
/// The list of required keys that must be present in a JSON.
|
/// The list of required keys that must be present in a JSON.
|
||||||
static const requiredKeys = <String>{
|
static const requiredKeys = <String>{
|
||||||
'format',
|
'format',
|
||||||
'progressive',
|
|
||||||
'quality',
|
'quality',
|
||||||
'size',
|
'size',
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -22625,6 +22625,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"progressive": {
|
"progressive": {
|
||||||
|
"default": false,
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
},
|
},
|
||||||
"quality": {
|
"quality": {
|
||||||
@@ -22636,7 +22637,6 @@
|
|||||||
"required": [
|
"required": [
|
||||||
"enabled",
|
"enabled",
|
||||||
"format",
|
"format",
|
||||||
"progressive",
|
|
||||||
"quality"
|
"quality"
|
||||||
],
|
],
|
||||||
"type": "object"
|
"type": "object"
|
||||||
@@ -22651,6 +22651,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"progressive": {
|
"progressive": {
|
||||||
|
"default": false,
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
},
|
},
|
||||||
"quality": {
|
"quality": {
|
||||||
@@ -22665,7 +22666,6 @@
|
|||||||
},
|
},
|
||||||
"required": [
|
"required": [
|
||||||
"format",
|
"format",
|
||||||
"progressive",
|
|
||||||
"quality",
|
"quality",
|
||||||
"size"
|
"size"
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1538,12 +1538,12 @@ export type SystemConfigFFmpegDto = {
|
|||||||
export type SystemConfigGeneratedFullsizeImageDto = {
|
export type SystemConfigGeneratedFullsizeImageDto = {
|
||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
format: ImageFormat;
|
format: ImageFormat;
|
||||||
progressive: boolean;
|
progressive?: boolean;
|
||||||
quality: number;
|
quality: number;
|
||||||
};
|
};
|
||||||
export type SystemConfigGeneratedImageDto = {
|
export type SystemConfigGeneratedImageDto = {
|
||||||
format: ImageFormat;
|
format: ImageFormat;
|
||||||
progressive: boolean;
|
progressive?: boolean;
|
||||||
quality: number;
|
quality: number;
|
||||||
size: number;
|
size: number;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -70,5 +70,33 @@ describe(SystemConfigController.name, () => {
|
|||||||
expect(body).toEqual(errorDto.badRequest(['nightlyTasks.databaseCleanup must be a boolean value']));
|
expect(body).toEqual(errorDto.badRequest(['nightlyTasks.databaseCleanup must be a boolean value']));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('image', () => {
|
||||||
|
it('should accept config without optional progressive property', async () => {
|
||||||
|
const config = _.cloneDeep(defaults);
|
||||||
|
delete config.image.thumbnail.progressive;
|
||||||
|
delete config.image.preview.progressive;
|
||||||
|
delete config.image.fullsize.progressive;
|
||||||
|
const { status } = await request(ctx.getHttpServer()).put('/system-config').send(config);
|
||||||
|
expect(status).toBe(200);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should accept config with progressive set to true', async () => {
|
||||||
|
const config = _.cloneDeep(defaults);
|
||||||
|
config.image.thumbnail.progressive = true;
|
||||||
|
config.image.preview.progressive = true;
|
||||||
|
config.image.fullsize.progressive = true;
|
||||||
|
const { status } = await request(ctx.getHttpServer()).put('/system-config').send(config);
|
||||||
|
expect(status).toBe(200);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should reject invalid progressive value', async () => {
|
||||||
|
const config = _.cloneDeep(defaults);
|
||||||
|
(config.image.thumbnail.progressive as any) = 'invalid';
|
||||||
|
const { status, body } = await request(ctx.getHttpServer()).put('/system-config').send(config);
|
||||||
|
expect(status).toBe(400);
|
||||||
|
expect(body).toEqual(errorDto.badRequest(['image.thumbnail.progressive must be a boolean value']));
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -586,8 +586,8 @@ class SystemConfigGeneratedImageDto {
|
|||||||
@ApiProperty({ type: 'integer' })
|
@ApiProperty({ type: 'integer' })
|
||||||
size!: number;
|
size!: number;
|
||||||
|
|
||||||
@ValidateBoolean()
|
@ValidateBoolean({ optional: true, default: false })
|
||||||
progressive!: boolean;
|
progressive?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
class SystemConfigGeneratedFullsizeImageDto {
|
class SystemConfigGeneratedFullsizeImageDto {
|
||||||
@@ -604,8 +604,8 @@ class SystemConfigGeneratedFullsizeImageDto {
|
|||||||
@ApiProperty({ type: 'integer' })
|
@ApiProperty({ type: 'integer' })
|
||||||
quality!: number;
|
quality!: number;
|
||||||
|
|
||||||
@ValidateBoolean()
|
@ValidateBoolean({ optional: true, default: false })
|
||||||
progressive!: boolean;
|
progressive?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class SystemConfigImageDto {
|
export class SystemConfigImageDto {
|
||||||
|
|||||||
@@ -36,14 +36,14 @@ export type FullsizeImageOptions = {
|
|||||||
format: ImageFormat;
|
format: ImageFormat;
|
||||||
quality: number;
|
quality: number;
|
||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
progressive: boolean;
|
progressive?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type ImageOptions = {
|
export type ImageOptions = {
|
||||||
format: ImageFormat;
|
format: ImageFormat;
|
||||||
quality: number;
|
quality: number;
|
||||||
size: number;
|
size: number;
|
||||||
progressive: boolean;
|
progressive?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type RawImageInfo = {
|
export type RawImageInfo = {
|
||||||
|
|||||||
Reference in New Issue
Block a user