package markdown import ( "log" "time" ) // DefaultInterval is the default interval at which the markdown watcher // checks for changes. const DefaultInterval = time.Second * 60 // Watch monitors the configured markdown directory for changes. It calls GenerateLinks // when there are changes. func Watch(md Markdown, c *Config, interval time.Duration) (stopChan chan struct{}) { return TickerFunc(interval, func() { if err := GenerateStatic(md, c); err != nil { log.Printf("[ERROR] markdown: Re-generating static site: %v", err) } }) } // TickerFunc runs f at interval. A message to the returned channel will stop the // executing goroutine. func TickerFunc(interval time.Duration, f func()) chan struct{} { stopChan := make(chan struct{}) ticker := time.NewTicker(interval) go func() { loop: for { select { case <-ticker.C: f() case <-stopChan: ticker.Stop() break loop } } }() return stopChan }