Files
quake-kube/internal/quake/content/files.go
Chris Marshall ffca54fdb8 Initial commit
2020-08-02 13:46:12 -04:00

57 lines
1.1 KiB
Go

package content
import (
"hash/crc32"
"io/ioutil"
"os"
"path/filepath"
"strings"
)
type File struct {
Name string `json:"name"`
Compressed int64 `json:"compressed"`
Checksum uint32 `json:"checksum"`
}
func getAssets(dir string) (files []*File, err error) {
err = walk(dir, func(path string, info os.FileInfo, err error) error {
data, err := ioutil.ReadFile(path)
if err != nil {
return err
}
n := crc32.ChecksumIEEE(data)
path = strings.TrimPrefix(path, dir+"/")
files = append(files, &File{path, info.Size(), n})
return nil
}, ".pk3", ".sh", ".run")
return
}
func hasExts(path string, exts ...string) bool {
for _, ext := range exts {
if strings.HasSuffix(path, ext) {
return true
}
}
return false
}
func walk(root string, walkFn filepath.WalkFunc, exts ...string) error {
return filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if err != nil {
if os.IsPermission(err) {
return nil
}
return err
}
if !hasExts(path, exts...) {
return nil
}
if info.IsDir() {
return nil
}
return walkFn(path, info, err)
})
}