refactor: move UI components to ui package (#93)

This commit is contained in:
ayntgl 2021-10-30 18:35:50 +04:00 • committed by GitHub
parent 7271146485
commit 30dffbaa83
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 93 additions and 79 deletions

View file

@ -48,7 +48,7 @@ func onSessionReady(_ *discordgo.Session, r *discordgo.Ready) {
sort.Slice(r.Guilds, func(a, b int) bool {
found := false
for _, gID := range session.State.Settings.GuildPositions {
for _, gID := range r.Settings.GuildPositions {
if found {
if gID == r.Guilds[b].ID {
return true

26
main.go
View file

@ -2,6 +2,7 @@ package main
import (
"github.com/ayntgl/discordgo"
"github.com/ayntgl/discordo/ui"
"github.com/ayntgl/discordo/util"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
@ -39,10 +40,23 @@ func main() {
tview.Styles.InverseTextColor = tcell.GetColor(conf.Theme.Text)
tview.Styles.ContrastSecondaryTextColor = tcell.GetColor(conf.Theme.Text)
app = newApp()
channelsTree = newChannelsTree()
messagesView = newMessagesView()
messageInputField = newMessageInputField()
app = tview.NewApplication()
app.
EnableMouse(conf.Mouse).
SetInputCapture(onAppInputCapture)
channelsTree = ui.NewChannelsTree()
channelsTree.SetSelectedFunc(onChannelsTreeSelected)
messagesView = ui.NewMessagesView()
messagesView.
SetChangedFunc(func() {
app.Draw()
}).
SetInputCapture(onMessagesViewInputCapture)
messageInputField = ui.NewMessageInputField()
messageInputField.SetInputCapture(onMessageInputFieldInputCapture)
rightFlex := tview.NewFlex().
SetDirection(tview.FlexRow).
@ -69,7 +83,7 @@ func main() {
panic(err)
}
} else {
loginForm = newLoginForm(onLoginFormLoginButtonSelected, false)
loginForm = ui.NewLoginForm(onLoginFormLoginButtonSelected, false)
app.SetRoot(loginForm, true)
}
@ -106,7 +120,7 @@ func onLoginFormLoginButtonSelected() {
go keyring.Set(service, "token", lr.Token)
} else if lr.MFA {
// The account has MFA enabled, reattempt login with code and ticket.
loginForm = newLoginForm(func() {
loginForm = ui.NewLoginForm(func() {
code := loginForm.GetFormItem(0).(*tview.InputField).GetText()
if code == "" {
return

72
ui.go
View file

@ -16,15 +16,6 @@ var (
selectedMessage int = -1
)
func newApp() *tview.Application {
a := tview.NewApplication()
a.
EnableMouse(conf.Mouse).
SetInputCapture(onAppInputCapture)
return a
}
func onAppInputCapture(e *tcell.EventKey) *tcell.EventKey {
switch e.Name() {
case conf.Keybindings.FocusChannelsTree:
@ -41,19 +32,6 @@ func onAppInputCapture(e *tcell.EventKey) *tcell.EventKey {
return e
}
func newChannelsTree() *tview.TreeView {
treeView := tview.NewTreeView()
treeView.
SetSelectedFunc(onChannelsTreeSelected).
SetTopLevel(1).
SetRoot(tview.NewTreeNode("")).
SetTitle("Channels").
SetBorder(true).
SetBorderPadding(0, 0, 1, 0)
return treeView
}
func onChannelsTreeSelected(n *tview.TreeNode) {
selectedChannel = nil
selectedMessage = 0
@ -151,23 +129,6 @@ func onChannelsTreeSelected(n *tview.TreeNode) {
}
}
func newMessagesView() *tview.TextView {
textView := tview.NewTextView()
textView.
SetRegions(true).
SetDynamicColors(true).
SetWordWrap(true).
SetChangedFunc(func() {
app.Draw()
}).
SetInputCapture(onMessagesViewInputCapture).
SetBorder(true).
SetBorderPadding(0, 0, 1, 0).
SetTitleAlign(tview.AlignLeft)
return textView
}
func onMessagesViewInputCapture(e *tcell.EventKey) *tcell.EventKey {
if selectedChannel == nil {
return nil
@ -270,20 +231,6 @@ func onMessagesViewInputCapture(e *tcell.EventKey) *tcell.EventKey {
return e
}
func newMessageInputField() *tview.InputField {
inputField := tview.NewInputField()
inputField.
SetPlaceholder("Message...").
SetPlaceholderTextColor(tcell.ColorWhite).
SetFieldBackgroundColor(tview.Styles.PrimitiveBackgroundColor).
SetInputCapture(onMessageInputFieldInputCapture).
SetBorder(true).
SetBorderPadding(0, 0, 1, 0).
SetTitleAlign(tview.AlignLeft)
return inputField
}
func onMessageInputFieldInputCapture(e *tcell.EventKey) *tcell.EventKey {
switch e.Key() {
case tcell.KeyEnter:
@ -333,22 +280,3 @@ func onMessageInputFieldInputCapture(e *tcell.EventKey) *tcell.EventKey {
return e
}
func newLoginForm(onLoginFormLoginButtonSelected func(), mfa bool) *tview.Form {
w := tview.NewForm()
w.
AddButton("Login", onLoginFormLoginButtonSelected).
SetButtonsAlign(tview.AlignCenter).
SetBorder(true).
SetBorderPadding(0, 0, 1, 0)
if mfa {
w.AddPasswordField("Code", "", 0, 0, nil)
} else {
w.
AddInputField("Email", "", 0, nil, nil).
AddPasswordField("Password", "", 0, 0, nil)
}
return w
}

15
ui/channels_tree.go Normal file
View file

@ -0,0 +1,15 @@
package ui
import "github.com/rivo/tview"
func NewChannelsTree() *tview.TreeView {
treeView := tview.NewTreeView()
treeView.
SetTopLevel(1).
SetRoot(tview.NewTreeNode("")).
SetTitle("Channels").
SetBorder(true).
SetBorderPadding(0, 0, 1, 0)
return treeView
}

22
ui/login_form.go Normal file
View file

@ -0,0 +1,22 @@
package ui
import "github.com/rivo/tview"
func NewLoginForm(onLoginFormLoginButtonSelected func(), mfa bool) *tview.Form {
w := tview.NewForm()
w.
AddButton("Login", onLoginFormLoginButtonSelected).
SetButtonsAlign(tview.AlignCenter).
SetBorder(true).
SetBorderPadding(0, 0, 1, 0)
if mfa {
w.AddPasswordField("Code", "", 0, 0, nil)
} else {
w.
AddInputField("Email", "", 0, nil, nil).
AddPasswordField("Password", "", 0, 0, nil)
}
return w
}

19
ui/message_input_field.go Normal file
View file

@ -0,0 +1,19 @@
package ui
import (
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
)
func NewMessageInputField() *tview.InputField {
inputField := tview.NewInputField()
inputField.
SetPlaceholder("Message...").
SetPlaceholderTextColor(tcell.ColorWhite).
SetFieldBackgroundColor(tview.Styles.PrimitiveBackgroundColor).
SetBorder(true).
SetBorderPadding(0, 0, 1, 0).
SetTitleAlign(tview.AlignLeft)
return inputField
}

16
ui/messages_view.go Normal file
View file

@ -0,0 +1,16 @@
package ui
import "github.com/rivo/tview"
func NewMessagesView() *tview.TextView {
textView := tview.NewTextView()
textView.
SetRegions(true).
SetDynamicColors(true).
SetWordWrap(true).
SetBorder(true).
SetBorderPadding(0, 0, 1, 0).
SetTitleAlign(tview.AlignLeft)
return textView
}