fix metadata generator

This commit is contained in:
ston1th 2022-04-07 17:11:30 +02:00
commit 3e765a7943
4 changed files with 94 additions and 25 deletions

View file

@ -37,13 +37,15 @@ type MetadataHandler struct {
enc *json.Encoder
}
func MetadataGenerator(file string, dst provider.FS) error {
func MetadataGenerator(file string, dst provider.FS, fstat, encrypted bool) error {
if !filepath.IsAbs(file) {
return errors.New("metadata path is not absolute")
}
_, err := dst.Fstat(0)
if err == provider.ErrFstat {
return err
if fstat {
_, err := dst.Fstat(0)
if err == provider.ErrFstat {
return err
}
}
f, err := os.OpenFile(file, os.O_RDWR|os.O_CREATE, 0o640)
if err != nil {
@ -56,7 +58,11 @@ func MetadataGenerator(file string, dst provider.FS) error {
}
enc := json.NewEncoder(f)
md := make(map[string]*Metadata)
fs.WalkDir(provider.WalkFS(dst), ".", func(path string, d stdfs.DirEntry, err error) error {
base := "."
if encrypted {
base = ""
}
fs.WalkDir(provider.WalkFS(dst), base, func(path string, d stdfs.DirEntry, err error) error {
if err != nil {
return nil
}
@ -74,11 +80,18 @@ func MetadataGenerator(file string, dst provider.FS) error {
return nil
}
size := fi.Size()
blocks, err := dst.Fstat(f.Fd())
if err != nil {
return nil
}
if size <= blocks*512 {
if fstat {
blocks, err := dst.Fstat(f.Fd())
if err != nil {
return nil
}
if size <= blocks*512 {
md[strings.TrimPrefix(path, dst.Root())] = &Metadata{
Size: size,
Chunks: chunk.Chunks{{0, size}},
}
}
} else {
md[strings.TrimPrefix(path, dst.Root())] = &Metadata{
Size: size,
Chunks: chunk.Chunks{{0, size}},