You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
caddy-hugo2/hugo.go

78 lines
1.8 KiB

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
}