better suffix check
This commit is contained in:
97
pkg/cat/read.go
Normal file
97
pkg/cat/read.go
Normal file
@ -0,0 +1,97 @@
|
||||
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
|
||||
}
|
Reference in New Issue
Block a user