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

62 lines
1.2 KiB
Go

package files
import (
"io/ioutil"
"net/url"
"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, urlBase string) (entries []DirEntry, stats DirStats, err error) {
var dirEntries []DirEntry = make([]DirEntry, 0)
var fileEntries []DirEntry = make([]DirEntry, 0)
var totalFilesSize int64 = 0
dir, err := ioutil.ReadDir(path)
for _, entry := range dir {
if entry.IsDir() {
dirEntries = append(dirEntries, DirEntry{
Name: entry.Name(),
Link: url.PathEscape(entry.Name()) + "/",
Datetime: entry.ModTime(),
Size: "DIR",
})
stats.Directories++
} else {
_, _, sz := convertFileSize(entry.Size())
fileEntries = append(fileEntries, DirEntry{
Name: entry.Name(),
Link: "/file" + urlBase + url.PathEscape(entry.Name()),
Datetime: entry.ModTime(),
Size: sz,
})
totalFilesSize += entry.Size()
stats.Files++
}
}
_, _, sz := convertFileSize(totalFilesSize)
stats.FilesSize = sz
entries = append(entries, dirEntries...)
entries = append(entries, fileEntries...)
return
}