45f1a34018
Signed-off-by: Michael Mayer <michael@lastzero.net>
65 lines
1.3 KiB
Go
65 lines
1.3 KiB
Go
package fs
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type FileInfo struct {
|
|
Name string `json:"name"`
|
|
Abs string `json:"abs"`
|
|
Size int64 `json:"size"`
|
|
Date time.Time `json:"date"`
|
|
Dir bool `json:"dir"`
|
|
}
|
|
|
|
func NewFileInfo(info os.FileInfo, dir string) FileInfo {
|
|
if dir != PathSeparator && len(dir) > 0 {
|
|
if dir[len(dir)-1:] == PathSeparator {
|
|
dir = dir[:len(dir)-1]
|
|
}
|
|
|
|
if dir[0:1] != PathSeparator {
|
|
dir = PathSeparator + dir
|
|
}
|
|
} else {
|
|
dir = PathSeparator
|
|
}
|
|
|
|
result := FileInfo{
|
|
Name: info.Name(),
|
|
Abs: filepath.Join(dir, info.Name()),
|
|
Size: info.Size(),
|
|
Date: info.ModTime(),
|
|
Dir: info.IsDir(),
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
type FileInfos []FileInfo
|
|
|
|
func (infos FileInfos) Len() int { return len(infos) }
|
|
func (infos FileInfos) Swap(i, j int) { infos[i], infos[j] = infos[j], infos[i] }
|
|
func (infos FileInfos) Less(i, j int) bool {
|
|
return strings.Compare(infos[i].Abs, infos[j].Abs) == -1
|
|
}
|
|
func (infos FileInfos) Abs() (result []string) {
|
|
for _, info := range infos {
|
|
result = append(result, info.Abs)
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func NewFileInfos(infos []os.FileInfo, dir string) FileInfos {
|
|
var result FileInfos
|
|
|
|
for _, info := range infos {
|
|
result = append(result, NewFileInfo(info, dir))
|
|
}
|
|
|
|
return result
|
|
}
|