Adds check to quit if there are unsaved changes
This commit is contained in:
parent
040d8f2bd1
commit
2776472acd
4
board.go
4
board.go
|
@ -133,6 +133,7 @@ func (b *Board) CreateLane(name string) {
|
||||||
if b.Current < 0 {
|
if b.Current < 0 {
|
||||||
b.Current = 0
|
b.Current = 0
|
||||||
}
|
}
|
||||||
|
unsavedChanges = true
|
||||||
b.SetMessage("Lane created", false)
|
b.SetMessage("Lane created", false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -490,6 +491,7 @@ func (b *Board) DeleteLane() {
|
||||||
if b.Current > len(b.Lanes)-1 {
|
if b.Current > len(b.Lanes)-1 {
|
||||||
b.Current -= 1
|
b.Current -= 1
|
||||||
}
|
}
|
||||||
|
unsavedChanges = true
|
||||||
b.SetMessage("Lane deleted", false)
|
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].BuildStorySlice(b.width)
|
||||||
b.Lanes[b.Current].Stories[b.Lanes[b.Current].Current].Draw(b)
|
b.Lanes[b.Current].Stories[b.Lanes[b.Current].Current].Draw(b)
|
||||||
}
|
}
|
||||||
|
unsavedChanges = true
|
||||||
b.SetMessage("Regular expression applied", false)
|
b.SetMessage("Regular expression applied", false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -647,5 +650,6 @@ func (b *Board) Write(com []string) {
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
f.Write(j)
|
f.Write(j)
|
||||||
b.SetMessage("File written", false)
|
b.SetMessage("File written", false)
|
||||||
|
unsavedChanges = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
3
lane.go
3
lane.go
|
@ -26,6 +26,7 @@ func (l *Lane) CreateStory(name string, b *Board) {
|
||||||
if l.Current < 0 {
|
if l.Current < 0 {
|
||||||
l.Current = 0
|
l.Current = 0
|
||||||
}
|
}
|
||||||
|
unsavedChanges = true
|
||||||
b.SetMessage("Story created", false)
|
b.SetMessage("Story created", false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,6 +114,7 @@ func (l *Lane) DeleteStory(b *Board) {
|
||||||
l.Current -= 1
|
l.Current -= 1
|
||||||
}
|
}
|
||||||
b.StoryOpen = false
|
b.StoryOpen = false
|
||||||
|
unsavedChanges = true
|
||||||
b.SetMessage("Story deleted", false)
|
b.SetMessage("Story deleted", false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,6 +128,7 @@ func (l *Lane) Update(args []string, b *Board) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
l.Title = title
|
l.Title = title
|
||||||
|
unsavedChanges = true
|
||||||
b.SetMessage("Lane title updated", false)
|
b.SetMessage("Lane title updated", false)
|
||||||
default:
|
default:
|
||||||
b.SetMessage(fmt.Sprintf("Unknown lane location %q", args[0]), true)
|
b.SetMessage(fmt.Sprintf("Unknown lane location %q", args[0]), true)
|
||||||
|
|
10
main.go
10
main.go
|
@ -36,6 +36,7 @@ import (
|
||||||
|
|
||||||
var board Board
|
var board Board
|
||||||
var fp string
|
var fp string
|
||||||
|
var unsavedChanges bool
|
||||||
|
|
||||||
func ExpandedAbsFilepath(p string) string {
|
func ExpandedAbsFilepath(p string) string {
|
||||||
if strings.HasPrefix(p, "~/") {
|
if strings.HasPrefix(p, "~/") {
|
||||||
|
@ -95,7 +96,7 @@ func GetConfirmation(prefix string) (bool, error) {
|
||||||
}
|
}
|
||||||
ln = strings.ToLower(ln)
|
ln = strings.ToLower(ln)
|
||||||
switch ln {
|
switch ln {
|
||||||
case "y", "yes", "yeah", "yup":
|
case "y", "yes", "yeah", "yup", "ya", "yaas", "aye":
|
||||||
return true, nil
|
return true, nil
|
||||||
default:
|
default:
|
||||||
return false, nil
|
return false, nil
|
||||||
|
@ -160,6 +161,13 @@ func WrapText(text string, lineWidth int) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Quit() {
|
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()
|
termios.Restore()
|
||||||
fmt.Print(cursorEnd)
|
fmt.Print(cursorEnd)
|
||||||
fmt.Print("\033[0m\033[?25h")
|
fmt.Print("\033[0m\033[?25h")
|
||||||
|
|
6
story.go
6
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.Comments = append(s.Comments, Comment{u.Name, comment, time.Now()})
|
||||||
s.BuildStorySlice(b.width)
|
s.BuildStorySlice(b.width)
|
||||||
|
unsavedChanges = true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Story) BuildStorySlice(width int) {
|
func (s *Story) BuildStorySlice(width int) {
|
||||||
|
@ -265,7 +266,9 @@ func (s *Story) Update(args []string, b *Board) {
|
||||||
b.SetMessage("Task state updated", false)
|
b.SetMessage("Task state updated", false)
|
||||||
default:
|
default:
|
||||||
b.SetMessage(fmt.Sprintf("Unknown story location %q", args[0]), true)
|
b.SetMessage(fmt.Sprintf("Unknown story location %q", args[0]), true)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
unsavedChanges = true
|
||||||
s.BuildStorySlice(b.width)
|
s.BuildStorySlice(b.width)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -287,6 +290,7 @@ func (s *Story) AddRemoveUser(users []string, b *Board) {
|
||||||
}
|
}
|
||||||
sort.Strings(s.Users)
|
sort.Strings(s.Users)
|
||||||
s.Updated = time.Now()
|
s.Updated = time.Now()
|
||||||
|
unsavedChanges = true
|
||||||
b.SetMessage("Updated user list", false)
|
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.Tasks = append(s.Tasks, Task{body, false})
|
||||||
s.Updated = time.Now()
|
s.Updated = time.Now()
|
||||||
s.BuildStorySlice(b.width)
|
s.BuildStorySlice(b.width)
|
||||||
|
unsavedChanges = true
|
||||||
b.SetMessage("Task added", false)
|
b.SetMessage("Task added", false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -331,6 +336,7 @@ func (s *Story) DeleteTask(id string, b *Board) {
|
||||||
}
|
}
|
||||||
s.Updated = time.Now()
|
s.Updated = time.Now()
|
||||||
s.BuildStorySlice(b.width)
|
s.BuildStorySlice(b.width)
|
||||||
|
unsavedChanges = true
|
||||||
b.SetMessage("Task deleted", false)
|
b.SetMessage("Task deleted", false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue