move style hashing to file layer
1 file changed, 35 insertions(+), 1 deletion(-)
changed files
M internal/storage/file.go → internal/storage/file.go
@@ -2,7 +2,12 @@ package storage import ( "io" + "strings" "time" + + "gitlab.com/tozd/go/errors" + "go.alanpearce.eu/homestead/internal/buffer" + "go.alanpearce.eu/homestead/internal/builder/template" ) type File struct {@@ -10,7 +15,8 @@ Path string ContentType string LastModified time.Time Etag string - Encodings map[string]io.ReadSeeker + StyleHash string + Encodings map[string]*buffer.Buffer } func (f *File) AvailableEncodings() []string {@@ -21,3 +27,31 @@ } return encs } + +func (f *File) CalculateStyleHash() (err error) { + buf := f.Encodings["identity"] + if buf == nil { + return errors.New("buffer not initialised") + } + _, err = buf.Seek(0, io.SeekStart) + if err != nil { + return errors.WithMessage(err, "could not seek buffer") + } + + mime, _, _ := strings.Cut(f.ContentType, ";") + switch mime { + case "text/html": + f.StyleHash, err = template.GetHTMLStyleHash(buf) + if err != nil { + return errors.WithMessage(err, "could not calculate HTML style hash") + } + default: + return + } + _, err = buf.Seek(0, io.SeekStart) + if err != nil { + return errors.WithMessage(err, "could not seek buffer") + } + + return +}