forked from wgroeneveld/go-jamming
40 lines
980 B
Go
40 lines
980 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)
|
|
|
|
sema := make(chan struct{}, 20)
|
|
results := make(chan *mf.IndiewebData, amountOfFiles)
|
|
|
|
for _, file := range info {
|
|
go func(fileName string) {
|
|
sema <- struct{}{}
|
|
defer func() { <-sema }()
|
|
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
|
|
}
|