Log fatal and non-fatal errors to file (#226)
This commit is contained in:
parent
3c507d4b34
commit
259b583712
6 changed files with 47 additions and 8 deletions
22
main.go
22
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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue