diff --git a/main.go b/main.go index ddaed96..3230d57 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,8 @@ package main import ( "fmt" "log" + "os" + "path/filepath" "runtime" "github.com/ayntgl/discordo/config" @@ -14,6 +16,20 @@ import ( ) func init() { + cacheDir, err := os.UserCacheDir() + if err != nil { + log.Fatal(err) + } + + f, err := os.Open(filepath.Join(cacheDir, config.Name, "out.log")) + if err != nil { + log.Fatal(err) + } + defer f.Close() + + log.SetOutput(f) + log.SetFlags(log.LstdFlags | log.Lshortfile) + tview.Borders.TopLeftFocus = tview.Borders.TopLeft tview.Borders.TopRightFocus = tview.Borders.TopRight tview.Borders.BottomLeftFocus = tview.Borders.BottomLeft @@ -42,8 +58,12 @@ func main() { log.Fatal(err) } + token, err := keyring.Get(config.Name, "token") + if err != nil { + log.Println(err) + } + c := ui.NewCore(cfg) - token, _ := keyring.Get(config.Name, "token") if token != "" { err = c.Run(token) if err != nil { diff --git a/ui/channels_view.go b/ui/channels_view.go index bbe2426..62c8ada 100644 --- a/ui/channels_view.go +++ b/ui/channels_view.go @@ -1,6 +1,7 @@ package ui import ( + "log" "sort" "github.com/diamondburned/arikawa/v3/discord" @@ -65,13 +66,15 @@ func (v *ChannelsView) onSelected(node *tview.TreeNode) { // The returned slice will be sorted from latest to oldest. ms, err := v.core.State.Messages(c.ID, v.core.Config.MessagesLimit) if err != nil { + log.Println(err) return } for i := len(ms) - 1; i >= 0; i-- { _, err = v.core.MessagesView.Write(buildMessage(v.core, ms[i])) if err != nil { - return + log.Println(err) + continue } } @@ -89,6 +92,7 @@ func (v *ChannelsView) createChannelNode(c discord.Channel) *tview.TreeNode { func (v *ChannelsView) createPrivateChannelNodes(root *tview.TreeNode) { cs, err := v.core.State.Cabinet.PrivateChannels() if err != nil { + log.Println(err) return } @@ -104,6 +108,7 @@ func (v *ChannelsView) createPrivateChannelNodes(root *tview.TreeNode) { func (v *ChannelsView) createGuildChannelNodes(root *tview.TreeNode, gID discord.GuildID) { cs, err := v.core.State.Cabinet.Channels(gID) if err != nil { + log.Println(err) return } diff --git a/ui/core.go b/ui/core.go index d32086a..dfdb986 100644 --- a/ui/core.go +++ b/ui/core.go @@ -2,6 +2,7 @@ package ui import ( "context" + "log" "strings" "github.com/ayntgl/discordo/config" @@ -147,7 +148,8 @@ func (c *Core) onReady(r *gateway.ReadyEvent) { for _, gID := range gf.GuildIDs { g, err := c.State.Cabinet.Guild(gID) if err != nil { - return + log.Println(err) + continue } guildNode := tview.NewTreeNode(g.Name) @@ -179,7 +181,8 @@ func (c *Core) onReady(r *gateway.ReadyEvent) { for _, gID := range gf.GuildIDs { g, err := c.State.Cabinet.Guild(gID) if err != nil { - return + log.Println(err) + continue } guildNode := tview.NewTreeNode(g.Name) diff --git a/ui/input_view.go b/ui/input_view.go index 75173a4..01d0d17 100644 --- a/ui/input_view.go +++ b/ui/input_view.go @@ -2,6 +2,7 @@ package ui import ( "io" + "log" "os" "os/exec" "strings" @@ -69,12 +70,14 @@ func (v *InputView) sendMessage() *tcell.EventKey { ms, err := v.core.State.Messages(v.core.ChannelsView.selectedChannel.ID, v.core.Config.MessagesLimit) if err != nil { + log.Println(err) return nil } if len(v.core.MessagesView.GetHighlights()) != 0 { mID, err := discord.ParseSnowflake(v.core.MessagesView.GetHighlights()[0]) if err != nil { + log.Println(err) return nil } @@ -105,7 +108,12 @@ func (v *InputView) sendMessage() *tcell.EventKey { } func (v *InputView) pasteClipboard() *tcell.EventKey { - text, _ := clipboard.ReadAll() + text, err := clipboard.ReadAll() + if err != nil { + log.Println(err) + return nil + } + text = v.GetText() + text v.SetText(text) return nil @@ -114,11 +122,13 @@ func (v *InputView) pasteClipboard() *tcell.EventKey { func (v *InputView) openExternalEditor() *tcell.EventKey { e := os.Getenv("EDITOR") if e == "" { + log.Println("environment variable EDITOR is empty") return nil } f, err := os.CreateTemp(os.TempDir(), "discordo-*.md") if err != nil { + log.Println(err) return nil } defer os.Remove(f.Name()) @@ -130,12 +140,14 @@ func (v *InputView) openExternalEditor() *tcell.EventKey { v.core.App.Suspend(func() { err = cmd.Run() if err != nil { + log.Println(err) return } }) b, err := io.ReadAll(f) if err != nil { + log.Println(err) return nil } diff --git a/ui/login_view.go b/ui/login_view.go index 3b7825a..928cf0e 100644 --- a/ui/login_view.go +++ b/ui/login_view.go @@ -21,7 +21,7 @@ func NewLoginView(c *Core) *tview.Pages { v.AddPage(emailViewPageName, newEmailView(c), true, true) v.AddPage(tokenViewPageName, newTokenView(c), true, true) - // The email view is displayed on the screen first since it is the recommended method to login. + // Since the recommended method to login is using the email and password, it is displayed on the screen first. v.SwitchToPage(emailViewPageName) v.SetTitle("Login") @@ -40,6 +40,7 @@ func NewLoginView(c *Core) *tview.Pages { } v.SwitchToPage(name) + return nil } return event @@ -76,7 +77,6 @@ func (v *EmailView) onLoginButtonSelected() { // Make a scratch HTTP client without a token client := api.NewClient("").WithContext(context.Background()) - // Try to login without TOTP l, err := client.Login(email, password) if err != nil { diff --git a/ui/messages_view.go b/ui/messages_view.go index 6b10379..b31a238 100644 --- a/ui/messages_view.go +++ b/ui/messages_view.go @@ -47,7 +47,6 @@ func (v *MessagesView) onInputCapture(e *tcell.EventKey) *tcell.EventKey { return nil } - // Defaults switch e.Name() { case v.core.Config.Keys.MessagesView.OpenActionsView: return v.openActionsView(ms)