package server import ( "log" "net/http" "git.else-if.org/jess/cs-midi-docs/internal/config" "git.else-if.org/jess/cs-midi-docs/internal/content" "git.else-if.org/jess/cs-midi-docs/internal/render" "git.else-if.org/jess/cs-midi-docs/internal/search" ) type Server struct { cfg *config.Config watcher *content.Watcher cache *render.Cache index *search.Index tmpl *Templates } func New(cfg *config.Config) (*Server, error) { w, err := content.NewWatcher(cfg.ContentDir) if err != nil { return nil, err } idx := search.NewIndex() idx.Build(w.Tree()) cache := render.NewCache() w.OnChange(func() { cache.Clear() idx.Build(w.Tree()) log.Println("content reloaded") }) w.Start() tmpl, err := LoadTemplates() if err != nil { return nil, err } return &Server{ cfg: cfg, watcher: w, cache: cache, index: idx, tmpl: tmpl, }, nil } func (s *Server) ListenAndServe() error { mux := http.NewServeMux() s.routes(mux) log.Printf("listening on %s (content: %s)", s.cfg.Listen, s.cfg.ContentDir) return http.ListenAndServe(s.cfg.Listen, mux) }