fix(app): 前台图片模型 - 分辨率档位与各供应线路取并集 (#518)
This commit is contained in:
@@ -280,23 +280,21 @@ func capabilitySpecWithRoutePresets(spec CapabilitySpec, routes []CapabilitySpec
|
||||
}
|
||||
result.Options[name] = OptionConstraint{Values: values}
|
||||
}
|
||||
if result.ImageSize == nil || result.ImageSize.Parameter == "" || len(result.ImageSize.Presets) == 0 {
|
||||
if merged := mergeCapabilityImageSize(append([]CapabilitySpec{spec}, routes...)); merged != nil {
|
||||
if result.ImageSize == nil {
|
||||
result.ImageSize = merged
|
||||
} else {
|
||||
restored := *result.ImageSize
|
||||
if restored.Parameter == "" {
|
||||
restored.Parameter = merged.Parameter
|
||||
}
|
||||
if !restored.AllowCustom {
|
||||
restored.AllowCustom = merged.AllowCustom
|
||||
}
|
||||
if len(restored.Presets) == 0 {
|
||||
restored.Presets = merged.Presets
|
||||
}
|
||||
result.ImageSize = &restored
|
||||
// 前台规格里的预设可能只来自单条线路的快照(后续新增的供应线路还没同步进来),
|
||||
// 因此不管自身是否已有预设都要与各线路取并集,否则多档会被压成单档。
|
||||
if merged := mergeCapabilityImageSize(append([]CapabilitySpec{spec}, routes...)); merged != nil {
|
||||
if result.ImageSize == nil {
|
||||
result.ImageSize = merged
|
||||
} else {
|
||||
restored := *result.ImageSize
|
||||
if restored.Parameter == "" {
|
||||
restored.Parameter = merged.Parameter
|
||||
}
|
||||
if !restored.AllowCustom {
|
||||
restored.AllowCustom = merged.AllowCustom
|
||||
}
|
||||
restored.Presets = merged.Presets
|
||||
result.ImageSize = &restored
|
||||
}
|
||||
}
|
||||
return result
|
||||
|
||||
@@ -26,6 +26,40 @@ func TestCapabilitySpecWithRoutePresetsRestoresImageSize(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestCapabilitySpecWithRoutePresetsUnionsTiersAcrossRoutes(t *testing.T) {
|
||||
// 前台快照只带了单条线路的 1K 预设,其它线路提供 2K/4K:必须取并集,不能压成单档。
|
||||
preset := func(size string, tier string, width int, height int) CapabilityImageSizePreset {
|
||||
return CapabilityImageSizePreset{Size: size, Tier: tier, Ratio: "16:9", Width: width, Height: height}
|
||||
}
|
||||
product := CapabilitySpec{
|
||||
Version: 1,
|
||||
Capability: "image",
|
||||
Options: map[string]OptionConstraint{"size": {Values: []any{"16:9"}}},
|
||||
ImageSize: &CapabilityImageSize{
|
||||
Parameter: "aspect_ratio",
|
||||
Presets: []CapabilityImageSizePreset{preset("1824x1024", "1k", 1824, 1024)},
|
||||
},
|
||||
}
|
||||
routes := []CapabilitySpec{
|
||||
{Version: 1, Capability: "image", ImageSize: &CapabilityImageSize{Parameter: "aspect_ratio", Presets: []CapabilityImageSizePreset{preset("2752x1536", "2k", 2752, 1536)}}},
|
||||
{Version: 1, Capability: "image", ImageSize: &CapabilityImageSize{Parameter: "aspect_ratio", Presets: []CapabilityImageSizePreset{preset("3840x2160", "4k", 3840, 2160)}}},
|
||||
}
|
||||
|
||||
got := capabilitySpecWithRoutePresets(product, routes)
|
||||
if got.ImageSize == nil {
|
||||
t.Fatal("imageSize = nil")
|
||||
}
|
||||
tiers := make(map[string]bool, len(got.ImageSize.Presets))
|
||||
for _, item := range got.ImageSize.Presets {
|
||||
tiers[item.Tier] = true
|
||||
}
|
||||
for _, tier := range []string{"1k", "2k", "4k"} {
|
||||
if !tiers[tier] {
|
||||
t.Fatalf("tier %s missing: %#v", tier, got.ImageSize.Presets)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestMatchCapabilityRoutesTextImagesOnlyToDeclaredProfiles(t *testing.T) {
|
||||
plainText := CapabilitySpec{
|
||||
Version: 1,
|
||||
|
||||
Reference in New Issue
Block a user