feat: replace log with slog
This commit is contained in:
parent
ce69326513
commit
5ccd4cd679
8 changed files with 48 additions and 40 deletions
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
7
main.go
7
main.go
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue