From 4385244d39b37d003dbb7a66a2ff3b05079b7047 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Sat, 4 Jul 2026 23:04:00 -0400 Subject: feat: drag/drop files in gui to change directories --- internal/admin/undo.go | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'internal/admin/undo.go') diff --git a/internal/admin/undo.go b/internal/admin/undo.go index f69fd9f..0c5ebaa 100644 --- a/internal/admin/undo.go +++ b/internal/admin/undo.go @@ -35,7 +35,7 @@ func (c ChangeDesc) ShortDesc() string { case c.IsDelete: return fmt.Sprintf("Deleted %s", filepath.Base(c.FilePath)) case c.NewFilePath != "": - return fmt.Sprintf("Renamed %s", filepath.Base(c.NewFilePath)) + return fmt.Sprintf("Moved %s", filepath.Base(c.NewFilePath)) default: return fmt.Sprintf("Edited %s", filepath.Base(c.FilePath)) } @@ -129,17 +129,21 @@ func (us *UndoStack) applyUndo(c ChangeDesc) error { } if c.IsDelete { if c.OldContent == nil { - return fmt.Errorf("no backup content to restore for %s", c.FilePath) - } - if err := os.WriteFile(c.FilePath, c.OldContent, 0644); err != nil { - return fmt.Errorf("restore deleted %s: %w", c.FilePath, err) + os.MkdirAll(c.FilePath, 0755) + } else { + os.MkdirAll(filepath.Dir(c.FilePath), 0755) + if err := os.WriteFile(c.FilePath, c.OldContent, 0644); err != nil { + return fmt.Errorf("restore deleted %s: %w", c.FilePath, err) + } } for _, ef := range c.ExtraFiles { + os.MkdirAll(filepath.Dir(ef.FilePath), 0755) os.WriteFile(ef.FilePath, ef.OldContent, 0644) } } else if c.IsCreate { os.Remove(c.FilePath) for _, ef := range c.ExtraFiles { + os.MkdirAll(filepath.Dir(ef.FilePath), 0755) os.WriteFile(ef.FilePath, ef.OldContent, 0644) } } else { @@ -148,10 +152,12 @@ func (us *UndoStack) applyUndo(c ChangeDesc) error { if c.NewFilePath != "" { target = c.FilePath } + os.MkdirAll(filepath.Dir(target), 0755) if err := os.WriteFile(target, content, 0644); err != nil { return fmt.Errorf("revert %s: %w", target, err) } for _, ef := range c.ExtraFiles { + os.MkdirAll(filepath.Dir(ef.FilePath), 0755) os.WriteFile(ef.FilePath, ef.OldContent, 0644) } } @@ -167,15 +173,18 @@ func (us *UndoStack) applyRedo(c ChangeDesc) error { if c.NewFilePath != "" { target = c.NewFilePath } + os.MkdirAll(filepath.Dir(target), 0755) if err := os.WriteFile(target, c.NewContent, 0644); err != nil { return fmt.Errorf("recreate %s: %w", target, err) } for _, ef := range c.ExtraFiles { + os.MkdirAll(filepath.Dir(ef.FilePath), 0755) os.WriteFile(ef.FilePath, ef.NewContent, 0644) } } else if c.IsDelete { os.Remove(c.FilePath) for _, ef := range c.ExtraFiles { + os.MkdirAll(filepath.Dir(ef.FilePath), 0755) os.WriteFile(ef.FilePath, ef.NewContent, 0644) } } else { @@ -184,10 +193,12 @@ func (us *UndoStack) applyRedo(c ChangeDesc) error { if c.NewFilePath != "" { target = c.NewFilePath } + os.MkdirAll(filepath.Dir(target), 0755) if err := os.WriteFile(target, content, 0644); err != nil { return fmt.Errorf("reapply %s: %w", target, err) } for _, ef := range c.ExtraFiles { + os.MkdirAll(filepath.Dir(ef.FilePath), 0755) os.WriteFile(ef.FilePath, ef.NewContent, 0644) } } -- cgit v1.2.3