discordo/internal/ui/root/msg.go

63 lines
1.2 KiB
Go

package root
import (
"log/slog"
"github.com/ayn2op/discordo/internal/consts"
"github.com/ayn2op/tview"
"github.com/zalando/go-keyring"
"golang.design/x/clipboard"
)
const (
keyringService = consts.Name
keyringUser = "token"
)
type tokenMsg string
func useToken(token string) tview.Cmd {
return func() tview.Msg {
return tokenMsg(token)
}
}
type loginMsg struct{}
func getToken() tview.Cmd {
return func() tview.Msg {
token, err := keyring.Get(keyringService, keyringUser)
if err != nil {
slog.Info("failed to retrieve token from keyring", "err", err)
return loginMsg{}
}
return tokenMsg(token)
}
}
func setToken(token string) tview.Cmd {
return func() tview.Msg {
if err := keyring.Set(keyringService, keyringUser, token); err != nil {
slog.Error("failed to set token to keyring", "err", err)
}
return nil
}
}
func deleteToken() tview.Cmd {
return func() tview.Msg {
if err := keyring.Delete(keyringService, keyringUser); err != nil {
slog.Error("failed to delete token from keyring", "err", err)
}
return nil
}
}
func initClipboard() tview.Cmd {
return func() tview.Msg {
if err := clipboard.Init(); err != nil {
slog.Error("failed to init clipboard", "err", err)
}
return nil
}
}