From faa120bd994f9533296c9880585979f0a3fb7ecf Mon Sep 17 00:00:00 2001 From: aoife cassidy Date: Thu, 22 Jan 2026 16:33:34 +0100 Subject: [PATCH] browse: loading and refreshing --- .nanpa/ebony-fetal-ream.kdl | 2 ++ app/browse.go | 14 ++++++++++++-- app/loading.go | 31 +++++++++++++++++++++++++++++++ app/menu.go | 10 +++++++++- 4 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 .nanpa/ebony-fetal-ream.kdl create mode 100644 app/loading.go diff --git a/.nanpa/ebony-fetal-ream.kdl b/.nanpa/ebony-fetal-ream.kdl new file mode 100644 index 0000000..4379b74 --- /dev/null +++ b/.nanpa/ebony-fetal-ream.kdl @@ -0,0 +1,2 @@ +patch type="added" "loading indicator on browse" +patch type="added" "refresh button on browse" diff --git a/app/browse.go b/app/browse.go index e41b57b..647be1f 100644 --- a/app/browse.go +++ b/app/browse.go @@ -36,7 +36,7 @@ func NewBrowse() *Browse { return &Browse{ title, ui.NewList(list, 0), - "↑↓/kj move ↵ enter q return", + "↑↓/kj move ↵ enter r refresh q return", posts, } } @@ -57,6 +57,16 @@ func (browse *Browse) Event(state *ui.State, event vaxis.Event) (processed bool) case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9": i, _ := strconv.Atoi(key.String()) browse.list.SetIndex(i) + case "r": + ready := false + go func() { + b := NewBrowse() + ready = true + ui.ViewChange <- b + }() + if !ready { + ui.ViewChange <- NewLoading("refreshing entries…") + } case "q", "h", "Left": ui.ViewChange <- NewMainMenu(3) case "Enter", "l", "Right": @@ -79,5 +89,5 @@ func (browse *Browse) Draw(state *ui.State) { Width: 50, Height: 10, }) - win.New(win.Width/2-15, win.Height/2+9, 30, 1).Print(vaxis.Segment{Text: browse.help}) + win.New(win.Width/2-20, win.Height/2+9, 41, 1).Print(vaxis.Segment{Text: browse.help}) } diff --git a/app/loading.go b/app/loading.go new file mode 100644 index 0000000..1d43d43 --- /dev/null +++ b/app/loading.go @@ -0,0 +1,31 @@ +package app + +import ( + "git.sr.ht/~rockorager/vaxis" + "git.tilde.town/nbsp/neofeels/ui" +) + +type Loading struct { + title string + text string +} + +func NewLoading(text string) *Loading { + return &Loading{title, text} +} + +func (loading *Loading) Event(state *ui.State, event vaxis.Event) (processed bool) { + if key, ok := event.(vaxis.Key); ok && key.EventType == vaxis.EventPress { + switch key.String() { + case "Ctrl+c", "Ctrl+d": + close(ui.Quit) + case "Enter", "q", "h", "l", "Left", "Right": + ui.ViewChange <- NewMainMenu(3) + } + processed = true + } + win := state.Window() + win.New(win.Width/2-10, win.Height/2-8, 20, 5).Print(vaxis.Segment{Text: loading.title}) + win.New((win.Width-len(loading.text))/2, win.Height/2-2, len(loading.text), 2).Print(vaxis.Segment{Text: loading.text}) + return +} diff --git a/app/menu.go b/app/menu.go index c596490..f03b717 100644 --- a/app/menu.go +++ b/app/menu.go @@ -120,7 +120,15 @@ func (menu *MainMenu) Event(state *ui.State, event vaxis.Event) (processed bool) case 2: ui.ViewChange <- NewNeighbors(0) case 3: - ui.ViewChange <- NewBrowse() + ready := false + go func() { + b := NewBrowse() + ready = true + ui.ViewChange <- b + }() + if !ready { + ui.ViewChange <- NewLoading("loading entries…") + } case 4: ui.ViewChange <- NewSubscriptions(0) case 5: