moth/cmd/mothd/mothballs.go

61 lines
1.2 KiB
Go
Raw Normal View History

2019-09-02 19:47:24 -06:00
package main
import (
2020-02-22 15:49:58 -07:00
"github.com/spf13/afero"
"io"
2020-02-29 22:37:22 -07:00
"log"
"strings"
2019-09-02 19:47:24 -06:00
)
type Mothballs struct {
categories map[string]*Zipfs
afero.Fs
2019-09-02 19:47:24 -06:00
}
2020-02-22 15:49:58 -07:00
func NewMothballs(fs afero.Fs) *Mothballs {
2019-09-02 19:47:24 -06:00
return &Mothballs{
2020-02-29 22:37:22 -07:00
Fs: fs,
2019-09-02 19:47:24 -06:00
categories: make(map[string]*Zipfs),
}
}
func (m *Mothballs) Metadata(cat string, points int) (io.ReadCloser, error) {
f, err := m.Fs.Open("/dev/null")
return f, err
}
func (m *Mothballs) Open(cat string, points int, filename string) (io.ReadCloser, error) {
f, err := m.Fs.Open("/dev/null")
return f, err
}
func (m *Mothballs) Inventory() []Category {
return []Category{}
}
func (m *Mothballs) Update() {
2019-09-02 19:47:24 -06:00
// Any new categories?
files, err := afero.ReadDir(m.Fs, "/")
2019-09-02 19:47:24 -06:00
if err != nil {
log.Print("Error listing mothballs: ", err)
return
}
for _, f := range files {
filename := f.Name()
if !strings.HasSuffix(filename, ".mb") {
continue
}
categoryName := strings.TrimSuffix(filename, ".mb")
if _, ok := m.categories[categoryName]; !ok {
zfs, err := OpenZipfs(m.Fs, filename)
2019-09-02 19:47:24 -06:00
if err != nil {
log.Print("Error opening ", filename, ": ", err)
2019-09-02 19:47:24 -06:00
continue
}
log.Print("New mothball: ", filename)
m.categories[categoryName] = zfs
}
}
}