mirror of
https://github.com/mickael-kerjean/filestash
synced 2025-12-16 05:18:38 +01:00
feature (static): add static tag
This commit is contained in:
parent
75fed64373
commit
9aba6316be
3 changed files with 54 additions and 7 deletions
|
|
@ -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])
|
||||
}
|
||||
|
|
|
|||
17
server/ctrl/static_withcgo.go
Normal file
17
server/ctrl/static_withcgo.go
Normal 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
|
||||
}
|
||||
24
server/ctrl/static_withoutcgo.go
Normal file
24
server/ctrl/static_withoutcgo.go
Normal 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("")
|
||||
}
|
||||
Loading…
Reference in a new issue