feat: replace log with slog

This commit is contained in:
ayn2op 2024-09-20 01:11:51 +05:30
parent ce69326513
commit 5ccd4cd679
8 changed files with 48 additions and 40 deletions

View file

@ -2,7 +2,7 @@ package cmd
import ( import (
"fmt" "fmt"
"log" "log/slog"
"slices" "slices"
"sort" "sort"
"strings" "strings"
@ -62,7 +62,7 @@ func (gt *GuildsTree) createFolderNode(folder gateway.GuildFolder) {
for _, gID := range folder.GuildIDs { for _, gID := range folder.GuildIDs {
g, err := discordState.Cabinet.Guild(gID) g, err := discordState.Cabinet.Guild(gID)
if err != nil { if err != nil {
log.Printf("guild %v not found in state: %v\n", gID, err) slog.Info("guild not found in state", "err", err, "guild", g)
continue continue
} }
@ -113,7 +113,7 @@ func (gt *GuildsTree) createChannelNode(n *tview.TreeNode, c discord.Channel) *t
if c.Type != discord.DirectMessage && c.Type != discord.GroupDM { if c.Type != discord.DirectMessage && c.Type != discord.GroupDM {
ps, err := discordState.Permissions(c.ID, discordState.Ready().User.ID) ps, err := discordState.Permissions(c.ID, discordState.Ready().User.ID)
if err != nil { if err != nil {
log.Println(err) slog.Error("failed to get permissions", "err", err, "channel_id", c.ID)
return nil return nil
} }
@ -183,7 +183,7 @@ func (gt *GuildsTree) onSelected(n *tview.TreeNode) {
case discord.GuildID: case discord.GuildID:
cs, err := discordState.Cabinet.Channels(ref) cs, err := discordState.Cabinet.Channels(ref)
if err != nil { if err != nil {
log.Println(err) slog.Error("failed to get channels", "err", err, "guild_id", ref)
return return
} }
@ -198,7 +198,7 @@ func (gt *GuildsTree) onSelected(n *tview.TreeNode) {
c, err := discordState.Cabinet.Channel(ref) c, err := discordState.Cabinet.Channel(ref)
if err != nil { if err != nil {
log.Println(err) slog.Error("failed to get channel", "channel_id", ref)
return return
} }
@ -209,7 +209,7 @@ func (gt *GuildsTree) onSelected(n *tview.TreeNode) {
case nil: // Direct messages case nil: // Direct messages
cs, err := discordState.PrivateChannels() cs, err := discordState.PrivateChannels()
if err != nil { if err != nil {
log.Println(err) slog.Error("failed to get private channels", "err", err)
return return
} }

View file

@ -1,7 +1,7 @@
package cmd package cmd
import ( import (
"log" "log/slog"
"github.com/ayn2op/discordo/internal/constants" "github.com/ayn2op/discordo/internal/constants"
"github.com/gdamore/tcell/v2" "github.com/gdamore/tcell/v2"
@ -56,9 +56,12 @@ func (mf *MainFlex) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
return nil return nil
case cfg.Keys.Logout: case cfg.Keys.Logout:
app.Stop() app.Stop()
if err := keyring.Delete(constants.Name, "token"); err != nil { if err := keyring.Delete(constants.Name, "token"); err != nil {
log.Fatal(err) slog.Error("failed to delete token from keyring", "err", err)
return nil
} }
return nil return nil
case cfg.Keys.ToggleGuildsTree: case cfg.Keys.ToggleGuildsTree:
// The guilds tree is visible if the numbers of items is two. // The guilds tree is visible if the numbers of items is two.

View file

@ -1,7 +1,7 @@
package cmd package cmd
import ( import (
"log" "log/slog"
"os" "os"
"os/exec" "os/exec"
"strings" "strings"
@ -80,10 +80,11 @@ func (mi *MessageInput) send() {
return return
} }
logger := slog.With("channel_id", mainFlex.guildsTree.selectedChannelID)
if mi.replyMessageIdx != -1 { if mi.replyMessageIdx != -1 {
ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID) ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID)
if err != nil { if err != nil {
log.Println(err) logger.Error("failed to get messages", "err", err)
return return
} }
@ -99,13 +100,13 @@ func (mi *MessageInput) send() {
go func() { go func() {
if _, err := discordState.SendMessageComplex(mainFlex.guildsTree.selectedChannelID, data); err != nil { if _, err := discordState.SendMessageComplex(mainFlex.guildsTree.selectedChannelID, data); err != nil {
log.Println("failed to send message:", err) slog.Error("failed to send message", "err", err)
} }
}() }()
} else { } else {
go func() { go func() {
if _, err := discordState.SendMessage(mainFlex.guildsTree.selectedChannelID, text); err != nil { if _, err := discordState.SendMessage(mainFlex.guildsTree.selectedChannelID, text); err != nil {
log.Println("failed to send message:", err) slog.Error("failed to send message", "err", err)
} }
}() }()
} }
@ -125,7 +126,7 @@ func (mi *MessageInput) editor() {
f, err := os.CreateTemp("", constants.TmpFilePattern) f, err := os.CreateTemp("", constants.TmpFilePattern)
if err != nil { if err != nil {
log.Println(err) slog.Error("failed to create temporary file", "err", err)
return return
} }
_, _ = f.WriteString(mi.GetText()) _, _ = f.WriteString(mi.GetText())
@ -141,14 +142,14 @@ func (mi *MessageInput) editor() {
app.Suspend(func() { app.Suspend(func() {
err := cmd.Run() err := cmd.Run()
if err != nil { if err != nil {
log.Println(err) slog.Error("failed to run command", "err", err, "command", cmd)
return return
} }
}) })
msg, err := os.ReadFile(f.Name()) msg, err := os.ReadFile(f.Name())
if err != nil { if err != nil {
log.Println(err) slog.Error("failed to read temporary file", "err", err, "name", f.Name())
return return
} }

View file

@ -4,7 +4,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"io" "io"
"log" "log/slog"
"slices" "slices"
"strings" "strings"
"time" "time"
@ -56,7 +56,7 @@ func newMessagesText() *MessagesText {
func (mt *MessagesText) drawMsgs(cID discord.ChannelID) { func (mt *MessagesText) drawMsgs(cID discord.ChannelID) {
ms, err := discordState.Messages(cID, uint(cfg.MessagesLimit)) ms, err := discordState.Messages(cID, uint(cfg.MessagesLimit))
if err != nil { if err != nil {
log.Println(err) slog.Error("failed to get messages", "err", err, "channel_id", cID)
return return
} }
@ -200,7 +200,7 @@ func (mt *MessagesText) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
func (mt *MessagesText) _select(name string) { func (mt *MessagesText) _select(name string) {
ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID) ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID)
if err != nil { if err != nil {
log.Println(err) slog.Error("failed to get messages", "err", err, "channel_id", mainFlex.guildsTree.selectedChannelID)
return return
} }
@ -252,13 +252,13 @@ func (mt *MessagesText) _select(name string) {
func (mt *MessagesText) yank() { func (mt *MessagesText) yank() {
msg, err := mt.getSelectedMessage() msg, err := mt.getSelectedMessage()
if err != nil { if err != nil {
log.Println(err) slog.Error("failed to get selected message", "err", err)
return return
} }
err = clipboard.WriteAll(msg.Content) err = clipboard.WriteAll(msg.Content)
if err != nil { if err != nil {
log.Println("failed to write to clipboard:", err) slog.Error("failed to write to clipboard", "err", err)
return return
} }
} }
@ -266,7 +266,7 @@ func (mt *MessagesText) yank() {
func (mt *MessagesText) open() { func (mt *MessagesText) open() {
msg, err := mt.getSelectedMessage() msg, err := mt.getSelectedMessage()
if err != nil { if err != nil {
log.Println(err) slog.Error("failed to get selected message", "err", err)
return return
} }
@ -278,7 +278,7 @@ func (mt *MessagesText) open() {
for _, a := range attachments { for _, a := range attachments {
go func() { go func() {
if err := open.Start(a.URL); err != nil { if err := open.Start(a.URL); err != nil {
log.Println(err) slog.Error("failed to open URL", "err", err, "url", a.URL)
} }
}() }()
} }
@ -295,7 +295,7 @@ func (mt *MessagesText) reply(mention bool) {
msg, err := mt.getSelectedMessage() msg, err := mt.getSelectedMessage()
if err != nil { if err != nil {
log.Println(err) slog.Error("failed to get selected message", "err", err)
return return
} }
@ -309,7 +309,7 @@ func (mt *MessagesText) delete() {
msg, err := mt.getSelectedMessage() msg, err := mt.getSelectedMessage()
if err != nil { if err != nil {
log.Println(err) slog.Error("failed to get selected message", "err", err)
return return
} }
@ -330,17 +330,18 @@ func (mt *MessagesText) delete() {
} }
if err := discordState.DeleteMessage(mainFlex.guildsTree.selectedChannelID, msg.ID, ""); err != nil { if err := discordState.DeleteMessage(mainFlex.guildsTree.selectedChannelID, msg.ID, ""); err != nil {
log.Println(err) slog.Error("failed to delete message", "err", err, "channel_id", mainFlex.guildsTree.selectedChannelID, "message_id", msg.ID)
return return
} }
if err := discordState.MessageRemove(mainFlex.guildsTree.selectedChannelID, msg.ID); err != nil { if err := discordState.MessageRemove(mainFlex.guildsTree.selectedChannelID, msg.ID); err != nil {
log.Println(err) slog.Error("failed to delete message", "err", err, "channel_id", mainFlex.guildsTree.selectedChannelID, "message_id", msg.ID)
return
} }
ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID) ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID)
if err != nil { if err != nil {
log.Println(err) slog.Error("failed to delete message", "err", err, "channel_id", mainFlex.guildsTree.selectedChannelID)
return return
} }

View file

@ -1,7 +1,7 @@
package cmd package cmd
import ( import (
"log" "log/slog"
"github.com/ayn2op/discordo/internal/config" "github.com/ayn2op/discordo/internal/config"
"github.com/ayn2op/discordo/internal/logger" "github.com/ayn2op/discordo/internal/logger"
@ -33,12 +33,14 @@ func Run(token string) error {
lf := NewLoginForm(func(token string, err error) { lf := NewLoginForm(func(token string, err error) {
if err != nil { if err != nil {
app.Stop() app.Stop()
log.Fatal(err) slog.Error("failed to login", "err", err)
return
} }
if err := openState(token); err != nil { if err := openState(token); err != nil {
app.Stop() app.Stop()
log.Fatal(err) slog.Error("failed to open state", "err", err)
return
} }
app.SetRoot(mainFlex, true) app.SetRoot(mainFlex, true)

View file

@ -2,7 +2,7 @@ package cmd
import ( import (
"context" "context"
"log" "log/slog"
"runtime" "runtime"
"slices" "slices"
@ -45,7 +45,7 @@ func openState(token string) error {
func (s *State) onRequest(r httpdriver.Request) error { func (s *State) onRequest(r httpdriver.Request) error {
req, ok := r.(*httpdriver.DefaultRequest) req, ok := r.(*httpdriver.DefaultRequest)
if ok { if ok {
log.Printf("method = %s; url = %s\n", req.Method, req.URL) slog.Info("new HTTP request", "method", req.Method, "path", req.URL.Path)
} }
return nil return nil

View file

@ -1,7 +1,7 @@
package logger package logger
import ( import (
"log" "log/slog"
"os" "os"
"path/filepath" "path/filepath"
@ -30,12 +30,14 @@ func Load() error {
return err return err
} }
f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, os.ModePerm) file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, os.ModePerm)
if err != nil { if err != nil {
return err return err
} }
log.SetOutput(f) l := slog.New(slog.NewTextHandler(file, &slog.HandlerOptions{
log.SetFlags(log.LstdFlags | log.Lshortfile) AddSource: true,
}))
slog.SetDefault(l)
return nil return nil
} }

View file

@ -2,7 +2,7 @@ package main
import ( import (
"flag" "flag"
"log" "log/slog"
"github.com/ayn2op/discordo/cmd" "github.com/ayn2op/discordo/cmd"
"github.com/ayn2op/discordo/internal/constants" "github.com/ayn2op/discordo/internal/constants"
@ -10,7 +10,6 @@ import (
) )
func main() { func main() {
// Declare and parse all flags first
token := flag.String("token", "", "authentication token") token := flag.String("token", "", "authentication token")
flag.Parse() flag.Parse()
@ -18,13 +17,13 @@ func main() {
if *token == "" { if *token == "" {
t, err := keyring.Get(constants.Name, "token") t, err := keyring.Get(constants.Name, "token")
if err != nil { if err != nil {
log.Println("failed to get token from keyring:", err) slog.Info("failed to get token from keyring", "err", err)
} else { } else {
*token = t *token = t
} }
} }
if err := cmd.Run(*token); err != nil { if err := cmd.Run(*token); err != nil {
log.Fatal(err) slog.Error("failed to run", "err", err)
} }
} }