1
0
Fork 0
dwelling-files/pkg/files/files.go

69 lines
1.3 KiB
Go

package files
import (
"io/fs"
"net/url"
"path/filepath"
"time"
)
const FileDateFormat = "2006-01-02 15:04:05 MST"
type DirStats struct {
Files int64
FilesSize string
Directories int64
}
type DirEntry struct {
Name string
Link string
Datetime time.Time
Size string
}
func ScanDirectory(path string) (entries []DirEntry, stats DirStats, err error) {
var dirEntries []DirEntry = make([]DirEntry, 0)
var fileEntries []DirEntry = make([]DirEntry, 0)
var totalFilesSize int64 = 0
if err = filepath.Walk(path, func(path string, info fs.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
dirEntries = append(dirEntries, DirEntry{
Name: info.Name(),
Link: url.PathEscape("/files"),
Datetime: info.ModTime(),
Size: "DIR",
})
stats.Directories++
} else {
_, _, sz := convertFileSize(info.Size())
fileEntries = append(fileEntries, DirEntry{
Name: info.Name(),
Link: url.PathEscape("/files"),
Datetime: info.ModTime(),
Size: sz,
})
totalFilesSize += info.Size()
stats.Files++
}
return nil
}); err != nil {
return
}
_, _, sz := convertFileSize(totalFilesSize)
stats.FilesSize = sz
entries = append(entries, dirEntries...)
entries = append(entries, fileEntries...)
return
}