1
0
mirror of https://github.com/taigrr/wtf synced 2025-01-18 04:03:14 -08:00

WTF-400 Weather extracted to new config format

This commit is contained in:
Chris Cummer 2019-04-16 21:10:58 -07:00
parent d0faa3cb40
commit cfdfb044da
4 changed files with 63 additions and 46 deletions

View File

@ -310,7 +310,8 @@ func makeWidget(app *tview.Application, pages *tview.Pages, widgetName string) w
settings := victorops.NewSettingsFromYAML(wtf.Config)
widget = victorops.NewWidget(app, settings)
case "weather":
widget = weather.NewWidget(app, pages)
settings := weather.NewSettingsFromYAML(wtf.Config)
widget = weather.NewWidget(app, pages, settings)
case "zendesk":
widget = zendesk.NewWidget(app)
default:

View File

@ -9,7 +9,6 @@ import (
)
func (widget *Widget) display() {
if widget.apiKeyValid() == false {
widget.View.SetText(" Environment variable WTF_OWM_API_KEY is not set")
return
@ -54,19 +53,17 @@ func (widget *Widget) sunInfo(cityData *owm.CurrentWeatherData) string {
}
func (widget *Widget) temperatures(cityData *owm.CurrentWeatherData) string {
tempUnit := wtf.Config.UString("wtf.mods.weather.tempUnit", "C")
str := fmt.Sprintf("%8s: %4.1f° %s\n", "High", cityData.Main.TempMax, tempUnit)
str := fmt.Sprintf("%8s: %4.1f° %s\n", "High", cityData.Main.TempMax, widget.settings.tempUnit)
str = str + fmt.Sprintf(
"%8s: [%s]%4.1f° %s[white]\n",
"Current",
wtf.Config.UString("wtf.mods.weather.colors.current", "green"),
widget.settings.colors.current,
cityData.Main.Temp,
tempUnit,
widget.settings.tempUnit,
)
str = str + fmt.Sprintf("%8s: %4.1f° %s\n", "Low", cityData.Main.TempMin, tempUnit)
str = str + fmt.Sprintf("%8s: %4.1f° %s\n", "Low", cityData.Main.TempMin, widget.settings.tempUnit)
return str
}

View File

@ -0,0 +1,39 @@
package weather
import (
"os"
"github.com/olebedev/config"
"github.com/wtfutil/wtf/cfg"
)
type colors struct {
current string
}
type Settings struct {
colors
common *cfg.Common
apiKey string
cityIDs []interface{}
language string
tempUnit string
}
func NewSettingsFromYAML(ymlConfig *config.Config) *Settings {
localConfig, _ := ymlConfig.Get("wtf.mods.weather")
settings := Settings{
common: cfg.NewCommonSettingsFromYAML(ymlConfig),
apiKey: localConfig.UString("apiKey", os.Getenv("WTF_OWM_API_KEY")),
cityIDs: localConfig.UList("cityids"),
language: localConfig.UString("language", "EN"),
tempUnit: localConfig.UString("tempUnit", "C"),
}
settings.colors.current = localConfig.UString("colors.current", "green")
return &settings
}

View File

@ -1,8 +1,6 @@
package weather
import (
"os"
owm "github.com/briandowns/openweathermap"
"github.com/gdamore/tcell"
"github.com/rivo/tview"
@ -25,22 +23,24 @@ type Widget struct {
wtf.HelpfulWidget
wtf.TextWidget
APIKey string
// APIKey string
Data []*owm.CurrentWeatherData
Idx int
settings *Settings
}
// NewWidget creates and returns a new instance of the weather Widget.
func NewWidget(app *tview.Application, pages *tview.Pages) *Widget {
configKey := "weather"
func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget {
widget := Widget{
HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText),
TextWidget: wtf.NewTextWidget(app, "Weather", configKey, true),
TextWidget: wtf.NewTextWidget(app, "Weather", "weather", true),
Idx: 0,
settings: settings,
}
widget.loadAPICredentials()
// widget.loadAPICredentials()
// widget.APIKey
widget.HelpfulWidget.SetView(widget.View)
widget.View.SetInputCapture(widget.keyboardIntercept)
@ -57,7 +57,7 @@ func (widget *Widget) Fetch(cityIDs []int) []*owm.CurrentWeatherData {
data := []*owm.CurrentWeatherData{}
for _, cityID := range cityIDs {
result, err := widget.currentWeather(widget.APIKey, cityID)
result, err := widget.currentWeather(cityID)
if err == nil {
data = append(data, result)
}
@ -70,7 +70,7 @@ func (widget *Widget) Fetch(cityIDs []int) []*owm.CurrentWeatherData {
// widget's view for rendering
func (widget *Widget) Refresh() {
if widget.apiKeyValid() {
widget.Data = widget.Fetch(wtf.ToInts(wtf.Config.UList("wtf.mods.weather.cityids", widget.defaultCityCodes())))
widget.Data = widget.Fetch(wtf.ToInts(widget.settings.cityIDs))
}
widget.display()
@ -101,11 +101,11 @@ func (widget *Widget) Prev() {
/* -------------------- Unexported Functions -------------------- */
func (widget *Widget) apiKeyValid() bool {
if widget.APIKey == "" {
if widget.settings.apiKey == "" {
return false
}
if len(widget.APIKey) != 32 {
if len(widget.settings.apiKey) != 32 {
return false
}
@ -124,11 +124,11 @@ func (widget *Widget) currentData() *owm.CurrentWeatherData {
return widget.Data[widget.Idx]
}
func (widget *Widget) currentWeather(apiKey string, cityCode int) (*owm.CurrentWeatherData, error) {
func (widget *Widget) currentWeather(cityCode int) (*owm.CurrentWeatherData, error) {
weather, err := owm.NewCurrent(
wtf.Config.UString("wtf.mods.weather.tempUnit", "C"),
wtf.Config.UString("wtf.mods.weather.language", "EN"),
apiKey,
widget.settings.tempUnit,
widget.settings.language,
widget.settings.apiKey,
)
if err != nil {
return nil, err
@ -142,17 +142,6 @@ func (widget *Widget) currentWeather(apiKey string, cityCode int) (*owm.CurrentW
return weather, nil
}
func (widget *Widget) defaultCityCodes() []interface{} {
defaultArr := []int{3370352}
var defaults = make([]interface{}, len(defaultArr))
for i, d := range defaultArr {
defaults[i] = d
}
return defaults
}
func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey {
switch string(event.Rune()) {
case "/":
@ -177,12 +166,3 @@ func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey {
return event
}
}
// loadAPICredentials loads the API authentication credentials for this module
// First checks to see if they're in the config file. If not, checks the ENV var
func (widget *Widget) loadAPICredentials() {
widget.APIKey = wtf.Config.UString(
"wtf.mods.weather.apiKey",
os.Getenv("WTF_OWM_API_KEY"),
)
}