feature (static): add static tag

This commit is contained in:
MickaelK 2025-12-08 16:14:10 +11:00
parent 75fed64373
commit 9aba6316be
3 changed files with 54 additions and 7 deletions

View file

@ -21,7 +21,6 @@ import (
. "github.com/mickael-kerjean/filestash/server/common"
"github.com/bluekeyes/go-gitdiff/gitdiff"
"github.com/google/brotli/go/cbrotli"
)
var (
@ -404,10 +403,11 @@ var preload = [][]string{
func ServeBundle() func(*App, http.ResponseWriter, *http.Request) {
isDebug := os.Getenv("DEBUG") == "true"
buildChunks := func(quality int) (chunks [][]byte, chunksBr [][]byte, etags []string) {
buildChunks := func(quality int) (chunks [][]byte, chunksBr [][]byte, chunksGzip [][]byte, etags []string) {
numChunks := len(preload)
chunks = make([][]byte, numChunks+1)
chunksBr = make([][]byte, numChunks+1)
chunksGzip = make([][]byte, numChunks+1)
etags = make([]string, numChunks+1)
var fullBuf bytes.Buffer
for i := 0; i < numChunks; i++ {
@ -438,24 +438,26 @@ func ServeBundle() func(*App, http.ResponseWriter, *http.Request) {
fullBuf.WriteString(line)
}
chunks[i+1] = chunkBuf.Bytes()
chunksBr[i+1], _ = cbrotli.Encode(chunks[i+1], cbrotli.WriterOptions{Quality: quality})
chunksGzip[i+1] = compressGzip(chunks[i+1], quality)
chunksBr[i+1] = compressBr(chunks[i+1], quality)
etags[i+1] = QuickHash(string(chunks[i+1]), 10)
}
chunks[0] = fullBuf.Bytes()
chunksBr[0], _ = cbrotli.Encode(chunks[0], cbrotli.WriterOptions{Quality: quality})
chunksGzip[0] = compressGzip(chunks[0], quality)
chunksBr[0] = compressBr(chunks[0], quality)
etags[0] = QuickHash(string(chunks[0]), 10)
return chunks, chunksBr, etags
return chunks, chunksBr, chunksGzip, etags
}
quality := 11
if isDebug {
quality = 8
}
chunks, chunksBr, etags := buildChunks(quality)
chunks, chunksBr, chunksGzip, etags := buildChunks(quality)
return func(ctx *App, res http.ResponseWriter, req *http.Request) {
if isDebug {
chunks, chunksBr, etags = buildChunks(quality)
chunks, chunksBr, chunksGzip, etags = buildChunks(quality)
}
chunkIndex := 0
if parsed, err := strconv.Atoi(req.URL.Query().Get("chunk")); err == nil {
@ -476,6 +478,10 @@ func ServeBundle() func(*App, http.ResponseWriter, *http.Request) {
head.Set("Content-Encoding", "br")
res.Write(chunksBr[chunkIndex])
return
} else if strings.Contains(req.Header.Get("Accept-Encoding"), "gzip") && len(chunksGzip[chunkIndex]) > 0 {
head.Set("Content-Encoding", "gzip")
res.Write(chunksGzip[chunkIndex])
return
}
res.Write(chunks[chunkIndex])
}

View file

@ -0,0 +1,17 @@
//go:build !static
// +build !static
package ctrl
import (
"github.com/google/brotli/go/cbrotli"
)
func compressGzip(content []byte, quality int) []byte {
return []byte{}
}
func compressBr(content []byte, quality int) []byte {
out, _ := cbrotli.Encode(content, cbrotli.WriterOptions{Quality: quality})
return out
}

View file

@ -0,0 +1,24 @@
//go:build static
// +build static
package ctrl
import (
"bytes"
"compress/gzip"
)
func compressGzip(content []byte, quality int) []byte {
var buf bytes.Buffer
gz, err := gzip.NewWriterLevel(&buf, quality)
if err != nil {
gz = gzip.NewWriter(&buf)
}
_, _ = gz.Write(content)
gz.Close()
return buf.Bytes()
}
func compressBr(content []byte, quality int) []byte {
return []byte("")
}