From 2776472acd9f61ceeec507140c0b7837b08e8bc7 Mon Sep 17 00:00:00 2001 From: sloum Date: Fri, 30 Apr 2021 14:39:23 -0700 Subject: [PATCH] Adds check to quit if there are unsaved changes --- board.go | 4 ++++ lane.go | 3 +++ main.go | 10 +++++++++- story.go | 6 ++++++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/board.go b/board.go index a9fc8ce..77af88b 100644 --- a/board.go +++ b/board.go @@ -133,6 +133,7 @@ func (b *Board) CreateLane(name string) { if b.Current < 0 { b.Current = 0 } + unsavedChanges = true b.SetMessage("Lane created", false) } @@ -490,6 +491,7 @@ func (b *Board) DeleteLane() { if b.Current > len(b.Lanes)-1 { b.Current -= 1 } + unsavedChanges = true b.SetMessage("Lane deleted", false) } @@ -604,6 +606,7 @@ func (b *Board) Regex(args []string) { b.Lanes[b.Current].Stories[b.Lanes[b.Current].Current].BuildStorySlice(b.width) b.Lanes[b.Current].Stories[b.Lanes[b.Current].Current].Draw(b) } + unsavedChanges = true b.SetMessage("Regular expression applied", false) } @@ -647,5 +650,6 @@ func (b *Board) Write(com []string) { defer f.Close() f.Write(j) b.SetMessage("File written", false) + unsavedChanges = false } diff --git a/lane.go b/lane.go index d681d5b..033d343 100644 --- a/lane.go +++ b/lane.go @@ -26,6 +26,7 @@ func (l *Lane) CreateStory(name string, b *Board) { if l.Current < 0 { l.Current = 0 } + unsavedChanges = true b.SetMessage("Story created", false) } @@ -113,6 +114,7 @@ func (l *Lane) DeleteStory(b *Board) { l.Current -= 1 } b.StoryOpen = false + unsavedChanges = true b.SetMessage("Story deleted", false) } @@ -126,6 +128,7 @@ func (l *Lane) Update(args []string, b *Board) { break } l.Title = title + unsavedChanges = true b.SetMessage("Lane title updated", false) default: b.SetMessage(fmt.Sprintf("Unknown lane location %q", args[0]), true) diff --git a/main.go b/main.go index 9fe5f2a..22b3ad1 100644 --- a/main.go +++ b/main.go @@ -36,6 +36,7 @@ import ( var board Board var fp string +var unsavedChanges bool func ExpandedAbsFilepath(p string) string { if strings.HasPrefix(p, "~/") { @@ -95,7 +96,7 @@ func GetConfirmation(prefix string) (bool, error) { } ln = strings.ToLower(ln) switch ln { - case "y", "yes", "yeah", "yup": + case "y", "yes", "yeah", "yup", "ya", "yaas", "aye": return true, nil default: return false, nil @@ -160,6 +161,13 @@ func WrapText(text string, lineWidth int) string { } func Quit() { + if unsavedChanges { + quitAnyway, _ := GetConfirmation("There are unsaved changed. Quit anyway? (y, n) ") + if !quitAnyway { + board.SetMessage("Quitting with unsaved work cancelled", false) + return + } + } termios.Restore() fmt.Print(cursorEnd) fmt.Print("\033[0m\033[?25h") diff --git a/story.go b/story.go index 7765133..616c57c 100644 --- a/story.go +++ b/story.go @@ -82,6 +82,7 @@ func (s *Story) AddComment(comment string, b *Board) { } s.Comments = append(s.Comments, Comment{u.Name, comment, time.Now()}) s.BuildStorySlice(b.width) + unsavedChanges = true } func (s *Story) BuildStorySlice(width int) { @@ -265,7 +266,9 @@ func (s *Story) Update(args []string, b *Board) { b.SetMessage("Task state updated", false) default: b.SetMessage(fmt.Sprintf("Unknown story location %q", args[0]), true) + return } + unsavedChanges = true s.BuildStorySlice(b.width) } @@ -287,6 +290,7 @@ func (s *Story) AddRemoveUser(users []string, b *Board) { } sort.Strings(s.Users) s.Updated = time.Now() + unsavedChanges = true b.SetMessage("Updated user list", false) } @@ -297,6 +301,7 @@ func (s *Story) AddTask(body string, b *Board) { s.Tasks = append(s.Tasks, Task{body, false}) s.Updated = time.Now() s.BuildStorySlice(b.width) + unsavedChanges = true b.SetMessage("Task added", false) } @@ -331,6 +336,7 @@ func (s *Story) DeleteTask(id string, b *Board) { } s.Updated = time.Now() s.BuildStorySlice(b.width) + unsavedChanges = true b.SetMessage("Task deleted", false) }