about summary refs log tree commit diff stats
path: root/internal/server/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/server/server.go')
-rw-r--r--internal/server/server.go24
1 files changed, 21 insertions, 3 deletions
diff --git a/internal/server/server.go b/internal/server/server.go
index fc56d47..04ee94c 100644
--- a/internal/server/server.go
+++ b/internal/server/server.go
@@ -2,6 +2,7 @@ package server
 
 import (
 	"context"
+	"fmt"
 	"html/template"
 	"io"
 	"log"
@@ -87,7 +88,8 @@ func New(runtimeConfig *Config) (*Server, error) {
 		Repanic: true,
 	})
 
-	tpl := template.Must(template.ParseGlob(path.Join("frontend", "templates", "*.tmpl")))
+	templatePaths := path.Join("frontend", "templates", "*.tmpl")
+	tpl := template.Must(template.ParseGlob(templatePaths))
 
 	top := http.NewServeMux()
 	mux := http.NewServeMux()
@@ -108,8 +110,24 @@ func New(runtimeConfig *Config) (*Server, error) {
 		applyDevModeOverrides(config)
 		liveReload := livereload.New()
 		liveReload.Start()
-		mux.Handle("/livereload", liveReload)
-		// liveReload.Reload()
+		top.Handle("/livereload", liveReload)
+		fw, err := NewFileWatcher()
+		if err != nil {
+			return nil, errors.WithMessage(err, "could not create file watcher")
+		}
+		err = fw.AddRecursive("frontend")
+		if err != nil {
+			return nil, errors.WithMessage(err, "could not add directory to file watcher")
+		}
+		go fw.Start(func() {
+			t, err := template.ParseGlob(path.Join("frontend", "templates", "*.tmpl"))
+			if err != nil {
+				slog.Error(fmt.Sprintf("could not parse template: %v", err))
+			} else {
+				tpl = t
+				liveReload.Reload()
+			}
+		})
 	}
 
 	var logWriter io.Writer