Files
pat/pkg/cat/read.go
2025-05-07 14:30:59 +02:00

98 lines
1.4 KiB
Go

package cat
import (
"bufio"
"io"
"os"
"path"
"strings"
)
var INVALID_SUFFIXES = []string{
"png",
"jpg",
"jpeg",
"webp",
"ico",
"ttf",
}
func (c Cater) dir(dir string) (e entry, err error) {
files, err := os.ReadDir(dir)
if err != nil {
return
}
e.fqname = dir
e.name = name(dir)
e.children = []entry{}
for _, file := range files {
i, err := file.Info()
if err != nil {
return e, err
}
path := path.Join(dir, i.Name())
var ent entry
if !file.IsDir() {
if !validSuffix(file.Name()) {
continue
}
ent, err = c.file(path)
} else {
ent, err = c.dir(path)
}
if err != nil {
return e, err
}
e.children = append(e.children, ent)
}
return
}
func (c Cater) file(filePath string) (e entry, err error) {
file, err := os.Open(filePath)
if err != nil {
return
}
defer file.Close()
// read file into strings.Builder
var sb strings.Builder
reader := bufio.NewReader(file)
for {
line, err := reader.ReadString('\n')
if err != nil && err != io.EOF {
return e, err
}
sb.WriteString(line)
if err == io.EOF {
break
}
}
e.fqname = filePath
e.name = name(filePath)
e.content = sb.String()
e.children = []entry{}
return
}
func name(name string) string {
ps := strings.Split(name, "/")
return ps[len(ps)-1]
}
func validSuffix(name string) bool {
for _, s := range INVALID_SUFFIXES {
if strings.HasSuffix(name, s) {
return false
}
}
return true
}