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

Quick run through to add some documentation comments

This commit is contained in:
Chris Cummer 2018-04-17 15:55:36 -07:00
parent ff9343d89a
commit 3175b8d9cc
16 changed files with 90 additions and 47 deletions

View File

@ -0,0 +1,17 @@
---
title: "Glossary"
date: 2018-04-17T12:34:51-07:00
draft: false
---
### Module
A discreet unit of data collection and display. A data interface
concept. A package inside the app.
Examples: New Relic, Git, Weather.
### Widget
The onscreen representation of a Module. The widget is responsible for
being the interface between the app and the data collection.
Widgets are defined by a required `widget.go` file in a Module.

View File

@ -8,6 +8,7 @@ import (
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
) )
// Config is a pointer to the global config object
var Config *config.Config var Config *config.Config
type Widget struct { type Widget struct {

View File

@ -10,6 +10,7 @@ import (
"google.golang.org/api/calendar/v3" "google.golang.org/api/calendar/v3"
) )
// Config is a pointer to the global config object
var Config *config.Config var Config *config.Config
type Widget struct { type Widget struct {

View File

@ -10,6 +10,7 @@ import (
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
) )
// Config is a pointer to the global config object
var Config *config.Config var Config *config.Config
type Widget struct { type Widget struct {

View File

@ -9,6 +9,7 @@ import (
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
) )
// Config is a pointer to the global config object
var Config *config.Config var Config *config.Config
type Widget struct { type Widget struct {

View File

@ -8,6 +8,7 @@ import (
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
) )
// Config is a pointer to the global config object
var Config *config.Config var Config *config.Config
type Widget struct { type Widget struct {

View File

@ -9,6 +9,7 @@ import (
nr "github.com/yfronto/newrelic" nr "github.com/yfronto/newrelic"
) )
// Config is a pointer to the global config object
var Config *config.Config var Config *config.Config
type Widget struct { type Widget struct {
@ -49,7 +50,7 @@ func (widget *Widget) Refresh() {
widget.View.SetWrap(false) widget.View.SetWrap(false)
fmt.Fprintf(widget.View, "%s", widget.contentFrom(deploys)) fmt.Fprintf(widget.View, "%s", widget.contentFrom(deploys))
} }
widget.RefreshedAt = time.Now() widget.RefreshedAt = time.Now()
} }

View File

@ -9,6 +9,7 @@ import (
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
) )
// Config is a pointer to the global config object
var Config *config.Config var Config *config.Config
type Widget struct { type Widget struct {

View File

@ -8,6 +8,7 @@ import (
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
) )
// Config is a pointer to the global config object
var Config *config.Config var Config *config.Config
type Widget struct { type Widget struct {

View File

@ -10,6 +10,7 @@ import (
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
) )
// Config is a pointer to the global config object
var Config *config.Config var Config *config.Config
type Widget struct { type Widget struct {

View File

@ -10,6 +10,7 @@ import (
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
) )
// Config is a pointer to the global config object
var Config *config.Config var Config *config.Config
type Widget struct { type Widget struct {

View File

@ -1,38 +0,0 @@
package weather
import (
//"fmt"
"os"
owm "github.com/briandowns/openweathermap"
)
/* -------------------- Exported Functions -------------------- */
func Fetch(cityids []int) []*owm.CurrentWeatherData {
apiKey := os.Getenv("WTF_OWM_API_KEY")
data := []*owm.CurrentWeatherData{}
for _, cityID := range cityids {
result, err := currentWeather(apiKey, cityID)
if err == nil {
data = append(data, result)
}
}
return data
}
/* -------------------- Unexported Functions -------------------- */
func currentWeather(apiKey string, cityCode int) (*owm.CurrentWeatherData, error) {
weather, err := owm.NewCurrent(Config.UString("wtf.mods.weather.tempUnit", "C"), Config.UString("wtf.mods.weather.language", "EN"), apiKey)
if err != nil {
return nil, err
}
weather.CurrentByID(cityCode)
return weather, nil
}

View File

@ -1,6 +1,7 @@
package weather package weather
import ( import (
"os"
"time" "time"
owm "github.com/briandowns/openweathermap" owm "github.com/briandowns/openweathermap"
@ -9,19 +10,24 @@ import (
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
) )
// Config is a pointer to the global config object.
var Config *config.Config var Config *config.Config
// Widget is the container for weather data.
type Widget struct { type Widget struct {
wtf.TextWidget wtf.TextWidget
Idx int APIKey string
Data []*owm.CurrentWeatherData Data []*owm.CurrentWeatherData
Idx int
} }
// NewWidget creates and returns a new instance of the weather Widget.
func NewWidget() *Widget { func NewWidget() *Widget {
widget := Widget{ widget := Widget{
TextWidget: wtf.NewTextWidget(" Weather ", "weather"), TextWidget: wtf.NewTextWidget(" Weather ", "weather"),
Idx: 0, APIKey: os.Getenv("WTF_OWM_API_KEY"),
Idx: 0,
} }
widget.View.SetInputCapture(widget.keyboardIntercept) widget.View.SetInputCapture(widget.keyboardIntercept)
@ -31,17 +37,37 @@ func NewWidget() *Widget {
/* -------------------- Exported Functions -------------------- */ /* -------------------- Exported Functions -------------------- */
// Fetch retrieves OpenWeatherMap data from the OpenWeatherMap API.
// It takes a list of OpenWeatherMap city IDs.
// It returns a list of OpenWeatherMap CurrentWeatherData structs, one per valid city code.
func (widget *Widget) Fetch(cityIDs []int) []*owm.CurrentWeatherData {
data := []*owm.CurrentWeatherData{}
for _, cityID := range cityIDs {
result, err := widget.currentWeather(widget.APIKey, cityID)
if err == nil {
data = append(data, result)
}
}
return data
}
// Refresh fetches new data from the OpenWeatherMap API and loads the new data into the.
// widget's view for rendering
func (widget *Widget) Refresh() { func (widget *Widget) Refresh() {
if widget.Disabled() { if widget.Disabled() {
return return
} }
widget.Data = Fetch(wtf.ToInts(Config.UList("wtf.mods.weather.cityids", widget.defaultCityCodes()))) widget.Data = widget.Fetch(wtf.ToInts(Config.UList("wtf.mods.weather.cityids", widget.defaultCityCodes())))
widget.display(widget.Data) widget.display(widget.Data)
widget.RefreshedAt = time.Now() widget.RefreshedAt = time.Now()
} }
// Next displays data for the next city data in the list. If the current city is the last
// city, it wraps to the first city.
func (widget *Widget) Next() { func (widget *Widget) Next() {
widget.Idx = widget.Idx + 1 widget.Idx = widget.Idx + 1
if widget.Idx == len(widget.Data) { if widget.Idx == len(widget.Data) {
@ -51,6 +77,8 @@ func (widget *Widget) Next() {
widget.display(widget.Data) widget.display(widget.Data)
} }
// Prev displays data for the previous city in the list. If the previous city is the first
// city, it wraps to the last city.
func (widget *Widget) Prev() { func (widget *Widget) Prev() {
widget.Idx = widget.Idx - 1 widget.Idx = widget.Idx - 1
if widget.Idx < 0 { if widget.Idx < 0 {
@ -66,10 +94,24 @@ func (widget *Widget) currentCityData(data []*owm.CurrentWeatherData) *owm.Curre
return data[widget.Idx] return data[widget.Idx]
} }
func (widget *Widget) currentWeather(apiKey string, cityCode int) (*owm.CurrentWeatherData, error) {
weather, err := owm.NewCurrent(Config.UString("wtf.mods.weather.tempUnit", "C"), Config.UString("wtf.mods.weather.language", "EN"), apiKey)
if err != nil {
return nil, err
}
err = weather.CurrentByID(cityCode)
if err != nil {
return nil, err
}
return weather, nil
}
func (widget *Widget) defaultCityCodes() []interface{} { func (widget *Widget) defaultCityCodes() []interface{} {
defaultArr := []int{6176823, 360630, 3413829} defaultArr := []int{6176823, 360630, 3413829}
var defaults []interface{} = make([]interface{}, len(defaultArr)) var defaults = make([]interface{}, len(defaultArr))
for i, d := range defaultArr { for i, d := range defaultArr {
defaults[i] = d defaults[i] = d
} }
@ -95,7 +137,7 @@ func (widget *Widget) icon(data *owm.CurrentWeatherData) string {
case "clear": case "clear":
icon = "☀️" icon = "☀️"
case "clear sky": case "clear sky":
icon = "☀️ " icon = "☀️"
case "cloudy": case "cloudy":
icon = "⛅️" icon = "⛅️"
case "few clouds": case "few clouds":
@ -112,6 +154,8 @@ func (widget *Widget) icon(data *owm.CurrentWeatherData) string {
icon = "☔️" icon = "☔️"
case "light rain": case "light rain":
icon = "🌦" icon = "🌦"
case "light shower snow":
icon = "🌦⛄️"
case "light snow": case "light snow":
icon = "🌨" icon = "🌨"
case "mist": case "mist":

View File

@ -28,7 +28,7 @@ func LoadConfigFile(filePath string) *config.Config {
cfg, err := config.ParseYamlFile(absPath) cfg, err := config.ParseYamlFile(absPath)
if err != nil { if err != nil {
fmt.Println("\n\n\033[1m ERROR:\033[0m Could not load '\033[0;33mconfig.yml\033[0m'.\n Please add a \033[0;33mconfig.yml\033[0m file to your \033[0;33m~/.wtf\033[0m directory.\n See \033[1;34mhttps://github.com/senorprogrammer/wtf\033[0m for details.\n\n") fmt.Println("\n\n\033[1m ERROR:\033[0m Could not load '\033[0;33mconfig.yml\033[0m'.\n Please add a \033[0;33mconfig.yml\033[0m file to your \033[0;33m~/.wtf\033[0m directory.\n See \033[1;34mhttps://github.com/senorprogrammer/wtf\033[0m for details.")
os.Exit(1) os.Exit(1)
} }

View File

@ -5,6 +5,8 @@ import (
"github.com/senorprogrammer/wtf/color" "github.com/senorprogrammer/wtf/color"
) )
// FocusTracker is used by the app to track which onscreen widget currently has focus,
// and to move focus between widgets.
type FocusTracker struct { type FocusTracker struct {
App *tview.Application App *tview.Application
Idx int Idx int
@ -13,16 +15,21 @@ type FocusTracker struct {
/* -------------------- Exported Functions -------------------- */ /* -------------------- Exported Functions -------------------- */
// Next sets the focus on the next widget in the widget list. If the current widget is
// the last widget, sets focus on the first widget.
func (tracker *FocusTracker) Next() { func (tracker *FocusTracker) Next() {
tracker.blur(tracker.Idx) tracker.blur(tracker.Idx)
tracker.increment() tracker.increment()
tracker.focus(tracker.Idx) tracker.focus(tracker.Idx)
} }
// None removes focus from the currently-focused widget.
func (tracker *FocusTracker) None() { func (tracker *FocusTracker) None() {
tracker.blur(tracker.Idx) tracker.blur(tracker.Idx)
} }
// Prev sets the focus on the previous widget in the widget list. If the current widget is
// the last widget, sets focus on the last widget.
func (tracker *FocusTracker) Prev() { func (tracker *FocusTracker) Prev() {
tracker.blur(tracker.Idx) tracker.blur(tracker.Idx)
tracker.decrement() tracker.decrement()

View File

@ -33,7 +33,10 @@ func ExecuteCommand(cmd *exec.Cmd) string {
str += string(b) str += string(b)
} }
cmd.Wait() err = cmd.Wait()
if err != nil {
return fmt.Sprintf("%v\n", err)
}
return str return str
} }