Skip to content

Commit

Permalink
chore: simplify core config (#97)
Browse files Browse the repository at this point in the history
  • Loading branch information
williamsjokvist authored Dec 20, 2023
1 parent 3be66bc commit f8e5105
Show file tree
Hide file tree
Showing 8 changed files with 58 additions and 53 deletions.
2 changes: 1 addition & 1 deletion Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ tasks:
build:
desc: Build the app
vars:
ldflags: =-X 'main.appVersion=${APP_VERSION}' -X 'main.steamUsername=${STEAM_USERNAME}' -X 'main.steamPassword=${STEAM_PASSWORD}' -X 'main.capIDEmail=${CAP_ID_EMAIL}' -X 'main.capIDPassword=${CAP_ID_PASSWORD}' -X 'main.runHeadless="true"'
ldflags: -X 'main.runHeadless="true"' -X 'main.appVersion=${APP_VERSION}' -X 'main.steamUsername=${STEAM_USERNAME}' -X 'main.steamPassword=${STEAM_PASSWORD}' -X 'main.capIDEmail=${CAP_ID_EMAIL}' -X 'main.capIDPassword=${CAP_ID_PASSWORD}'
cmds:
- cmd: env GOOS=darwin GOARCH=amd64 wails build -ldflags="{{.ldflags}}"
platforms: [darwin]
Expand Down
27 changes: 9 additions & 18 deletions core/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,8 @@ import (
"strings"
"time"

"github.com/hashicorp/go-version"

"github.com/williamsjokvist/cfn-tracker/core/browser"
"github.com/williamsjokvist/cfn-tracker/core/config"
"github.com/williamsjokvist/cfn-tracker/core/data"
"github.com/williamsjokvist/cfn-tracker/core/errorsx"
"github.com/williamsjokvist/cfn-tracker/core/i18n"
Expand All @@ -23,38 +22,30 @@ import (
"github.com/williamsjokvist/cfn-tracker/core/tracker"
)

var (
SteamUsername string
SteamPassword string
CapIDEmail string
CapIDPassword string
AppVersion *version.Version
RefreshInterval time.Duration = 30 * time.Second
RunHeadless bool
)

// The CommandHandler is the interface between the GUI and the core
type CommandHandler struct {
ctx context.Context
tracker tracker.GameTracker
browser *browser.Browser
repo *data.CFNTrackerRepository
cfg *config.Config
}

func NewCommandHandler(browser *browser.Browser, trackerRepo *data.CFNTrackerRepository) *CommandHandler {
func NewCommandHandler(browser *browser.Browser, trackerRepo *data.CFNTrackerRepository, cfg *config.Config) *CommandHandler {
return &CommandHandler{
repo: trackerRepo,
browser: browser,
cfg: cfg,
}
}

// The CommandHandler needs the wails runtime context in order to emit events
func (ch *CommandHandler) AssignRuntimeContext(ctx context.Context) {
func (ch *CommandHandler) SetContext(ctx context.Context) {
ch.ctx = ctx
}

func (ch *CommandHandler) GetAppVersion() string {
return AppVersion.Original()
return ch.cfg.AppVersion
}

func (ch *CommandHandler) StopTracking() {
Expand All @@ -64,7 +55,7 @@ func (ch *CommandHandler) StopTracking() {

func (ch *CommandHandler) StartTracking(cfn string, restore bool) error {
log.Printf(`Starting tracking for %s, restoring = %v`, cfn, restore)
err := ch.tracker.Start(ch.ctx, cfn, restore, RefreshInterval)
err := ch.tracker.Start(ch.ctx, cfn, restore, 30*time.Second)
if err != nil {
log.Println(err)
if !errorsx.ContainsTrackingError(err) {
Expand Down Expand Up @@ -138,9 +129,9 @@ func (ch *CommandHandler) SelectGame(game string) error {
var err error
switch game {
case tracker.GameTypeSF6.String():
ch.tracker, err = tracker.MakeSF6Tracker(ch.ctx, ch.browser, CapIDEmail, CapIDPassword, ch.repo)
ch.tracker, err = tracker.MakeSF6Tracker(ch.ctx, ch.cfg, ch.browser, ch.repo)
case tracker.GameTypeSFV.String():
ch.tracker, err = tracker.MakeSFVTracker(ch.ctx, ch.browser, SteamUsername, SteamPassword)
ch.tracker, err = tracker.MakeSFVTracker(ch.ctx, ch.cfg, ch.browser)
}

if err != nil {
Expand Down
11 changes: 11 additions & 0 deletions core/config/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package config

type Config struct {
AppVersion string `envconfig:"APP_VERSION" default:"0.0.0"`
Headless bool `envconfig:"HEADLESS" default:"true"`
BrowserSourcePort int `envconfig:"BROWSER_SOURCE_PORT" default:"4242"`
SteamUsername string `envconfig:"STEAM_USERNAME" required:"true"`
SteamPassword string `envconfig:"STEAM_PASSWORD" required:"true"`
CapIDEmail string `envconfig:"CAP_ID_EMAIL" required:"true"`
CapIDPassword string `envconfig:"CAP_ID_PASSWORD" required:"true"`
}
8 changes: 4 additions & 4 deletions core/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import (
"time"

wails "github.com/wailsapp/wails/v2/pkg/runtime"

"github.com/williamsjokvist/cfn-tracker/core/config"
"github.com/williamsjokvist/cfn-tracker/core/model"
)

Expand All @@ -22,9 +24,7 @@ var js []byte
//go:embed static/default.css
var css []byte

const PORT = 4242

func Start(ctx context.Context) error {
func Start(ctx context.Context, cfg *config.Config) error {
log.Println(`Starting browser source server`)

var mhJson *[]byte
Expand Down Expand Up @@ -84,7 +84,7 @@ func Start(ctx context.Context) error {
}
})

if err := http.ListenAndServe(fmt.Sprintf(`:%d`, PORT), nil); err != nil {
if err := http.ListenAndServe(fmt.Sprintf(`:%s`, cfg.BrowserSourcePort), nil); err != nil {

Check failure on line 87 in core/server/server.go

View workflow job for this annotation

GitHub Actions / test

fmt.Sprintf format %s has arg cfg.BrowserSourcePort of wrong type int
return fmt.Errorf(`failed to launch browser source server: %v`, err)
}
return nil
Expand Down
9 changes: 5 additions & 4 deletions core/tracker/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/wailsapp/wails/v2/pkg/runtime"

"github.com/williamsjokvist/cfn-tracker/core/browser"
"github.com/williamsjokvist/cfn-tracker/core/config"
"github.com/williamsjokvist/cfn-tracker/core/data"
"github.com/williamsjokvist/cfn-tracker/core/errorsx"
"github.com/williamsjokvist/cfn-tracker/core/tracker/sf6"
Expand Down Expand Up @@ -41,11 +42,11 @@ func (s GameType) String() string {
}

// Make a SF6Tracker and expose it as a GameTracker
func MakeSF6Tracker(ctx context.Context, browser *browser.Browser, username, password string, trackerRepository *data.CFNTrackerRepository) (GameTracker, error) {
func MakeSF6Tracker(ctx context.Context, cfg *config.Config, browser *browser.Browser, trackerRepository *data.CFNTrackerRepository) (GameTracker, error) {
sf6Tracker := sf6.NewSF6Tracker(browser, trackerRepository)

authChan := make(chan sf6.AuthStatus)
go sf6Tracker.Authenticate(ctx, username, password, authChan)
go sf6Tracker.Authenticate(ctx, cfg.CapIDEmail, cfg.CapIDPassword, authChan)
for status := range authChan {
if status.Err != nil {
return nil, errorsx.NewError(http.StatusUnauthorized, status.Err)
Expand All @@ -63,9 +64,9 @@ func MakeSF6Tracker(ctx context.Context, browser *browser.Browser, username, pas
}

// Make a SFVTracker and expose it as a GameTracker
func MakeSFVTracker(ctx context.Context, browser *browser.Browser, username string, password string) (GameTracker, error) {
func MakeSFVTracker(ctx context.Context, cfg *config.Config, browser *browser.Browser) (GameTracker, error) {
sfvTracker := sfv.NewSFVTracker(browser)
err := sfvTracker.Authenticate(ctx, username, password, false)
err := sfvTracker.Authenticate(ctx, cfg.SteamUsername, cfg.SteamPassword, false)
if err != nil {
return nil, fmt.Errorf(`auth err: %v`, err)
}
Expand Down
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ require github.com/go-rod/rod v0.112.2
require (
github.com/jmoiron/sqlx v1.3.5
github.com/joho/godotenv v1.4.0
github.com/kelseyhightower/envconfig v1.4.0
github.com/mattn/go-sqlite3 v1.14.17
github.com/shirou/gopsutil v3.21.11+incompatible
github.com/wailsapp/wails/v2 v2.7.0
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g=
github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ=
github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg=
github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8=
github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
Expand Down
51 changes: 25 additions & 26 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ import (
"html/template"
"log"
"net/http"
"os"

"github.com/hashicorp/go-version"
"github.com/joho/godotenv"
"github.com/kelseyhightower/envconfig"
"github.com/wailsapp/wails/v2"
"github.com/wailsapp/wails/v2/pkg/logger"
"github.com/wailsapp/wails/v2/pkg/options"
Expand All @@ -22,6 +22,7 @@ import (

"github.com/williamsjokvist/cfn-tracker/core"
"github.com/williamsjokvist/cfn-tracker/core/browser"
"github.com/williamsjokvist/cfn-tracker/core/config"
"github.com/williamsjokvist/cfn-tracker/core/data"
"github.com/williamsjokvist/cfn-tracker/core/data/sql"
"github.com/williamsjokvist/cfn-tracker/core/data/txt"
Expand All @@ -47,30 +48,28 @@ var errorTmpl []byte
//go:embed build/appicon.png
var icon []byte

var cfg config.Config

func init() {
cleanUpProcess()

if capIDEmail == `` || capIDPassword == `` ||
steamUsername == `` || steamPassword == `` || appVersion == `` {
err := godotenv.Load(`.env`)
if err != nil {
log.Fatalf(`missing .env file: %v`, err)
err := godotenv.Load(`.env`)
if err != nil {
log.Println(fmt.Errorf(`missing .env file: %w`, err))
cfg = config.Config{
AppVersion: appVersion,
Headless: runHeadless == `true`,
SteamUsername: steamUsername,
SteamPassword: steamPassword,
CapIDEmail: capIDEmail,
CapIDPassword: capIDPassword,
BrowserSourcePort: 4242,
}

steamUsername = os.Getenv(`STEAM_USERNAME`)
steamPassword = os.Getenv(`STEAM_PASSWORD`)
capIDEmail = os.Getenv(`CAP_ID_EMAIL`)
capIDPassword = os.Getenv(`CAP_ID_PASSWORD`)
appVersion = os.Getenv(`APP_VERSION`)
runHeadless = os.Getenv(`RUN_HEADLESS`)
return
}
err = envconfig.Process("", &cfg)
if err != nil {
log.Fatalf(`failed to process envconfig: %v`, err)
}

core.AppVersion, _ = version.NewVersion(appVersion)
core.SteamUsername = steamUsername
core.SteamPassword = steamPassword
core.RunHeadless = runHeadless == `true`
core.CapIDEmail = capIDEmail
core.CapIDPassword = capIDPassword
}

func main() {
Expand Down Expand Up @@ -104,7 +103,7 @@ func main() {
},
})
}
appBrowser, err := browser.NewBrowser(runHeadless == `true`)
appBrowser, err := browser.NewBrowser(cfg.Headless)
if err != nil {
closeWithError(fmt.Errorf(`failed to launch browser: %v`, err))
return
Expand All @@ -120,9 +119,9 @@ func main() {
return
}
trackerRepo := data.NewCFNTrackerRepository(sqlDb, txtDb)
cmdHandler := core.NewCommandHandler(appBrowser, trackerRepo)
cmdHandler := core.NewCommandHandler(appBrowser, trackerRepo, &cfg)

appVer, err := version.NewVersion(appVersion)
appVer, err := version.NewVersion(cfg.AppVersion)
if err != nil {
closeWithError(fmt.Errorf(`bad app version: %w`, err))
return
Expand Down Expand Up @@ -164,7 +163,7 @@ func main() {
},
},
OnStartup: func(ctx context.Context) {
cmdHandler.AssignRuntimeContext(ctx)
cmdHandler.SetContext(ctx)

if appVer.LessThan(latestVersion) {
log.Println(`Has new version: `, latestVersion.String())
Expand All @@ -173,7 +172,7 @@ func main() {
log.Println(`No new version, running: `, appVer.String())
}

go server.Start(ctx)
go server.Start(ctx, &cfg)
},
OnShutdown: func(_ context.Context) {
appBrowser.Page.Browser().Close()
Expand Down

0 comments on commit f8e5105

Please sign in to comment.