| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- package chat
- import (
- "fmt"
- "github.com/ayn2op/discordo/internal/config"
- "github.com/ayn2op/tview"
- "github.com/ayn2op/tview/help"
- "github.com/ayn2op/tview/keybind"
- "github.com/ayn2op/tview/picker"
- )
- const searchPickerLayerName = "searchPicker"
- type searchPicker struct {
- *picker.Model
- chatView *Model
- }
- var _ help.KeyMap = (*searchPicker)(nil)
- func newSearchPicker(cfg *config.Config, chatView *Model) *searchPicker {
- sp := &searchPicker{picker.NewModel(), chatView}
- ConfigurePicker(sp.Model, cfg, "Search")
- return sp
- }
- func (sp *searchPicker) HandleEvent(event tview.Event) tview.Command {
- switch event := event.(type) {
- case *picker.SelectedEvent:
- messageIndex, ok := event.Reference.(int)
- if !ok {
- return nil
- }
- sp.chatView.closeSearch()
- sp.chatView.messagesList.SetCursor(messageIndex)
- return tview.SetFocus(sp.chatView.messagesList)
- case *picker.CancelEvent:
- sp.chatView.closeSearch()
- return nil
- }
- return sp.Model.HandleEvent(event)
- }
- func (sp *searchPicker) update() {
- messages := sp.chatView.messagesList.messages
- items := make(picker.Items, 0, len(messages))
- for i, msg := range messages {
- text := msg.Author.DisplayOrUsername() + ": " + msg.Content
- if len(text) > 120 {
- text = text[:120] + "..."
- }
- items = append(items, picker.Item{
- Text: text,
- FilterText: fmt.Sprintf("%s %s", msg.Author.DisplayOrUsername(), msg.Content),
- Reference: i,
- })
- }
- sp.Model.SetItems(items)
- }
- func (sp *searchPicker) ShortHelp() []keybind.Keybind {
- cfg := sp.chatView.cfg.Keybinds.Picker
- return []keybind.Keybind{cfg.Up.Keybind, cfg.Down.Keybind, cfg.Select.Keybind, cfg.Cancel.Keybind}
- }
- func (sp *searchPicker) FullHelp() [][]keybind.Keybind {
- cfg := sp.chatView.cfg.Keybinds.Picker
- return [][]keybind.Keybind{
- {cfg.Up.Keybind, cfg.Down.Keybind, cfg.Top.Keybind, cfg.Bottom.Keybind},
- {cfg.Select.Keybind, cfg.Cancel.Keybind},
- }
- }
|