From 3cacc621960fe2fba6ddec79835ba6262e03ec15 Mon Sep 17 00:00:00 2001 From: aditya-k2 Date: Mon, 22 Jan 2024 11:01:03 +0530 Subject: [PATCH] Change some config and flag options Earlier the flags couldn't override with false values, that has been changed. Also change how errors are handled while the config is been read. --- config/config.go | 54 ++++++++++++++++++++++++++++++++++-------------- config/flags.go | 22 ++++++++++---------- main.go | 4 +++- ui/app.go | 8 +++---- ui/progress.go | 3 ++- ui/styles.go | 31 +++++++++++++-------------- 6 files changed, 74 insertions(+), 48 deletions(-) diff --git a/config/config.go b/config/config.go index d1943a6..af43fee 100644 --- a/config/config.go +++ b/config/config.go @@ -5,6 +5,8 @@ import ( "os" "path/filepath" + "errors" + "github.com/aditya-K2/utils" "github.com/fsnotify/fsnotify" "github.com/spf13/viper" @@ -20,6 +22,13 @@ var ( buildDate = "unknown" ) +const ( + ImageHidden string = "hidden" + ImageShow string = "show" + CornersRounded string = "rounded" + CornersDefault string = "default" +) + type configS struct { CacheDir string `yaml:"cache_dir" mapstructure:"cache_dir"` RedrawInterval int `yaml:"redraw_interval" mapstructure:"redraw_interval"` @@ -29,8 +38,8 @@ type configS struct { AdditionalPaddingY int `yaml:"additional_padding_y" mapstructure:"additional_padding_y"` ImageWidthExtraX int `yaml:"image_width_extra_x" mapstructure:"image_width_extra_x"` ImageWidthExtraY int `yaml:"image_width_extra_y" mapstructure:"image_width_extra_y"` - HideImage bool `yaml:"hide_image" mapstructure:"hide_image"` - RoundedCorners bool `yaml:"rounded_corners" mapstructure:"rounded_corners"` + Image string `yaml:"image" mapstructure:"image"` + Corners string `yaml:"corners" mapstructure:"corners"` UseIcons bool `yaml:"use_icons" mapstructure:"use_icons"` } @@ -40,10 +49,12 @@ func newConfigS() *configS { RedrawInterval: 500, Colors: NewColors(), Icons: NewIcons(), + Corners: CornersDefault, + Image: ImageShow, } } -func ReadConfig() { +func ReadConfig() error { parseFlags() if Flags.Version { @@ -58,12 +69,12 @@ func ReadConfig() { if configErr != nil { utils.Print("RED", "Couldn't get $XDG_CONFIG!") - panic(configErr) + return configErr } if cacheErr != nil { utils.Print("RED", "Couldn't get CACHE DIR!") - panic(cacheErr) + return cacheErr } viper.SetConfigName("config") @@ -80,19 +91,29 @@ func ReadConfig() { Config.CacheDir = utils.ExpandHomeDir(Config.CacheDir) } - // Flags have precedence over config values - useFlags := func() { - if Flags.HideImage != false { - Config.HideImage = Flags.HideImage - } - if Flags.RoundedCorners != false { - Config.RoundedCorners = Flags.RoundedCorners - } - if Flags.UseIcons != false { - Config.UseIcons = Flags.UseIcons + if Flags.Image != "" { + if Flags.Image == ImageHidden || Flags.Image == ImageShow { + fmt.Println(Flags.Image) + fmt.Println("Here") + Config.Image = Flags.Image + } else { + return errors.New(fmt.Sprintf("Undefined value provided to --image flag: '%s' ( accepted: %s | %s )", Flags.Image, ImageHidden, ImageShow)) } + fmt.Println(Config.Image) + } + + if Flags.Corners != "" { + if Flags.Corners == CornersRounded || Flags.Corners == CornersDefault { + Config.Corners = Flags.Corners + } else { + return errors.New(fmt.Sprintf("Undefined value provided to --corners flag: '%s' ( accepted: %s | %s )", Flags.Corners, CornersRounded, CornersDefault)) + } + Config.Corners = Flags.Corners + } + + if Flags.UseIcons != false { + Config.UseIcons = Flags.UseIcons } - useFlags() viper.OnConfigChange(func(e fsnotify.Event) { viper.Unmarshal(Config) @@ -104,6 +125,7 @@ func ReadConfig() { viper.WatchConfig() expandHome() + return nil } func GenerateMappings() map[string]map[string]map[Key]string { diff --git a/config/flags.go b/config/flags.go index 81c6d7c..bd776e4 100644 --- a/config/flags.go +++ b/config/flags.go @@ -9,25 +9,25 @@ var ( ) type Flag struct { - ConfigPath string - Version bool - HideImage bool - RoundedCorners bool - UseIcons bool + ConfigPath string + Version bool + Image string + Corners string + UseIcons bool } func parseFlags() { - flag.StringVar(&Flags.ConfigPath, "c", userConfigPath, - "Specify The Directory to check for config.yml file.") - flag.BoolVar(&Flags.HideImage, "hide-image", Config.HideImage, - "Do not display the cover art image.") flag.BoolVar(&Flags.Version, "v", false, "Do not display the cover art image.") flag.BoolVar(&Flags.Version, "version", false, "Do not display the cover art image.") - flag.BoolVar(&Flags.RoundedCorners, "rounded-corners", Config.RoundedCorners, - "Enable Rounded Corners") flag.BoolVar(&Flags.UseIcons, "icons", Config.UseIcons, "Use Icons") + flag.StringVar(&Flags.ConfigPath, "c", userConfigPath, + "Specify The Directory to check for config.yml file.") + flag.StringVar(&Flags.Image, "image", "", + "Show or Hide Image ( 'show' | 'hidden' )") + flag.StringVar(&Flags.Corners, "corners", "", + "Enable or disable Rounded Corners ( 'rounded' | 'default' )") flag.Parse() } diff --git a/main.go b/main.go index c8ef527..1260d64 100644 --- a/main.go +++ b/main.go @@ -7,7 +7,9 @@ import ( ) func main() { - config.ReadConfig() + if err := config.ReadConfig(); err != nil { + panic(err) + } if err := spt.InitClient(); err != nil { panic(err) } diff --git a/ui/app.go b/ui/app.go index 3dcdc4a..4f389d1 100644 --- a/ui/app.go +++ b/ui/app.go @@ -44,7 +44,7 @@ func onConfigChange() { setStyles() setIcons() setBorderRunes() - if coverArt != nil && !cfg.HideImage { + if coverArt != nil && cfg.Image == config.ImageShow { coverArt.RefreshState() } } @@ -272,7 +272,7 @@ func NewApplication() *tview.Application { }, coverArt), } - if !cfg.HideImage { + if cfg.Image == config.ImageShow { globalActions = utils.MergeMaps(globalActions, imageActions) } @@ -415,7 +415,7 @@ func NewApplication() *tview.Application { AddItem(navMenu, 6, 3, false). AddItem(playlistNav, 0, 6, false) - if !cfg.HideImage { + if cfg.Image == config.ImageShow { navFlex.AddItem(coverArt, 9, 3, false) } @@ -438,7 +438,7 @@ func NewApplication() *tview.Application { // Start Routines InitNotifier() - if !cfg.HideImage { + if cfg.Image == config.ImageShow { go rectWatcher() } else { // Start Progress Routine directly diff --git a/ui/progress.go b/ui/progress.go index a778133..88a848e 100644 --- a/ui/progress.go +++ b/ui/progress.go @@ -8,6 +8,7 @@ import ( "github.com/gdamore/tcell/v2" "github.com/zmb3/spotify/v2" + "github.com/aditya-K2/gspt/config" "github.com/aditya-K2/gspt/spt" "github.com/aditya-K2/tview" "github.com/aditya-K2/utils" @@ -104,7 +105,7 @@ func RefreshProgress(force bool) { if state.Item != nil { ctrackId = state.Item.ID } - if !cfg.HideImage { + if cfg.Image == config.ImageShow { coverArt.RefreshState() } } diff --git a/ui/styles.go b/ui/styles.go index 1efc6db..54b028d 100644 --- a/ui/styles.go +++ b/ui/styles.go @@ -1,12 +1,13 @@ package ui import ( + "github.com/aditya-K2/gspt/config" "github.com/aditya-K2/tview" ) var ( - borders = map[bool]map[string]rune{ - true: { + borders = map[string]map[string]rune{ + config.CornersRounded: { "TopLeft": '╭', "TopRight": '╮', "BottomRight": '╯', @@ -20,7 +21,7 @@ var ( "VerticalFocus": '│', "HorizontalFocus": '─', }, - false: { + config.CornersDefault: { "TopLeft": tview.Borders.TopLeft, "TopRight": tview.Borders.TopRight, "BottomRight": tview.Borders.BottomRight, @@ -38,18 +39,18 @@ var ( ) func setBorderRunes() { - tview.Borders.TopLeft = borders[cfg.RoundedCorners]["TopLeft"] - tview.Borders.TopRight = borders[cfg.RoundedCorners]["TopRight"] - tview.Borders.BottomRight = borders[cfg.RoundedCorners]["BottomRight"] - tview.Borders.BottomLeft = borders[cfg.RoundedCorners]["BottomLeft"] - tview.Borders.Vertical = borders[cfg.RoundedCorners]["Vertical"] - tview.Borders.Horizontal = borders[cfg.RoundedCorners]["Horizontal"] - tview.Borders.TopLeftFocus = borders[cfg.RoundedCorners]["TopLeftFocus"] - tview.Borders.TopRightFocus = borders[cfg.RoundedCorners]["TopRightFocus"] - tview.Borders.BottomRightFocus = borders[cfg.RoundedCorners]["BottomRightFocus"] - tview.Borders.BottomLeftFocus = borders[cfg.RoundedCorners]["BottomLeftFocus"] - tview.Borders.VerticalFocus = borders[cfg.RoundedCorners]["VerticalFocus"] - tview.Borders.HorizontalFocus = borders[cfg.RoundedCorners]["HorizontalFocus"] + tview.Borders.TopLeft = borders[cfg.Corners]["TopLeft"] + tview.Borders.TopRight = borders[cfg.Corners]["TopRight"] + tview.Borders.BottomRight = borders[cfg.Corners]["BottomRight"] + tview.Borders.BottomLeft = borders[cfg.Corners]["BottomLeft"] + tview.Borders.Vertical = borders[cfg.Corners]["Vertical"] + tview.Borders.Horizontal = borders[cfg.Corners]["Horizontal"] + tview.Borders.TopLeftFocus = borders[cfg.Corners]["TopLeftFocus"] + tview.Borders.TopRightFocus = borders[cfg.Corners]["TopRightFocus"] + tview.Borders.BottomRightFocus = borders[cfg.Corners]["BottomRightFocus"] + tview.Borders.BottomLeftFocus = borders[cfg.Corners]["BottomLeftFocus"] + tview.Borders.VerticalFocus = borders[cfg.Corners]["VerticalFocus"] + tview.Borders.HorizontalFocus = borders[cfg.Corners]["HorizontalFocus"] } func setStyles() {