Create MainFlex struct
This commit is contained in:
parent
43234d4153
commit
5466aa84b1
8 changed files with 76 additions and 70 deletions
|
|
@ -50,7 +50,7 @@ func newAttachmentImage(a discord.Attachment) (*AttachmentImage, error) {
|
|||
func (ai *AttachmentImage) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
|
||||
if event.Name() == config.Current.Keys.Cancel {
|
||||
app.SetRoot(mainFlex, true)
|
||||
app.SetFocus(messagesText)
|
||||
app.SetFocus(mainFlex.messagesText)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -163,8 +163,8 @@ PARENT_CHANNELS:
|
|||
func (gt *GuildsTree) onSelected(n *tview.TreeNode) {
|
||||
gt.selectedChannelID = 0
|
||||
|
||||
messagesText.reset()
|
||||
messageInput.reset()
|
||||
mainFlex.messagesText.reset()
|
||||
mainFlex.messageInput.reset()
|
||||
|
||||
if len(n.GetChildren()) != 0 {
|
||||
n.SetExpanded(!n.IsExpanded())
|
||||
|
|
@ -193,7 +193,7 @@ func (gt *GuildsTree) onSelected(n *tview.TreeNode) {
|
|||
}
|
||||
|
||||
for i := len(ms) - 1; i >= 0; i-- {
|
||||
messagesText.createMessage(ms[i])
|
||||
mainFlex.messagesText.createMessage(ms[i])
|
||||
}
|
||||
|
||||
c, err := discordState.Cabinet.Channel(ref)
|
||||
|
|
@ -202,10 +202,10 @@ func (gt *GuildsTree) onSelected(n *tview.TreeNode) {
|
|||
return
|
||||
}
|
||||
|
||||
messagesText.SetTitle(gt.channelToString(*c))
|
||||
mainFlex.messagesText.SetTitle(gt.channelToString(*c))
|
||||
|
||||
gt.selectedChannelID = ref
|
||||
app.SetFocus(messageInput)
|
||||
app.SetFocus(mainFlex.messageInput)
|
||||
case nil: // Direct messages
|
||||
cs, err := discordState.Cabinet.PrivateChannels()
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -63,21 +63,13 @@ func (lf *LoginForm) onLoginButtonSelected() {
|
|||
}
|
||||
}
|
||||
|
||||
mainFlex = newMainFlex()
|
||||
|
||||
// We got the token, return with a new Session.
|
||||
discordState, err = openState(l.Token)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
right := tview.NewFlex()
|
||||
right.SetDirection(tview.FlexRow)
|
||||
right.AddItem(messagesText, 0, 1, false)
|
||||
right.AddItem(messageInput, 3, 1, false)
|
||||
|
||||
// The guilds tree is always focused first at start-up.
|
||||
mainFlex.AddItem(guildsTree, 0, 1, true)
|
||||
mainFlex.AddItem(right, 0, 4, false)
|
||||
|
||||
mainFlex.SetInputCapture(onInputCapture)
|
||||
app.SetRoot(mainFlex, true)
|
||||
}
|
||||
|
|
|
|||
24
main.go
24
main.go
|
|
@ -16,11 +16,8 @@ var (
|
|||
|
||||
discordState *State
|
||||
|
||||
app = tview.NewApplication()
|
||||
mainFlex = tview.NewFlex()
|
||||
guildsTree *GuildsTree
|
||||
messagesText *MessagesText
|
||||
messageInput *MessageInput
|
||||
app = tview.NewApplication()
|
||||
mainFlex *MainFlex
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
|
@ -64,30 +61,17 @@ func main() {
|
|||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// Initialize UI widgets
|
||||
guildsTree = newGuildsTree()
|
||||
messagesText = newMessagesText()
|
||||
messageInput = newMessageInput()
|
||||
|
||||
// mission failed, we'll get 'em next time
|
||||
if token == "" {
|
||||
app.SetRoot(newLoginForm(), true)
|
||||
} else {
|
||||
mainFlex = newMainFlex()
|
||||
|
||||
discordState, err = openState(token)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
right := tview.NewFlex()
|
||||
right.SetDirection(tview.FlexRow)
|
||||
right.AddItem(messagesText, 0, 1, false)
|
||||
right.AddItem(messageInput, 3, 1, false)
|
||||
|
||||
// The guilds tree is always focused first at start-up.
|
||||
mainFlex.AddItem(guildsTree, 0, 1, true)
|
||||
mainFlex.AddItem(right, 0, 4, false)
|
||||
|
||||
mainFlex.SetInputCapture(onInputCapture)
|
||||
app.SetRoot(mainFlex, true)
|
||||
}
|
||||
|
||||
|
|
|
|||
38
main_flex.go
38
main_flex.go
|
|
@ -3,18 +3,48 @@ package main
|
|||
import (
|
||||
"github.com/ayn2op/discordo/internal/config"
|
||||
"github.com/gdamore/tcell/v2"
|
||||
"github.com/rivo/tview"
|
||||
)
|
||||
|
||||
func onInputCapture(event *tcell.EventKey) *tcell.EventKey {
|
||||
type MainFlex struct {
|
||||
*tview.Flex
|
||||
|
||||
guildsTree *GuildsTree
|
||||
messagesText *MessagesText
|
||||
messageInput *MessageInput
|
||||
}
|
||||
|
||||
func newMainFlex() *MainFlex {
|
||||
mf := &MainFlex{
|
||||
Flex: tview.NewFlex(),
|
||||
|
||||
guildsTree: newGuildsTree(),
|
||||
messagesText: newMessagesText(),
|
||||
messageInput: newMessageInput(),
|
||||
}
|
||||
|
||||
right := tview.NewFlex()
|
||||
right.SetDirection(tview.FlexRow)
|
||||
right.AddItem(mf.messagesText, 0, 1, false)
|
||||
right.AddItem(mf.messageInput, 3, 1, false)
|
||||
// The guilds tree is always focused first at start-up.
|
||||
mf.AddItem(mf.guildsTree, 0, 1, true)
|
||||
mf.AddItem(right, 0, 4, false)
|
||||
mf.SetInputCapture(mf.onInputCapture)
|
||||
|
||||
return mf
|
||||
}
|
||||
|
||||
func (mf *MainFlex) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
|
||||
switch event.Name() {
|
||||
case config.Current.Keys.GuildsTree.Focus:
|
||||
app.SetFocus(guildsTree)
|
||||
app.SetFocus(mf.guildsTree)
|
||||
return nil
|
||||
case config.Current.Keys.MessagesText.Focus:
|
||||
app.SetFocus(messagesText)
|
||||
app.SetFocus(mf.messagesText)
|
||||
return nil
|
||||
case config.Current.Keys.MessageInput.Focus:
|
||||
app.SetFocus(messageInput)
|
||||
app.SetFocus(mf.messageInput)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ func (mi *MessageInput) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
|
|||
mi.pasteAction()
|
||||
return nil
|
||||
case config.Current.Keys.MessageInput.LaunchEditor:
|
||||
messageInput.launchEditorAction()
|
||||
mainFlex.messageInput.launchEditorAction()
|
||||
return nil
|
||||
case config.Current.Keys.Cancel:
|
||||
mi.reset()
|
||||
|
|
@ -64,7 +64,7 @@ func (mi *MessageInput) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
|
|||
}
|
||||
|
||||
func (mi *MessageInput) sendAction() {
|
||||
if !guildsTree.selectedChannelID.IsValid() {
|
||||
if !mainFlex.guildsTree.selectedChannelID.IsValid() {
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -74,8 +74,8 @@ func (mi *MessageInput) sendAction() {
|
|||
}
|
||||
|
||||
var err error
|
||||
if messagesText.selectedMessage != -1 {
|
||||
ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
|
||||
if mainFlex.messagesText.selectedMessage != -1 {
|
||||
ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
|
|
@ -83,7 +83,7 @@ func (mi *MessageInput) sendAction() {
|
|||
|
||||
data := api.SendMessageData{
|
||||
Content: text,
|
||||
Reference: &discord.MessageReference{MessageID: ms[messagesText.selectedMessage].ID},
|
||||
Reference: &discord.MessageReference{MessageID: ms[mainFlex.messagesText.selectedMessage].ID},
|
||||
AllowedMentions: &api.AllowedMentions{RepliedUser: option.False},
|
||||
}
|
||||
|
||||
|
|
@ -91,9 +91,9 @@ func (mi *MessageInput) sendAction() {
|
|||
data.AllowedMentions.RepliedUser = option.True
|
||||
}
|
||||
|
||||
go discordState.SendMessageComplex(guildsTree.selectedChannelID, data)
|
||||
go discordState.SendMessageComplex(mainFlex.guildsTree.selectedChannelID, data)
|
||||
} else {
|
||||
go discordState.SendMessage(guildsTree.selectedChannelID, text)
|
||||
go discordState.SendMessage(mainFlex.guildsTree.selectedChannelID, text)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
|
|
@ -101,8 +101,8 @@ func (mi *MessageInput) sendAction() {
|
|||
return
|
||||
}
|
||||
|
||||
messagesText.selectedMessage = -1
|
||||
messagesText.Highlight()
|
||||
mainFlex.messagesText.selectedMessage = -1
|
||||
mainFlex.messagesText.Highlight()
|
||||
mi.reset()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ func newMessagesText() *MessagesText {
|
|||
}
|
||||
|
||||
func (mt *MessagesText) reset() {
|
||||
messagesText.selectedMessage = -1
|
||||
mainFlex.messagesText.selectedMessage = -1
|
||||
|
||||
mt.SetTitle("")
|
||||
mt.Clear()
|
||||
|
|
@ -135,10 +135,10 @@ func (mt *MessagesText) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
|
|||
mt.showImageAction()
|
||||
return nil
|
||||
case config.Current.Keys.Cancel:
|
||||
guildsTree.selectedChannelID = 0
|
||||
mainFlex.guildsTree.selectedChannelID = 0
|
||||
|
||||
messagesText.reset()
|
||||
messageInput.reset()
|
||||
mainFlex.messagesText.reset()
|
||||
mainFlex.messageInput.reset()
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
@ -157,20 +157,20 @@ func (mt *MessagesText) replyAction(mention bool) {
|
|||
title += "Replying to "
|
||||
}
|
||||
|
||||
ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
|
||||
ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
title += ms[mt.selectedMessage].Author.Tag()
|
||||
messageInput.SetTitle(title)
|
||||
mainFlex.messageInput.SetTitle(title)
|
||||
|
||||
app.SetFocus(messageInput)
|
||||
app.SetFocus(mainFlex.messageInput)
|
||||
}
|
||||
|
||||
func (mt *MessagesText) selectPreviousAction() {
|
||||
ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
|
||||
ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
|
|
@ -190,7 +190,7 @@ func (mt *MessagesText) selectPreviousAction() {
|
|||
}
|
||||
|
||||
func (mt *MessagesText) selectNextAction() {
|
||||
ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
|
||||
ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
|
|
@ -210,7 +210,7 @@ func (mt *MessagesText) selectNextAction() {
|
|||
}
|
||||
|
||||
func (mt *MessagesText) selectFirstAction() {
|
||||
ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
|
||||
ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
|
|
@ -222,7 +222,7 @@ func (mt *MessagesText) selectFirstAction() {
|
|||
}
|
||||
|
||||
func (mt *MessagesText) selectLastAction() {
|
||||
ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
|
||||
ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
|
|
@ -238,7 +238,7 @@ func (mt *MessagesText) selectReplyAction() {
|
|||
return
|
||||
}
|
||||
|
||||
ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
|
||||
ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
|
|
@ -262,7 +262,7 @@ func (mt *MessagesText) copyContentAction() {
|
|||
return
|
||||
}
|
||||
|
||||
ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
|
||||
ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
|
|
@ -280,7 +280,7 @@ func (mt *MessagesText) showImageAction() {
|
|||
return
|
||||
}
|
||||
|
||||
ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
|
||||
ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
|
|
|
|||
14
state.go
14
state.go
|
|
@ -60,7 +60,7 @@ func (s *State) onRequest(r httpdriver.Request) error {
|
|||
|
||||
func (s *State) onReady(r *gateway.ReadyEvent) {
|
||||
dmNode := tview.NewTreeNode("Direct Messages")
|
||||
guildsTree.root.AddChild(dmNode)
|
||||
mainFlex.guildsTree.root.AddChild(dmNode)
|
||||
|
||||
for _, gf := range r.UserSettings.GuildFolders {
|
||||
/// If the ID of the guild folder is zero, the guild folder only contains single guild.
|
||||
|
|
@ -71,18 +71,18 @@ func (s *State) onReady(r *gateway.ReadyEvent) {
|
|||
continue
|
||||
}
|
||||
|
||||
guildsTree.createGuildNode(guildsTree.root, *g)
|
||||
mainFlex.guildsTree.createGuildNode(mainFlex.guildsTree.root, *g)
|
||||
} else {
|
||||
guildsTree.createGuildFolderNode(guildsTree.root, gf)
|
||||
mainFlex.guildsTree.createGuildFolderNode(mainFlex.guildsTree.root, gf)
|
||||
}
|
||||
}
|
||||
|
||||
guildsTree.SetCurrentNode(guildsTree.root)
|
||||
app.SetFocus(guildsTree)
|
||||
mainFlex.guildsTree.SetCurrentNode(mainFlex.guildsTree.root)
|
||||
app.SetFocus(mainFlex.guildsTree)
|
||||
}
|
||||
|
||||
func (s *State) onMessageCreate(m *gateway.MessageCreateEvent) {
|
||||
if guildsTree.selectedChannelID.IsValid() && guildsTree.selectedChannelID == m.ChannelID {
|
||||
messagesText.createMessage(m.Message)
|
||||
if mainFlex.guildsTree.selectedChannelID.IsValid() && mainFlex.guildsTree.selectedChannelID == m.ChannelID {
|
||||
mainFlex.messagesText.createMessage(m.Message)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue