feat(编辑能力): 修复附件误改,优化压缩扫描
build.yaml / build (push) Successful in 46s

This commit is contained in:
xiaoqidun committed 2026-10-11 11:24:44 +08:00
1 parent 6a9d2a12eb
commit a3098212eb
4 files changed
+198 -95

No files matched your search

+7 -50
View File
@@ -20,7 +20,6 @@ import (
"encoding/xml"
"fmt"
"image"
"io"
"maps"
"path"
"slices"
@@ -73,12 +72,6 @@ func (e *Editor) compressResourceReferences(parts map[string][]byte, reader *Rea
}
return reader.readFileView(name)
}
refs := editorResourceRefs{ids: make(map[string]bool), files: make(map[string]bool), fonts: make(map[string]*editorFontUsage)}
var fontReferences map[string]*editorResourceRefs
if reader != nil && reader.DocumentCount() > 1 && e.backends.FontResources != nil {
fontReferences = make(map[string]*editorResourceRefs)
}
var resources []string
actual := make(map[string]string)
for _, name := range slices.Sorted(maps.Keys(names)) {
if err := e.output.ctx.Err(); err != nil {
@@ -86,6 +79,7 @@ func (e *Editor) compressResourceReferences(parts map[string][]byte, reader *Rea
}
key := cleanPackagePath(name)
if removed[key] || strings.HasSuffix(name, "/") {
delete(names, name)
continue
}
if prior, ok := actual[key]; ok && prior != name {
@@ -93,51 +87,14 @@ func (e *Editor) compressResourceReferences(parts map[string][]byte, reader *Rea
}
actual[key] = name
if scope != nil && !scope[key] {
delete(names, name)
continue
}
data, replaced := parts[name]
if known, ok := generated[name]; ok && replaced && known.refs != nil && known.matches(data) {
refs.merge(known.refs)
if fontReferences != nil && len(known.refs.fonts) != 0 {
fontReferences[name] = known.refs
}
continue
}
var input io.ReadCloser
if replaced {
if known := generated[name]; data == nil && known.staged != nil {
input = known.staged.open()
} else {
input = io.NopCloser(bytes.NewReader(data))
}
} else {
var err error
input, err = reader.openFile(name)
if err != nil {
return err
}
}
scanned := &refs
if fontReferences != nil {
scanned = &editorResourceRefs{ids: make(map[string]bool), files: make(map[string]bool), fonts: make(map[string]*editorFontUsage)}
}
resource, safe := scanned.scan(imageInput{ReadCloser: input, context: e.output.ctx}, name)
input.Close()
if err := e.output.ctx.Err(); err != nil {
return err
}
if !safe {
return nil
}
if fontReferences != nil {
if resource || len(scanned.fonts) != 0 {
fontReferences[name] = scanned
}
refs.merge(scanned)
}
if resource {
resources = append(resources, name)
}
}
collect := reader != nil && reader.DocumentCount() > 1 && e.backends.FontResources != nil
refs, resources, fontReferences, safe, err := scanEditorResources(e.output.ctx, reader, parts, generated, names, nil, collect)
if err != nil || !safe {
return err
}
type resourceFile struct{ key, role string }
files := make(map[resourceFile]bool)