mirror of
https://github.com/Octops/quake-kube.git
synced 2026-07-18 01:04:43 +00:00
Initial commit
This commit is contained in:
56
internal/quake/content/files.go
Normal file
56
internal/quake/content/files.go
Normal file
@ -0,0 +1,56 @@
|
||||
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)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user