From fee376102192dc6f24297a7b11324636ace3a07d Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Tue, 30 Jun 2026 19:27:37 -0400 Subject: feat: admin gui object CRUD is much nicer --- internal/admin/server.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'internal/admin/server.go') diff --git a/internal/admin/server.go b/internal/admin/server.go index 823d7ba..df6d5d9 100644 --- a/internal/admin/server.go +++ b/internal/admin/server.go @@ -19,6 +19,8 @@ import ( "math/big" "net" "net/http" + "path/filepath" + "strconv" "strings" "time" @@ -400,6 +402,7 @@ func (s *AdminServer) doUndo(w http.ResponseWriter, r *http.Request) { writeJSON(w, map[string]any{"message": "Nothing to undo"}) return } + s.rebuildAfterUndo(change) writeJSON(w, map[string]any{"message": "Undid: " + change.Description}) } @@ -413,5 +416,38 @@ func (s *AdminServer) doRedo(w http.ResponseWriter, r *http.Request) { writeJSON(w, map[string]any{"message": "Nothing to redo"}) return } + s.rebuildAfterUndo(change) writeJSON(w, map[string]any{"message": "Redid: " + change.Description}) } + +func (s *AdminServer) rebuildAfterUndo(change *ChangeDesc) { + s.world.RebuildRoomIndex(s.dataDir) + s.world.ClearHazardCache() + + for _, p := range changeFiles(change) { + rel, err := filepath.Rel(filepath.Join(s.dataDir, "rooms"), p) + if err != nil { + continue + } + if rel == "." || rel == ".." || strings.HasPrefix(rel, "..") { + continue + } + name := filepath.Base(p) + if idStr := strings.TrimSuffix(name, ".yaml"); idStr != name { + if id, err := strconv.Atoi(idStr); err == nil && id > 0 { + s.world.ClearRoomState(id) + } + } + } +} + +func changeFiles(change *ChangeDesc) []string { + files := []string{change.FilePath} + if change.NewFilePath != "" { + files = append(files, change.NewFilePath) + } + for _, ef := range change.ExtraFiles { + files = append(files, ef.FilePath) + } + return files +} -- cgit v1.2.3