render/watcher.go

68 lines
1.3 KiB
Go

package render
import (
"html/template"
"net/http"
"os"
"sync"
)
var _ Manager = (*WatcherManager)(nil)
type WatcherManager struct {
mu sync.RWMutex
dir string
manager *RendererManager
fm template.FuncMap
}
func NewWatcher(dir string, fm template.FuncMap) (*WatcherManager, error) {
renderer, err := ParseTemplates(os.DirFS(dir), fm)
if err != nil {
return nil, err
}
return &WatcherManager{
dir: dir,
manager: renderer,
fm: fm,
}, nil
}
func (wm *WatcherManager) Refresh() error {
wm.mu.Lock()
defer wm.mu.Unlock()
var err error
wm.manager, err = ParseTemplates(os.DirFS(wm.dir), wm.fm)
return err
}
func (wm *WatcherManager) GetPage(page, username string) Renderer {
wm.mu.RLock()
defer wm.mu.RUnlock()
return wm.manager.GetPage(page, username)
}
func (wm *WatcherManager) GetBlock(page, block string) Renderer {
wm.mu.RLock()
defer wm.mu.RUnlock()
return wm.manager.GetBlock(page, block)
}
func (wm *WatcherManager) GetComponent(path, name string) Renderer {
wm.mu.RLock()
defer wm.mu.RUnlock()
return wm.manager.GetComponent(path, name)
}
func (wm *WatcherManager) FromRequest(r *http.Request, page string, username string) Renderer {
wm.mu.RLock()
defer wm.mu.RUnlock()
return wm.manager.FromRequest(r, page, username)
}