more fancy
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
@@ -12,6 +13,7 @@ import (
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"git.tornberg.me/go-cart-actor/pkg/actor"
|
||||
@@ -52,17 +54,41 @@ func isValidFileId(name string) (uint64, bool) {
|
||||
return 0, false
|
||||
}
|
||||
|
||||
func AccessTime(info os.FileInfo) (time.Time, bool) {
|
||||
switch stat := info.Sys().(type) {
|
||||
case *syscall.Stat_t:
|
||||
// Linux: Atim; macOS/BSD: Atimespec
|
||||
// Use reflection or build tags if naming differs.
|
||||
// Linux:
|
||||
if stat.Atim.Sec != 0 || stat.Atim.Nsec != 0 {
|
||||
return time.Unix(int64(stat.Atim.Sec), int64(stat.Atim.Nsec)), true
|
||||
}
|
||||
// macOS/BSD example (uncomment if needed):
|
||||
// return time.Unix(int64(stat.Atimespec.Sec), int64(stat.Atimespec.Nsec)), true
|
||||
}
|
||||
return time.Time{}, false
|
||||
}
|
||||
|
||||
func appendFileInfo(info fs.FileInfo, out *CartFileInfo) *CartFileInfo {
|
||||
sys := info.Sys()
|
||||
fmt.Printf("sys type %T", sys)
|
||||
out.Size = info.Size()
|
||||
out.Modified = info.ModTime()
|
||||
out.Accessed, _ = AccessTime(info)
|
||||
return out
|
||||
}
|
||||
|
||||
var cartFileRe = regexp.MustCompile(`^(\d+)\.events\.log$`)
|
||||
|
||||
func listCartFiles(dir string) ([]CartFileInfo, error) {
|
||||
func listCartFiles(dir string) ([]*CartFileInfo, error) {
|
||||
entries, err := os.ReadDir(dir)
|
||||
if err != nil {
|
||||
if errors.Is(err, os.ErrNotExist) {
|
||||
return []CartFileInfo{}, nil
|
||||
return []*CartFileInfo{}, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
out := make([]CartFileInfo, 0)
|
||||
out := make([]*CartFileInfo, 0)
|
||||
for _, e := range entries {
|
||||
if e.IsDir() {
|
||||
continue
|
||||
@@ -77,13 +103,10 @@ func listCartFiles(dir string) ([]CartFileInfo, error) {
|
||||
continue
|
||||
}
|
||||
info.Sys()
|
||||
out = append(out, CartFileInfo{
|
||||
ID: fmt.Sprintf("%d", id),
|
||||
CartId: cart.CartId(id),
|
||||
Size: info.Size(),
|
||||
Modified: info.ModTime(),
|
||||
System: info.Sys(),
|
||||
})
|
||||
out = append(out, appendFileInfo(info, &CartFileInfo{
|
||||
ID: fmt.Sprintf("%d", id),
|
||||
CartId: cart.CartId(id),
|
||||
}))
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user