From 2c40c7f8bd7fdac6adff7897899d51ead99d70d0 Mon Sep 17 00:00:00 2001 From: Michael Dvorkin Date: Sun, 14 Jul 2013 14:50:39 -0700 Subject: [PATCH] Refactored profile --- lib/line_editor.go | 2 +- lib/profile.go | 50 +++++++++++++++++++++++++--------------------- mop.go | 16 +++++++-------- 3 files changed, 36 insertions(+), 32 deletions(-) diff --git a/lib/line_editor.go b/lib/line_editor.go index 785a406..c12f2f3 100644 --- a/lib/line_editor.go +++ b/lib/line_editor.go @@ -3,7 +3,7 @@ package mop import ( -"fmt" + "fmt" "github.com/nsf/termbox-go" ) diff --git a/lib/profile.go b/lib/profile.go index c6c09a4..f1d182c 100644 --- a/lib/profile.go +++ b/lib/profile.go @@ -9,49 +9,53 @@ import ( "strings" ) -const rcfile = "/.moprc" +const moprc = "/.moprc" type Profile struct { - MarketRefreshRate int - QuotesRefreshRate int - Tickers []string - SortBy string - SortOrder string + MarketRefresh int + QuotesRefresh int + Tickers []string + SortBy string + SortOrder string } -var profile Profile - //----------------------------------------------------------------------------- -func LoadProfile() string { - data, err := ioutil.ReadFile(defaultProfile()) +func (self *Profile) Initialize() *Profile { + data, err := ioutil.ReadFile(self.default_file_name()) if err != nil { // Set default values. - profile.MarketRefreshRate = 12 - profile.QuotesRefreshRate = 5 - profile.Tickers = []string{"AAPL", "C", "GOOG", "IBM", "KO", "ORCL", "V"} - profile.SortBy = "Ticker" - profile.SortOrder = "Desc" - profile.Save() + self.MarketRefresh = 12 + self.QuotesRefresh = 5 + self.Tickers = []string{"AAPL", "C", "GOOG", "IBM", "KO", "ORCL", "V"} + self.SortBy = "Ticker" + self.SortOrder = "Desc" + self.Save() } else { - json.Unmarshal(data, &profile) + json.Unmarshal(data, self) } - return strings.Join(profile.Tickers, "+") + return self } //----------------------------------------------------------------------------- -func (profile *Profile) Save() error { - if data, err := json.Marshal(profile); err != nil { +func (self *Profile) Save() error { + if data, err := json.Marshal(self); err != nil { return err } else { - return ioutil.WriteFile(defaultProfile(), data, 0644) + return ioutil.WriteFile(self.default_file_name(), data, 0644) } } //----------------------------------------------------------------------------- -func defaultProfile() string { +func (self *Profile) Quotes() string { + return strings.Join(self.Tickers, "+") +} + +// private +//----------------------------------------------------------------------------- +func (self *Profile) default_file_name() string { usr, err := user.Current() if err != nil { panic(err) } - return usr.HomeDir + rcfile + return usr.HomeDir + moprc } diff --git a/mop.go b/mop.go index f7c6a82..179c1e5 100644 --- a/mop.go +++ b/mop.go @@ -3,9 +3,9 @@ package main import ( - "github.com/michaeldv/mop/lib" - "github.com/nsf/termbox-go" - "time" + `github.com/michaeldv/mop/lib` + `github.com/nsf/termbox-go` + `time` ) //----------------------------------------------------------------------------- @@ -17,7 +17,7 @@ func initTermbox() { } //----------------------------------------------------------------------------- -func mainLoop(profile string) { +func mainLoop(profile *mop.Profile) { var line_editor *mop.LineEditor keyboard_queue := make(chan termbox.Event) timestamp_queue := time.NewTicker(1 * time.Second) @@ -32,7 +32,7 @@ func mainLoop(profile string) { termbox.Clear(termbox.ColorDefault, termbox.ColorDefault) mop.DrawMarket() - mop.DrawQuotes(profile) + mop.DrawQuotes(profile.Quotes()) loop: for { select { @@ -55,14 +55,14 @@ loop: case termbox.EventResize: termbox.Clear(termbox.ColorDefault, termbox.ColorDefault) mop.DrawMarket() - mop.DrawQuotes(profile) + mop.DrawQuotes(profile.Quotes()) } case <-timestamp_queue.C: mop.DrawTime() case <-quotes_queue.C: - mop.DrawQuotes(profile) + mop.DrawQuotes(profile.Quotes()) case <-market_queue.C: mop.DrawMarket() @@ -76,6 +76,6 @@ func main() { initTermbox() defer termbox.Close() - profile := mop.LoadProfile() + profile := new(mop.Profile).Initialize() mainLoop(profile) }