113 lines
1.9 KiB
Go
113 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"syscall"
|
|
)
|
|
|
|
func getExts(exts []Ext, path string, size int64) []Ext {
|
|
ext := filepath.Ext(path)
|
|
|
|
if ext == "" {
|
|
ext = "none"
|
|
}
|
|
for i := 0; i < len(exts); i++ {
|
|
if exts[i].ext == ext {
|
|
exts[i].size += size
|
|
exts[i].count++
|
|
return exts
|
|
}
|
|
}
|
|
exts = append(exts, Ext{ext: ext, size: size, count: 1})
|
|
return exts
|
|
}
|
|
|
|
func getFiles(d Dir) ([]File, error) {
|
|
f, err := os.ReadDir(d.path)
|
|
if err != nil {
|
|
printerr(err)
|
|
return nil, err
|
|
}
|
|
|
|
var files []File
|
|
for _, file := range f {
|
|
if exclude(filepath.Join(d.path, file.Name())) {
|
|
continue
|
|
}
|
|
if !file.IsDir() {
|
|
files = append(files, File{name: file.Name(), prev: &d, size: getSize(filepath.Join(d.path, file.Name()))})
|
|
}
|
|
}
|
|
return files, nil
|
|
}
|
|
|
|
func getItems(d Dir) []Item {
|
|
var items []Item
|
|
for _, dir := range d.dirs {
|
|
items = append(items, Item{isDir: true, dir: &dir})
|
|
}
|
|
files, err := getFiles(d)
|
|
if err != nil {
|
|
printerr(err)
|
|
return nil
|
|
}
|
|
for _, file := range files {
|
|
items = append(items, Item{isDir: false, file: &file})
|
|
}
|
|
return items
|
|
}
|
|
|
|
func getPos(p string, items []Item) int {
|
|
for i, item := range items {
|
|
if item.isDir {
|
|
if item.dir.path == p {
|
|
return i
|
|
}
|
|
}
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func getSize(path string) int64 {
|
|
file, err := os.Open(path)
|
|
if err != nil {
|
|
printerr(err)
|
|
return 0
|
|
}
|
|
defer file.Close()
|
|
|
|
info, err := file.Stat()
|
|
if err != nil {
|
|
printerr(err)
|
|
return 0
|
|
}
|
|
return info.Size()
|
|
}
|
|
|
|
func getDirMount(dir string) {
|
|
err := syscall.Statfs(dir, &config.dirMount)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
|
|
func (d Dir) recurse() []Item {
|
|
var items []Item
|
|
for _, dir := range d.dirs {
|
|
items = append(items, Item{isDir: true, dir: &dir})
|
|
items = append(items, dir.recurse()...)
|
|
}
|
|
files, err := getFiles(d)
|
|
if err != nil {
|
|
printerr(err)
|
|
return nil
|
|
}
|
|
for _, file := range files {
|
|
items = append(items, Item{isDir: false, file: &file})
|
|
}
|
|
return items
|
|
}
|