Read and save colors for gains, losses and tags

master
joce 3 years ago
parent e3464aca1f
commit f20930d634
  1. 47
      profile.go

@ -8,10 +8,15 @@ import (
"encoding/json" "encoding/json"
"io/ioutil" "io/ioutil"
"sort" "sort"
"strings"
"github.com/Knetic/govaluate" "github.com/Knetic/govaluate"
) )
const defaultGainColor = "green"
const defaultLossColor = "red"
const defaultTagColor = "yellow"
// Profile manages Mop program settings as defined by user (ex. list of // Profile manages Mop program settings as defined by user (ex. list of
// stock tickers). The settings are serialized using JSON and saved in // stock tickers). The settings are serialized using JSON and saved in
// the ~/.moprc file. // the ~/.moprc file.
@ -23,11 +28,32 @@ type Profile struct {
Ascending bool // True when sort order is ascending. Ascending bool // True when sort order is ascending.
Grouped bool // True when stocks are grouped by advancing/declining. Grouped bool // True when stocks are grouped by advancing/declining.
Filter string // Filter in human form Filter string // Filter in human form
TickerColors struct { // Ticker colors
Gain string
Loss string
Tag string
}
filterExpression *govaluate.EvaluableExpression // The filter as a govaluate expression filterExpression *govaluate.EvaluableExpression // The filter as a govaluate expression
selectedColumn int // Stores selected column number when the column editor is active. selectedColumn int // Stores selected column number when the column editor is active.
filename string // Path to the file in which the configuration is stored filename string // Path to the file in which the configuration is stored
} }
func IsSupportedColor(colorName string) bool {
switch colorName {
case
"black",
"red",
"green",
"yellow",
"blue",
"magenta",
"cyan",
"white":
return true
}
return false
}
// Creates the profile and attempts to load the settings from ~/.moprc file. // Creates the profile and attempts to load the settings from ~/.moprc file.
// If the file is not there it gets created with default values. // If the file is not there it gets created with default values.
func NewProfile(filename string) *Profile { func NewProfile(filename string) *Profile {
@ -41,9 +67,28 @@ func NewProfile(filename string) *Profile {
profile.SortColumn = 0 // Stock quotes are sorted by ticker name. profile.SortColumn = 0 // Stock quotes are sorted by ticker name.
profile.Ascending = true // A to Z. profile.Ascending = true // A to Z.
profile.Filter = "" profile.Filter = ""
profile.TickerColors.Gain = defaultGainColor
profile.TickerColors.Loss = defaultLossColor
profile.TickerColors.Tag = defaultTagColor
profile.Save() profile.Save()
} else { } else {
json.Unmarshal(data, profile) json.Unmarshal(data, profile)
profile.TickerColors.Gain = strings.ToLower(profile.TickerColors.Gain)
if !IsSupportedColor(profile.TickerColors.Gain) {
profile.TickerColors.Gain = defaultGainColor
}
profile.TickerColors.Loss = strings.ToLower(profile.TickerColors.Loss)
if !IsSupportedColor(profile.TickerColors.Loss) {
profile.TickerColors.Loss = defaultLossColor
}
profile.TickerColors.Tag = strings.ToLower(profile.TickerColors.Tag)
if !IsSupportedColor(profile.TickerColors.Tag) {
profile.TickerColors.Tag = defaultTagColor
}
profile.SetFilter(profile.Filter) profile.SetFilter(profile.Filter)
} }
profile.selectedColumn = -1 profile.selectedColumn = -1
@ -61,7 +106,7 @@ func (profile *Profile) Save() error {
return ioutil.WriteFile(profile.filename, data, 0644) return ioutil.WriteFile(profile.filename, data, 0644)
} }
// AddTickers updates the list of existing tikers to add the new ones making // AddTickers updates the list of existing tickers to add the new ones making
// sure there are no duplicates. // sure there are no duplicates.
func (profile *Profile) AddTickers(tickers []string) (added int, err error) { func (profile *Profile) AddTickers(tickers []string) (added int, err error) {
added, err = 0, nil added, err = 0, nil

Loading…
Cancel
Save