From a1f8f5744729510c3cb1d1f60666c40258b6c39d Mon Sep 17 00:00:00 2001 From: lifegpc Date: Thu, 24 Oct 2024 06:12:28 +0000 Subject: [PATCH] add thumbnail format settings --- lib/api/config.dart | 12 ++++++++++++ lib/api/config.g.dart | 12 +++++++++++- lib/l10n/app_en.arb | 4 +++- lib/l10n/app_zh.arb | 4 +++- lib/pages/settings/server.dart | 21 +++++++++++++++++++++ 5 files changed, 50 insertions(+), 3 deletions(-) diff --git a/lib/api/config.dart b/lib/api/config.dart index daa70e2..43b6b14 100644 --- a/lib/api/config.dart +++ b/lib/api/config.dart @@ -11,6 +11,13 @@ enum ThumbnailMethod { ffmpegApi, } +enum ThumbnailFormat { + @JsonValue(0) + jpeg, + @JsonValue(1) + webp, +} + enum ImportMethod { @JsonValue(0) copy, @@ -75,6 +82,7 @@ class Config { required this.importMethod, required this.maxImportImgCount, required this.enableServerTiming, + required this.thumbnailFormat, }); bool cookies; @JsonKey(name: 'db_path') @@ -141,6 +149,8 @@ class Config { int maxImportImgCount; @JsonKey(name: 'enable_server_timing') bool enableServerTiming; + @JsonKey(name: 'thumbnail_format') + ThumbnailFormat thumbnailFormat; factory Config.fromJson(Map json) => _$ConfigFromJson(json); Map toJson() => _$ConfigToJson(this); } @@ -262,6 +272,8 @@ class ConfigOptional { int? maxImportImgCount; @JsonKey(name: 'enable_server_timing') bool? enableServerTiming; + @JsonKey(name: 'thumbnail_format') + ThumbnailFormat? thumbnailFormat; factory ConfigOptional.fromJson(Map json) => _$ConfigOptionalFromJson(json); Map toJson() => _$ConfigOptionalToJson(this); diff --git a/lib/api/config.g.dart b/lib/api/config.g.dart index 82913d9..3212408 100644 --- a/lib/api/config.g.dart +++ b/lib/api/config.g.dart @@ -49,6 +49,8 @@ Config _$ConfigFromJson(Map json) => Config( importMethod: $enumDecode(_$ImportMethodEnumMap, json['import_method']), maxImportImgCount: (json['max_import_img_count'] as num).toInt(), enableServerTiming: json['enable_server_timing'] as bool, + thumbnailFormat: + $enumDecode(_$ThumbnailFormatEnumMap, json['thumbnail_format']), ); Map _$ConfigToJson(Config instance) => { @@ -88,6 +90,7 @@ Map _$ConfigToJson(Config instance) => { 'import_method': _$ImportMethodEnumMap[instance.importMethod]!, 'max_import_img_count': instance.maxImportImgCount, 'enable_server_timing': instance.enableServerTiming, + 'thumbnail_format': _$ThumbnailFormatEnumMap[instance.thumbnailFormat]!, }; const _$ThumbnailMethodEnumMap = { @@ -102,6 +105,11 @@ const _$ImportMethodEnumMap = { ImportMethod.keep: 3, }; +const _$ThumbnailFormatEnumMap = { + ThumbnailFormat.jpeg: 0, + ThumbnailFormat.webp: 1, +}; + UpdateConfigResult _$UpdateConfigResultFromJson(Map json) => UpdateConfigResult( isUnsafe: json['is_unsafe'] as bool, @@ -157,7 +165,8 @@ ConfigOptional _$ConfigOptionalFromJson(Map json) => $enumDecodeNullable(_$ImportMethodEnumMap, json['import_method']), maxImportImgCount: (json['max_import_img_count'] as num?)?.toInt(), enableServerTiming: json['enable_server_timing'] as bool?, - ); + )..thumbnailFormat = + $enumDecodeNullable(_$ThumbnailFormatEnumMap, json['thumbnail_format']); Map _$ConfigOptionalToJson(ConfigOptional instance) => { @@ -197,4 +206,5 @@ Map _$ConfigOptionalToJson(ConfigOptional instance) => 'import_method': _$ImportMethodEnumMap[instance.importMethod], 'max_import_img_count': instance.maxImportImgCount, 'enable_server_timing': instance.enableServerTiming, + 'thumbnail_format': _$ThumbnailFormatEnumMap[instance.thumbnailFormat], }; diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index e05ccb9..3e8fd18 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -331,5 +331,7 @@ "updateTagTranslation": "Update tag's translation", "createUpdateTagTranslationTask": "Create update tag's translation task", "translationFile": "Tnanslation file", - "translationFileHelp": "The path to json file contains tag's translation. Will download from website if this is empty." + "translationFileHelp": "The path to json file contains tag's translation. Will download from website if this is empty.", + "thumbnailFormat": "Thumbnail format", + "thumbnailFormatHelp": "Webp is not supported in ffmpeg API method." } diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index 16e43d8..9200b87 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -331,5 +331,7 @@ "updateTagTranslation": "更新标签的翻译", "createUpdateTagTranslationTask": "创建更新标签翻译的任务", "translationFile": "翻译文件", - "translationFileHelp": "包含标签翻译的JSON文件路径。未指定时将从网站上下载。" + "translationFileHelp": "包含标签翻译的JSON文件路径。未指定时将从网站上下载。", + "thumbnailFormat": "缩略图格式", + "thumbnailFormatHelp": "ffmpeg API方式不支持webp格式。" } diff --git a/lib/pages/settings/server.dart b/lib/pages/settings/server.dart index 6913db2..1238920 100644 --- a/lib/pages/settings/server.dart +++ b/lib/pages/settings/server.dart @@ -787,6 +787,27 @@ class _ServerSettingsPage extends State }); }, )), + _buildWithVecticalPadding(DropdownButtonFormField( + items: ThumbnailFormat.values + .map((e) => DropdownMenuItem( + value: e, + child: Text( + e.toString().replaceFirst("ThumbnailFormat.", "")))) + .toList(), + onChanged: (v) { + if (v != null) { + setState(() { + _now.thumbnailFormat = v; + _changed = true; + }); + } + }, + value: _now.thumbnailFormat ?? _config!.thumbnailFormat, + decoration: InputDecoration( + border: const OutlineInputBorder(), + labelText: i18n.thumbnailFormat, + helperText: i18n.thumbnailFormatHelp, + ))), ])); }