Skip to content

Commit 6893443

Browse files
committed
searchView
1 parent 6d5481b commit 6893443

File tree

1 file changed

+50
-3
lines changed

1 file changed

+50
-3
lines changed

search_cui.go

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ func alSearch(ctx *cli.Context) error {
5959

6060
const (
6161
scFiltersView = "ncFiltersView"
62+
scSearchView = "scSearchView"
6263
scShortcutsView = "scShortcutsView"
6364
)
6465

@@ -85,6 +86,21 @@ var searchResultHighlight = color.New(color.FgBlack, color.BgYellow)
8586
var yellowC = color.New(color.FgYellow, color.Bold)
8687
var cyanC = color.New(color.FgCyan, color.Bold)
8788

89+
// Safe to call from another goroutine
90+
func (sc *searchCui) reload() {
91+
results, err := anilist.Search(sc.SearchQuery, 1, 50, anilist.Anime, sc.Al.Token)
92+
if err != nil {
93+
dialog.JustShowOkDialog(sc.Gui, "Error",
94+
strings.TrimSpace(strings.Replace(err.Error(), "\n", " ", -1)))
95+
}
96+
sc.Gui.Update(func(gui *gocui.Gui) error {
97+
sc.Results = results
98+
sc.Gui.SetManager(sc)
99+
sc.setGuiKeyBindings(sc.Gui)
100+
return nil
101+
})
102+
}
103+
88104
func (sc *searchCui) setGuiKeyBindings(gui *gocui.Gui) {
89105
gui.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quitGocui)
90106
}
@@ -102,10 +118,14 @@ func (sc *searchCui) Layout(gui *gocui.Gui) error {
102118

103119
func (sc *searchCui) listLayout() error {
104120
w, h := sc.Gui.Size()
121+
h -= 4
105122

106123
if err := sc.filtersView(); err != nil {
107124
return err
108125
}
126+
if err := sc.searchView(); err != nil {
127+
return err
128+
}
109129
y := 4
110130
for i := sc.Origin; i < len(sc.Results) && y < h; i++ {
111131
result := &sc.Results[i]
@@ -123,9 +143,9 @@ func (sc *searchCui) listLayout() error {
123143
sc.Gui.SetViewOnTop(v.Name())
124144

125145
if i == sc.SelIdx {
126-
searchResultHighlight.Fprintln(v, result.Title.UserPreferred)
146+
searchResultHighlight.Fprintf(v, "%s (%s)\n", result.Title.Romaji, result.Title.English)
127147
} else {
128-
yellowC.Fprintln(v, result.Title.UserPreferred)
148+
yellowC.Fprintf(v, "%s (%s)\n", result.Title.Romaji, result.Title.English)
129149
}
130150
cyanC.Fprint(v, strings.ToLower(
131151
fmt.Sprintf("%s | %s | %d eps | %s %d | %d%% | %v\n",
@@ -176,7 +196,8 @@ func (sc *searchCui) fullDetailsLayout() error {
176196

177197
func (sc *searchCui) filtersView() error {
178198
w, _ := sc.Gui.Size()
179-
if v, err := sc.Gui.SetView(scFiltersView, 0, 0, w-1, 4); err != nil {
199+
v, err := sc.Gui.SetView(scFiltersView, 0, 0, w-1, 4)
200+
if err != nil {
180201
if err != gocui.ErrUnknownView {
181202
return err
182203
}
@@ -186,9 +207,35 @@ func (sc *searchCui) filtersView() error {
186207
fmt.Fprintln(v, "Search:", sc.SearchQuery)
187208
fmt.Fprintln(v, "Results:", len(sc.Results))
188209
}
210+
211+
return nil
212+
}
213+
214+
func (sc *searchCui) searchView() error {
215+
w, h := sc.Gui.Size()
216+
v, err := sc.Gui.SetView(scSearchView, 0, h-3, w-1, h-1)
217+
if err != nil {
218+
if err != gocui.ErrUnknownView {
219+
return err
220+
}
221+
222+
v.Title = "Search"
223+
v.Frame = true
224+
v.Editor = sc.searchViewEditor()
225+
226+
fmt.Fprint(v, sc.SearchQuery)
227+
}
228+
189229
return nil
190230
}
191231

232+
func (sc *searchCui) searchViewEditor() gocui.Editor {
233+
return gocui.EditorFunc(func(v *gocui.View, key gocui.Key, ch rune, mod gocui.Modifier) {
234+
gocui.DefaultEditor.Edit(v, key, ch, mod)
235+
go sc.reload()
236+
})
237+
}
238+
192239
func (sc *searchCui) Edit(v *gocui.View, key gocui.Key, ch rune, mod gocui.Modifier) {
193240
switch sc.Mode {
194241
case scListView:

0 commit comments

Comments
 (0)