go-jamming/app/webmention/load/loader.go

36 lines
895 B
Go

package load
import (
"brainbaking.com/go-jamming/app/mf"
"io/ioutil"
"path"
)
// FromDisk assumes that params have already been validated.
func FromDisk(domain string, dataPath string) mf.IndiewebDataResult {
loadPath := path.Join(dataPath, domain)
info, _ := ioutil.ReadDir(loadPath)
amountOfFiles := len(info)
results := make(chan *mf.IndiewebData, amountOfFiles)
for _, file := range info {
go func(fileName string) {
results <- mf.RequireFromFile(path.Join(loadPath, fileName))
}(file.Name())
}
indiewebResults := gather(amountOfFiles, results)
return mf.WrapResult(indiewebResults)
}
func gather(amount int, results <-chan *mf.IndiewebData) []*mf.IndiewebData {
var indiewebResults []*mf.IndiewebData
for i := 0; i < amount; i++ {
result := <-results
if !result.IsEmpty() {
indiewebResults = append(indiewebResults, result)
}
}
return indiewebResults
}