@@ -59,6 +59,7 @@ func alSearch(ctx *cli.Context) error {
59
59
60
60
const (
61
61
scFiltersView = "ncFiltersView"
62
+ scSearchView = "scSearchView"
62
63
scShortcutsView = "scShortcutsView"
63
64
)
64
65
@@ -85,6 +86,21 @@ var searchResultHighlight = color.New(color.FgBlack, color.BgYellow)
85
86
var yellowC = color .New (color .FgYellow , color .Bold )
86
87
var cyanC = color .New (color .FgCyan , color .Bold )
87
88
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
+
88
104
func (sc * searchCui ) setGuiKeyBindings (gui * gocui.Gui ) {
89
105
gui .SetKeybinding ("" , gocui .KeyCtrlC , gocui .ModNone , quitGocui )
90
106
}
@@ -102,10 +118,14 @@ func (sc *searchCui) Layout(gui *gocui.Gui) error {
102
118
103
119
func (sc * searchCui ) listLayout () error {
104
120
w , h := sc .Gui .Size ()
121
+ h -= 4
105
122
106
123
if err := sc .filtersView (); err != nil {
107
124
return err
108
125
}
126
+ if err := sc .searchView (); err != nil {
127
+ return err
128
+ }
109
129
y := 4
110
130
for i := sc .Origin ; i < len (sc .Results ) && y < h ; i ++ {
111
131
result := & sc .Results [i ]
@@ -123,9 +143,9 @@ func (sc *searchCui) listLayout() error {
123
143
sc .Gui .SetViewOnTop (v .Name ())
124
144
125
145
if i == sc .SelIdx {
126
- searchResultHighlight .Fprintln (v , result .Title .UserPreferred )
146
+ searchResultHighlight .Fprintf (v , "%s (%s) \n " , result .Title .Romaji , result . Title . English )
127
147
} else {
128
- yellowC .Fprintln (v , result .Title .UserPreferred )
148
+ yellowC .Fprintf (v , "%s (%s) \n " , result .Title .Romaji , result . Title . English )
129
149
}
130
150
cyanC .Fprint (v , strings .ToLower (
131
151
fmt .Sprintf ("%s | %s | %d eps | %s %d | %d%% | %v\n " ,
@@ -176,7 +196,8 @@ func (sc *searchCui) fullDetailsLayout() error {
176
196
177
197
func (sc * searchCui ) filtersView () error {
178
198
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 {
180
201
if err != gocui .ErrUnknownView {
181
202
return err
182
203
}
@@ -186,9 +207,35 @@ func (sc *searchCui) filtersView() error {
186
207
fmt .Fprintln (v , "Search:" , sc .SearchQuery )
187
208
fmt .Fprintln (v , "Results:" , len (sc .Results ))
188
209
}
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
+
189
229
return nil
190
230
}
191
231
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
+
192
239
func (sc * searchCui ) Edit (v * gocui.View , key gocui.Key , ch rune , mod gocui.Modifier ) {
193
240
switch sc .Mode {
194
241
case scListView :
0 commit comments