package caddyhugo import ( "fmt" "time" "github.com/gohugoio/hugo/deps" "github.com/gohugoio/hugo/hugofs" "github.com/gohugoio/hugo/hugolib" "github.com/spf13/afero" "git.stephensearles.com/stephen/idleshut" ) const ( IdleWebsocketTimeout = 10 * time.Minute WebsocketFileTicker = 1 * time.Second ) type HugoInteractor interface { Render(srcdir, workdir string) HugoRenderer } type HugoRenderer interface { WriteContent(contents string) error Start() error Stop() error } func HugoCmdProcessConfig(ch *CaddyHugo, es *editSession, touchFn func()) (idleshut.Config, error) { printTree(es.tmpfs) var err error hugoCfg := &deps.DepsCfg{Fs: hugofs.NewFrom(es.tmpfs, ch.HugoCfg.Cfg)} hugoCfg.Cfg, err = hugolib.LoadConfig(es.tmpfs, "/", "config.toml") if err != nil { return idleshut.Config{}, fmt.Errorf("caddy-hugo: loading site configuration: %v", err) } hugoCfg.Cfg.Set("workingdir", "/") hugoSites, err := hugolib.NewHugoSites(*hugoCfg) if err != nil { return idleshut.Config{}, fmt.Errorf("caddy-hugo: initializing site: %v", err) } err = hugoSites.Build(hugolib.BuildCfg{ResetState: true}) if err != nil { // TODO better return idleshut.Config{}, fmt.Errorf("caddy-hugo: building site: %v", err) } return idleshut.Config{ TickDuration: WebsocketFileTicker, MaxIdleTicks: uint(IdleWebsocketTimeout/WebsocketFileTicker) + 1, Stop: func() error { es.doc.Close() delete(ch.docs, es.filename) return nil }, TickError: func(err error) { fmt.Println("error processing draft:", err) }, Tick: func() error { fmt.Println("TICK") err := afero.WriteFile(es.tmpfs, es.filename, []byte(es.doc.Contents()), 0644) if err != nil { return err } err = hugoSites.Build(hugolib.BuildCfg{ResetState: true}) if err != nil { return err } return nil }, }, nil }