Switch to kong for CLI

This commit is contained in:
ayn2op 2023-06-05 15:55:48 +05:30
parent 5870e3e764
commit 907b9eb1ce
17 changed files with 160 additions and 169 deletions

View file

@ -1,4 +1,4 @@
package main
package run
import (
"image"
@ -6,7 +6,7 @@ import (
_ "image/png"
"net/http"
"github.com/ayn2op/discordo/internal/config"
"github.com/ayn2op/discordo/config"
"github.com/diamondburned/arikawa/v3/discord"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"

View file

@ -1,4 +1,4 @@
package main
package run
import (
"fmt"
@ -6,7 +6,7 @@ import (
"sort"
"strings"
"github.com/ayn2op/discordo/internal/config"
"github.com/ayn2op/discordo/config"
"github.com/diamondburned/arikawa/v3/discord"
"github.com/diamondburned/arikawa/v3/gateway"
"github.com/gdamore/tcell/v2"

View file

@ -1,7 +1,7 @@
package main
package run
import (
"github.com/ayn2op/discordo/internal/config"
"github.com/ayn2op/discordo/config"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
)

View file

@ -1,4 +1,4 @@
package main
package run
import (
"log"
@ -7,7 +7,7 @@ import (
"strings"
"github.com/atotto/clipboard"
"github.com/ayn2op/discordo/internal/config"
"github.com/ayn2op/discordo/config"
"github.com/diamondburned/arikawa/v3/api"
"github.com/diamondburned/arikawa/v3/discord"
"github.com/diamondburned/arikawa/v3/utils/json/option"

View file

@ -1,4 +1,4 @@
package main
package run
import (
"fmt"
@ -7,8 +7,8 @@ import (
"time"
"github.com/atotto/clipboard"
"github.com/ayn2op/discordo/internal/config"
"github.com/ayn2op/discordo/pkg/markdown"
"github.com/ayn2op/discordo/config"
"github.com/ayn2op/discordo/markdown"
"github.com/diamondburned/arikawa/v3/discord"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"

77
cmd/run/run.go Normal file
View file

@ -0,0 +1,77 @@
package run
import (
"log"
"os"
"path/filepath"
"github.com/ayn2op/discordo/config"
"github.com/ayn2op/discordo/ui"
"github.com/rivo/tview"
)
var (
discordState *State
app = tview.NewApplication()
mainFlex *MainFlex
)
type Cmd struct {
Token string `default:"${token}" help:"The authentication token." short:"t"`
Config string `default:"${configPath}" help:"The path of the configuration file." short:"l" type:"path"`
Log string `default:"${logPath}" help:"The path of the log file." short:"c" type:"path"`
}
func (r *Cmd) Run() error {
err := os.MkdirAll(filepath.Dir(r.Config), os.ModePerm)
if err != nil {
return err
}
err = config.Load(r.Config)
if err != nil {
return err
}
err = os.MkdirAll(filepath.Dir(r.Log), os.ModePerm)
if err != nil {
return err
}
f, err := os.OpenFile(r.Log, os.O_CREATE|os.O_WRONLY, os.ModePerm)
if err != nil {
return err
}
log.SetOutput(f)
log.SetFlags(log.LstdFlags | log.Llongfile)
if r.Token == "" {
lf := ui.NewLoginForm()
go func() {
mainFlex = newMainFlex()
if err := openState(<-lf.Token); err != nil {
log.Fatal(err)
}
app.QueueUpdateDraw(func() {
app.SetRoot(mainFlex, true)
})
}()
app.SetRoot(lf, true)
} else {
mainFlex = newMainFlex()
if err := openState(r.Token); err != nil {
log.Fatal(err)
}
app.SetRoot(mainFlex, true)
}
app.EnableMouse(config.Current.Mouse)
return app.Run()
}

View file

@ -1,4 +1,4 @@
package main
package run
import (
"context"
@ -6,7 +6,7 @@ import (
"log"
"runtime"
"github.com/ayn2op/discordo/internal/config"
"github.com/ayn2op/discordo/config"
"github.com/diamondburned/arikawa/v3/api"
"github.com/diamondburned/arikawa/v3/gateway"
"github.com/diamondburned/arikawa/v3/state"

View file

@ -1,7 +1,6 @@
package config
import (
"errors"
"os"
"path/filepath"
@ -38,53 +37,8 @@ func defConfig() Config {
}
}
func getPath(optionalPath string) (string, error) {
// Trigger an error if config flag used but is empty.
if optionalPath == "" {
return "", errors.New("Optional path cannot be empty.")
}
// Use the path provided by flags.
if optionalPath != "none" {
return optionalPath, nil
}
// Use the default for the OS.
path, err := os.UserConfigDir()
if err != nil {
return "", err
}
path = filepath.Join(path, Name)
if err != nil {
return "", err
}
path = filepath.Join(path, "config.yml")
if err != nil {
return "", err
}
return path, nil
}
func Load(optionalPath string) error {
path, err := getPath(optionalPath)
if err != nil {
return err
}
// Split the directory from the configuration file.
dir, file := filepath.Split(path)
// Create the configuration directory if it does not exist already.
err = os.MkdirAll(dir, os.ModePerm)
if err != nil {
return err
}
path = filepath.Join(dir, file)
_, err = os.Stat(path)
func Load(path string) error {
_, err := os.Stat(path)
if os.IsNotExist(err) {
f, err := os.Create(path)
if err != nil {
@ -111,3 +65,13 @@ func Load(optionalPath string) error {
return nil
}
func DefaultPath() string {
path, _ := os.UserConfigDir()
return filepath.Join(path, Name, "config.yml")
}
func DefaultLogPath() string {
path, _ := os.UserCacheDir()
return filepath.Join(path, Name, "logs.txt")
}

1
go.mod
View file

@ -3,6 +3,7 @@ module github.com/ayn2op/discordo
go 1.20
require (
github.com/alecthomas/kong v0.7.1
github.com/atotto/clipboard v0.1.4
github.com/diamondburned/arikawa/v3 v3.3.0
github.com/gdamore/tcell/v2 v2.6.0

42
go.sum
View file

@ -1,15 +1,14 @@
github.com/alecthomas/assert/v2 v2.1.0 h1:tbredtNcQnoSd3QBhQWI7QZ3XHOVkw1Moklp2ojoH/0=
github.com/alecthomas/kong v0.7.1 h1:azoTh0IOfwlAX3qN9sHWTxACE2oV8Bg2gAwBsMwDQY4=
github.com/alecthomas/kong v0.7.1/go.mod h1:n1iCIO2xS46oE8ZfYCNDqdR0b0wZNrXAIAqro/2132U=
github.com/alecthomas/repr v0.1.0 h1:ENn2e1+J3k09gyj2shc0dHr/yjaWSHRlrJ4DPMevDqE=
github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVKJUX0=
github.com/alessio/shellescape v1.4.1/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30=
github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0=
github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0=
github.com/danieljoos/wincred v1.2.0 h1:ozqKHaLK0W/ii4KVbbvluM91W2H3Sh0BncbUNPS7jLE=
github.com/danieljoos/wincred v1.2.0/go.mod h1:FzQLLMKBFdvu+osBrnFODiv32YGwCfx0SkRa/eYHgec=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/diamondburned/arikawa/v3 v3.2.0 h1:aBUhg94pxblT6ks4EV7qxEk44tnl0ico67ydqjVnv9g=
github.com/diamondburned/arikawa/v3 v3.2.0/go.mod h1:5jBSNnp82Z/EhsKa6Wk9FsOqSxfVkNZDTDBPOj47LpY=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/diamondburned/arikawa/v3 v3.3.0 h1:S85dCYFsNsyGxG3JYYiEfW31JIJgNaHgUDNsEOf/aRg=
github.com/diamondburned/arikawa/v3 v3.3.0/go.mod h1:+ifmDonP/JdBiUOzZmVReEjPTHDUSkyqqRRmjSf9NE8=
github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko=
@ -23,6 +22,7 @@ github.com/gorilla/schema v1.2.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlI
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
@ -30,32 +30,15 @@ github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rivo/tview v0.0.0-20230325211341-281d14d896d7 h1:8sjyhdBA9HmxHGUeAM/43uSHfyFhFodbxekw2mYhpo0=
github.com/rivo/tview v0.0.0-20230325211341-281d14d896d7/go.mod h1:nVwGv4MP47T0jvlk7KuTTjjuSmrGO4JF0iaiNt4bufE=
github.com/rivo/tview v0.0.0-20230330183452-5796b0cd5c1f h1:vpjWdGBgikHYD4ruBvDINMxwdh5UWVck9yOyrwFktMo=
github.com/rivo/tview v0.0.0-20230330183452-5796b0cd5c1f/go.mod h1:nVwGv4MP47T0jvlk7KuTTjjuSmrGO4JF0iaiNt4bufE=
github.com/rivo/tview v0.0.0-20230504092913-51ba3688bcdd h1:Y79siDYMHXtNhvX1VJHW5gzfplM0IowrtomKX9TshmI=
github.com/rivo/tview v0.0.0-20230504092913-51ba3688bcdd/go.mod h1:nVwGv4MP47T0jvlk7KuTTjjuSmrGO4JF0iaiNt4bufE=
github.com/rivo/tview v0.0.0-20230511053024-822bd067b165 h1:YMycYmUdmLI7ZTn86HUEDM8E8fCMz7twtysBW3SlG0c=
github.com/rivo/tview v0.0.0-20230511053024-822bd067b165/go.mod h1:nVwGv4MP47T0jvlk7KuTTjjuSmrGO4JF0iaiNt4bufE=
github.com/rivo/tview v0.0.0-20230525073430-4a1f85bb2219 h1:Wt34AcMCfhtqhM8bCLKpZvIc7VNwU83B5ABooKNtFBc=
github.com/rivo/tview v0.0.0-20230525073430-4a1f85bb2219/go.mod h1:nVwGv4MP47T0jvlk7KuTTjjuSmrGO4JF0iaiNt4bufE=
github.com/rivo/tview v0.0.0-20230530133550-8bd761dda819 h1:qRMCGgwKl66uWe7Hnzl5bCvZlfrLNIxOx7K00j5XeNc=
github.com/rivo/tview v0.0.0-20230530133550-8bd761dda819/go.mod h1:nVwGv4MP47T0jvlk7KuTTjjuSmrGO4JF0iaiNt4bufE=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/zalando/go-keyring v0.2.2 h1:f0xmpYiSrHtSNAVgwip93Cg8tuF45HJM6rHq/A5RI/4=
github.com/zalando/go-keyring v0.2.2/go.mod h1:sI3evg9Wvpw3+n4SqplGSJUMwtDeROfD4nsFz4z9PG0=
github.com/zalando/go-keyring v0.2.3 h1:v9CUu9phlABObO4LPWycf+zwMG7nlbb3t/B5wa97yms=
github.com/zalando/go-keyring v0.2.3/go.mod h1:HL4k+OXQfJUWaMnqyuSOc0drfGPX2b51Du6K+MRgZMk=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@ -71,26 +54,16 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211001092434-39dca1131b70/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw=
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ=
golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@ -98,8 +71,6 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@ -111,6 +82,5 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

37
lol.yml Normal file
View file

@ -0,0 +1,37 @@
mouse: true
messages_limit: 50
timestamps: false
editor: default
keys:
cancel: Esc
guilds_tree:
focus: Alt+Rune[g]
toggle: Alt+Rune[b]
messages_text:
focus: Alt+Rune[m]
show_image: Rune[i]
copy_content: Rune[c]
reply: Rune[r]
reply_mention: Rune[R]
select_reply: Rune[s]
select_previous: Up
select_next: Down
select_first: Home
select_last: End
message_input:
focus: Alt+Rune[i]
send: Enter
paste: Ctrl+V
launch_editor: Ctrl+E
theme:
border: false
border_color: default
border_padding: [0, 0, 1, 1]
title_color: pink
background_color: violet
guilds_tree:
graphics: true
messages_text:
author_color: aqua
reply_indicator: ╭
message_input: {}

84
main.go
View file

@ -1,86 +1,28 @@
package main
import (
"flag"
"log"
"os"
"path/filepath"
"github.com/ayn2op/discordo/internal/config"
"github.com/ayn2op/discordo/internal/ui"
"github.com/rivo/tview"
"github.com/alecthomas/kong"
"github.com/ayn2op/discordo/cmd/run"
"github.com/ayn2op/discordo/config"
"github.com/zalando/go-keyring"
)
var (
token string
configPath string
discordState *State
app = tview.NewApplication()
mainFlex *MainFlex
)
func init() {
t, _ := keyring.Get(config.Name, "token")
flag.StringVar(&token, "token", t, "The authentication token.")
flag.StringVar(&configPath, "config", "none", "Optional alternative configuration file.")
path, err := os.UserCacheDir()
if err != nil {
log.Fatal(err)
}
path = filepath.Join(path, config.Name)
err = os.MkdirAll(path, os.ModePerm)
if err != nil {
log.Fatal(err)
}
path = filepath.Join(path, "logs.txt")
f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, os.ModePerm)
if err != nil {
log.Fatal(err)
}
log.SetOutput(f)
log.SetFlags(log.LstdFlags | log.Llongfile)
var cli struct {
Run run.Cmd `cmd:"" default:"withargs"`
}
func main() {
flag.Parse()
t, _ := keyring.Get(config.Name, "token")
ctx := kong.Parse(&cli, kong.Vars{
"token": t,
"configPath": config.DefaultPath(),
"logPath": config.DefaultLogPath(),
})
if err := config.Load(configPath); err != nil {
log.Fatal(err)
}
if token == "" {
lf := ui.NewLoginForm()
go func() {
mainFlex = newMainFlex()
if err := openState(<-lf.Token); err != nil {
log.Fatal(err)
}
app.QueueUpdateDraw(func() {
app.SetRoot(mainFlex, true)
})
}()
app.SetRoot(lf, true)
} else {
mainFlex = newMainFlex()
if err := openState(token); err != nil {
log.Fatal(err)
}
app.SetRoot(mainFlex, true)
}
app.EnableMouse(config.Current.Mouse)
if err := app.Run(); err != nil {
err := ctx.Run()
if err != nil {
log.Fatal(err)
}
}

View file

@ -3,7 +3,7 @@ package ui
import (
"log"
"github.com/ayn2op/discordo/internal/config"
"github.com/ayn2op/discordo/config"
"github.com/diamondburned/arikawa/v3/api"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"