From d832eab20cfa1cd9353a57e4218632af455b32ca Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Sat, 21 Jul 2018 18:37:00 +1000 Subject: [PATCH] loading animation for confirmation view --- gui.go | 26 ++++++++++++++++++++++++++ stash_panel.go | 7 +++---- view_helpers.go | 4 +++- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/gui.go b/gui.go index e01bfa7ef..d5f297e17 100644 --- a/gui.go +++ b/gui.go @@ -6,6 +6,7 @@ import ( // "io/ioutil" "log" + "strings" "time" // "strings" @@ -278,6 +279,25 @@ func fetch(g *gocui.Gui) { refreshStatus(g) } +func loader() string { + characters := "|/-\\" + now := time.Now() + nanos := now.UnixNano() + index := nanos / 50000000 % int64(len(characters)) + devLog(characters[index : index+1]) + return characters[index : index+1] +} + +func updateLoader(g *gocui.Gui) { + if confirmationView, _ := g.View("confirmation"); confirmationView != nil { + content := trimmedContent(confirmationView) + if strings.Contains(content, "...") { + staticContent := strings.Split(content, "...")[0] + "..." + renderString(g, "confirmation", staticContent+" "+loader()) + } + } +} + func run() { g, err := gocui.NewGui(gocui.OutputNormal) if err != nil { @@ -292,6 +312,12 @@ func run() { } }() + go func() { + for range time.Tick(time.Millisecond * 10) { + updateLoader(g) + } + }() + g.SetManagerFunc(layout) if err := keybindings(g); err != nil { diff --git a/stash_panel.go b/stash_panel.go index 2f80b0f0b..09b092fbb 100644 --- a/stash_panel.go +++ b/stash_panel.go @@ -63,10 +63,9 @@ func handleStashPop(g *gocui.Gui, v *gocui.View) error { } func handleStashDrop(g *gocui.Gui, v *gocui.View) error { - return createConfirmationPanel(g, v, "Stash drop", "Are you sure you want to drop this stash entry?", func(g *gocui.Gui, v *gocui.View) error { - return stashDo(g, v, "drop") - }, nil) - return nil + return createConfirmationPanel(g, v, "Stash drop", "Are you sure you want to drop this stash entry?", func(g *gocui.Gui, v *gocui.View) error { + return stashDo(g, v, "drop") + }, nil) } func stashDo(g *gocui.Gui, v *gocui.View, method string) error { diff --git a/view_helpers.go b/view_helpers.go index dd43aeade..b822e73e2 100644 --- a/view_helpers.go +++ b/view_helpers.go @@ -162,8 +162,10 @@ func correctCursor(v *gocui.View) error { func renderString(g *gocui.Gui, viewName, s string) error { g.Update(func(*gocui.Gui) error { v, err := g.View(viewName) + // just in case the view disappeared as this function was called, we'll + // silently return if it's not found if err != nil { - panic(err) + return nil } v.Clear() fmt.Fprint(v, s)