main.go
Rama master · réplica de lectura del repositorio original.
package main
import (
"flag"
"fmt"
"os"
"github.com/dominicgisler/imap-spam-cleaner/app"
"github.com/dominicgisler/imap-spam-cleaner/database"
"github.com/dominicgisler/imap-spam-cleaner/handler"
"github.com/dominicgisler/imap-spam-cleaner/inbox"
"github.com/dominicgisler/imap-spam-cleaner/logx"
"github.com/dominicgisler/imap-spam-cleaner/provider"
)
const appName = "imap-spam-cleaner"
var version = "dev"
var options app.Options
func init() {
var v bool
flag.BoolVar(&v, "version", false, "Show short version")
flag.BoolVar(&options.RunNow, "now", false, "Run all inboxes once immediately, ignoring schedule")
flag.BoolVar(&options.AnalyzeOnly, "analyze-only", false, "Only analyze emails, do not move or delete them")
flag.Parse()
if v {
fmt.Printf("%s %s\n", appName, version)
os.Exit(0)
}
}
func main() {
logx.Infof("Starting %s %s", appName, version)
c, err := app.LoadConfig()
if err != nil {
logx.Errorf("Could not load config: %v", err)
return
}
if err = database.Init("store.db"); err != nil {
logx.Errorf("Could not init database: %v", err)
}
ctx := app.Context{
Config: c,
Options: options,
}
var p provider.Provider
for name, prov := range c.Providers {
p, err = provider.New(prov.Type)
if err != nil {
logx.Errorf("Could not load provider: %v\n", err)
return
}
if err = p.ValidateConfig(prov.Config); err != nil {
logx.Errorf("Invalid config for provider %s: %v\n", name, err)
return
}
}
if ctx.Options.RunNow {
logx.Info("Running all inboxes once immediately")
inbox.RunAllInboxes(ctx)
return
}
go func() {
if err = handler.ListenAndServe(); err != nil {
logx.Errorf("Error starting handler: %v", err)
}
}()
inbox.Schedule(ctx)
}