feat: make progressive system config optional (#25486)

This commit is contained in:
Min Idzelis
2026-01-24 00:18:02 -05:00
committed by GitHub
parent ccc0961ba3
commit 7e5592fec5
7 changed files with 42 additions and 16 deletions

View File

@@ -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',
}; };
} }

View File

@@ -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',
}; };

View File

@@ -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"
], ],

View File

@@ -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;
}; };

View File

@@ -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']));
});
});
}); });
}); });

View File

@@ -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 {

View File

@@ -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 = {