package main import ( "errors" "local/storage" "local/truckstop/broker" "local/truckstop/config" "log" "time" ) func main() { go func() { email() c := time.NewTicker(time.Minute) for range c.C { if err := email(); err != nil { log.Print(err) } } }() if err := _main(); err != nil { panic(err) } } func email() error { ch, err := config.Get().Emailer.ReadIMAP() if err != nil { return err } for email := range ch { log.Printf("%+v", email) } return errors.New("not impl") } func _main() error { for { if err := config.Refresh(); err != nil { return err } if err := once(); err != nil { return err } if config.Get().Once { break } time.Sleep(config.Get().Interval.Get()) } return nil } func once() error { alljobs, err := getJobs() if err != nil { return err } newjobs, err := dropStaleJobs(alljobs) if err != nil { return err } jobs, err := dropBanlistJobs(newjobs) if err != nil { return err } for i := range jobs { if err := sendJob(jobs[i]); err != nil { return err } if err := config.Get().DB().Set(jobs[i].ID, []byte(`sent`)); err != nil { return err } } return nil } func getJobs() ([]broker.Job, error) { states := config.Get().States ntg := broker.NewNTGVision() if config.Get().Brokers.NTG.Mock { ntg = ntg.WithMock() } brokers := []broker.Broker{ntg} jobs := []broker.Job{} for _, broker := range brokers { somejobs, err := broker.Search(states) if err != nil { return nil, err } jobs = append(jobs, somejobs...) } return jobs, nil } func dropStaleJobs(jobs []broker.Job) ([]broker.Job, error) { db := config.Get().DB() for i := len(jobs) - 1; i >= 0; i-- { if _, err := db.Get(jobs[i].ID); err == storage.ErrNotFound { } else if err != nil { return nil, err } else { jobs = append(jobs[:i], jobs[i+1:]...) } } return jobs, nil } func dropBanlistJobs(jobs []broker.Job) ([]broker.Job, error) { // TODO return jobs, nil } func sendJob(job broker.Job) error { // TODO log.Printf("found job: %s", job) return nil }