discordo/ui/channels.go
2022-02-26 23:00:17 +04:00

65 lines
1.4 KiB
Go

package ui
import (
"github.com/ayntgl/discordgo"
"github.com/rivo/tview"
)
type ChannelsTreeView struct {
*tview.TreeView
app *App
}
func NewChannelsTreeView(app *App) *ChannelsTreeView {
ctv := &ChannelsTreeView{
TreeView: tview.NewTreeView(),
app: app,
}
ctv.SetTopLevel(1)
ctv.SetRoot(tview.NewTreeNode(""))
ctv.SetTitle("Channels")
ctv.SetTitleAlign(tview.AlignLeft)
ctv.SetBorder(true)
ctv.SetBorderPadding(0, 0, 1, 1)
ctv.SetSelectedFunc(ctv.onSelected)
return ctv
}
func (ctv *ChannelsTreeView) onSelected(n *tview.TreeNode) {
ctv.app.SelectedMessage = -1
ctv.app.MessagesTextView.
Highlight().
Clear()
ctv.app.MessageInputField.SetText("")
c, err := ctv.app.Session.State.Channel(n.GetReference().(string))
if err != nil {
return
}
if c.Type == discordgo.ChannelTypeGuildCategory {
n.SetExpanded(!n.IsExpanded())
return
}
ctv.app.SelectedChannel = c
ctv.app.SetFocus(ctv.app.MessageInputField)
go func() {
ms, err := ctv.app.Session.ChannelMessages(c.ID, ctv.app.Config.General.FetchMessagesLimit, "", "", "")
if err != nil {
return
}
for i := len(ms) - 1; i >= 0; i-- {
ctv.app.SelectedChannel.Messages = append(ctv.app.SelectedChannel.Messages, ms[i])
_, err = ctv.app.MessagesTextView.Write(buildMessage(ctv.app, ms[i]))
if err != nil {
return
}
}
ctv.app.MessagesTextView.ScrollToEnd()
}()
}