package main import ( "fmt" "log" "os" "github.com/gomodule/redigo/redis" "gopkg.in/yaml.v3" "riedstra.dev/mitch/go-website/page" ) var FeedPrefixDefault = ".feeds" type App struct { redisPool *redis.Pool RedisKey string ReIndexPath string StaticDirectory string BaseTemplate string DocumentSplit string Suffix string // Related to the Atom feed Title string Description string // aka, "subtitle" Author Author SiteURL string FeedId string //nolint Updated page.PageTime FeedPrefix string } func loadConf(fn string) (*App, error) { fh, err := os.Open(fn) if err != nil { return nil, fmt.Errorf("loading config: %w", err) } dec := yaml.NewDecoder(fh) app := &App{} err = dec.Decode(app) if err != nil { return nil, fmt.Errorf("decoding yaml: %w", err) } if app.StaticDirectory == "" { app.StaticDirectory = "static" } if app.FeedPrefix == "" { app.FeedPrefix = FeedPrefixDefault } if app.BaseTemplate != "" { page.BaseTemplate = app.BaseTemplate } if app.DocumentSplit != "" { page.DocumentSplit = app.DocumentSplit } if app.Suffix != "" { page.Suffix = app.Suffix } page.Global = map[string]interface{}{ "App": app, } return app, nil } // ClearRedis is a little helper function that allows us to easily clear // the redis cache at runtime. func (a *App) ClearRedis() error { if a.redisPool == nil { return nil } client := a.redisPool.Get() defer client.Close() _, err := client.Do("DEL", a.RedisKey) if err != nil { log.Println("Encountered error clearing redis cache: ", err) } return fmt.Errorf("clearing redis: %w", err) }