86 lines
1.4 KiB
Go
86 lines
1.4 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 getItems(d Dir) []Item {
|
|
var items []Item
|
|
for _, dir := range d.dirs {
|
|
items = append(items, Item{isDir: true, dir: &dir})
|
|
}
|
|
files := d.files
|
|
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 recurse(d Dir) []Item {
|
|
var items []Item
|
|
for _, dir := range d.dirs {
|
|
items = append(items, Item{isDir: true, dir: &dir})
|
|
items = append(items, recurse(dir)...)
|
|
}
|
|
files := d.files
|
|
for _, file := range files {
|
|
items = append(items, Item{isDir: false, file: &file})
|
|
}
|
|
return items
|
|
}
|