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) }