mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
Use errcheck to find unhandled errors (#795)
Signed-off-by: Chris Cummer <chriscummer@me.com>
This commit is contained in:
parent
04ff03ab1c
commit
cde904ff08
25
Makefile
25
Makefile
@ -68,16 +68,41 @@ install:
|
||||
|
||||
## lint: runs a number of code quality checks against the source code
|
||||
lint:
|
||||
# https://github.com/kisielk/errcheck
|
||||
errcheck ./app
|
||||
errcheck ./cfg
|
||||
errcheck ./flags
|
||||
errcheck ./help
|
||||
errcheck ./logger
|
||||
errcheck ./modules/...
|
||||
errcheck ./utils
|
||||
errcheck ./view
|
||||
errcheck ./wtf
|
||||
errcheck ./main.go
|
||||
|
||||
# https://golang.org/cmd/vet/
|
||||
go vet ./app
|
||||
go vet ./cfg
|
||||
go vet ./flags
|
||||
go vet ./help
|
||||
go vet ./logger
|
||||
go vet ./modules/...
|
||||
go vet ./utils
|
||||
go vet ./view
|
||||
go vet ./wtf
|
||||
go vet ./main.go
|
||||
|
||||
# https://staticcheck.io/docs/
|
||||
staticcheck ./app
|
||||
staticcheck ./cfg
|
||||
staticcheck ./flags
|
||||
staticcheck ./help
|
||||
staticcheck ./logger
|
||||
staticcheck ./modules/...
|
||||
staticcheck ./utils
|
||||
staticcheck ./view
|
||||
staticcheck ./wtf
|
||||
staticcheck ./main.go
|
||||
|
||||
## run: executes the locally-installed version
|
||||
run: build
|
||||
|
@ -34,7 +34,7 @@ func fcopy(src, dest string, info os.FileInfo) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer f.Close()
|
||||
defer func() { _ = f.Close() }()
|
||||
|
||||
if err = os.Chmod(f.Name(), info.Mode()); err != nil {
|
||||
return err
|
||||
@ -44,7 +44,7 @@ func fcopy(src, dest string, info os.FileInfo) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer s.Close()
|
||||
defer func() { _ = f.Close() }()
|
||||
|
||||
_, err = io.Copy(f, s)
|
||||
return err
|
||||
|
@ -35,14 +35,14 @@ func (flags *Flags) ConfigFilePath() string {
|
||||
|
||||
// RenderIf displays special-case information based on the flags passed
|
||||
// in, if any flags were passed in
|
||||
func (flags *Flags) RenderIf(version string, config *config.Config) {
|
||||
func (flags *Flags) RenderIf(version, date string, config *config.Config) {
|
||||
if flags.HasModule() {
|
||||
help.Display(flags.Module, config)
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
if flags.HasVersion() {
|
||||
fmt.Println(version)
|
||||
fmt.Println(fmt.Sprintf("%s (%s)", version, date))
|
||||
os.Exit(0)
|
||||
}
|
||||
}
|
||||
@ -59,7 +59,7 @@ func (flags *Flags) HasModule() bool {
|
||||
|
||||
// HasVersion returns TRUE if the version flag was passed in, FALSE if it was not
|
||||
func (flags *Flags) HasVersion() bool {
|
||||
return flags.Version == true
|
||||
return flags.Version
|
||||
}
|
||||
|
||||
// Parse parses the incoming flags
|
||||
@ -74,7 +74,7 @@ func (flags *Flags) Parse() {
|
||||
// If we have a custom config, then we're done parsing parameters, we don't need to
|
||||
// generate the default value
|
||||
flags.hasCustom = (len(flags.Config) > 0)
|
||||
if flags.hasCustom == true {
|
||||
if flags.hasCustom {
|
||||
return
|
||||
}
|
||||
|
||||
|
2
go.mod
2
go.mod
@ -50,7 +50,7 @@ require (
|
||||
github.com/xanzy/go-gitlab v0.22.2
|
||||
github.com/zmb3/spotify v0.0.0-20191010212056-e12fb981aacb
|
||||
github.com/zorkian/go-datadog-api v2.25.0+incompatible
|
||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529 // indirect
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 // indirect
|
||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45
|
||||
google.golang.org/api v0.14.0
|
||||
gopkg.in/jarcoal/httpmock.v1 v1.0.0-20181110093347-3be5f16b70eb // indirect
|
||||
|
5
go.sum
5
go.sum
@ -160,6 +160,7 @@ github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBv
|
||||
github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo=
|
||||
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
||||
github.com/kisielk/errcheck v1.2.0 h1:reN85Pxc5larApoH1keMBiu2GWtPqXQ1nc9gx+jOU+E=
|
||||
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
@ -263,8 +264,8 @@ go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
||||
golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529 h1:iMGN4xG0cnqj3t+zOM8wUB0BiPKHEwSxEZCvzcbZuvk=
|
||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||
|
@ -18,7 +18,11 @@ func Display(moduleName string, cfg *config.Config) {
|
||||
}
|
||||
|
||||
func helpFor(moduleName string, cfg *config.Config) string {
|
||||
cfg.Set("wtf.mods."+moduleName+".enabled", true)
|
||||
err := cfg.Set("wtf.mods."+moduleName+".enabled", true)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
widget := app.MakeWidget(nil, nil, moduleName, cfg)
|
||||
|
||||
// Since we are forcing enabled config, if no module
|
||||
|
@ -17,7 +17,7 @@ func Log(msg string) {
|
||||
if err != nil {
|
||||
log.Fatalf("error opening file: %v", err)
|
||||
}
|
||||
defer f.Close()
|
||||
defer func() { _ = f.Close() }()
|
||||
|
||||
log.SetOutput(f)
|
||||
log.Println(msg)
|
||||
|
3
main.go
3
main.go
@ -24,7 +24,6 @@ import (
|
||||
var tviewApp *tview.Application
|
||||
|
||||
var (
|
||||
commit = "dev"
|
||||
date = "dev"
|
||||
version = "dev"
|
||||
)
|
||||
@ -54,7 +53,7 @@ func main() {
|
||||
|
||||
// Load the configuration file
|
||||
config := cfg.LoadWtfConfigFile(flags.ConfigFilePath())
|
||||
flags.RenderIf(version, config)
|
||||
flags.RenderIf(version, date, config)
|
||||
|
||||
if flags.Profile {
|
||||
defer profile.Start(profile.MemProfile).Stop()
|
||||
|
@ -18,7 +18,7 @@ func Request(apiKey string, apiURL string) ([]byte, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
|
||||
data, err := ParseBody(resp)
|
||||
if err != nil {
|
||||
|
@ -79,7 +79,7 @@ func (widget *Widget) Write(p []byte) (n int, err error) {
|
||||
// Remove lines that exceed maxLines
|
||||
lines := widget.countLines()
|
||||
if lines > widget.settings.maxLines {
|
||||
widget.drainLines(lines - widget.settings.maxLines)
|
||||
err = widget.drainLines(lines - widget.settings.maxLines)
|
||||
}
|
||||
|
||||
return n, err
|
||||
@ -93,12 +93,17 @@ func (widget *Widget) countLines() int {
|
||||
}
|
||||
|
||||
// drainLines removed the first n lines from the buffer
|
||||
func (widget *Widget) drainLines(n int) {
|
||||
func (widget *Widget) drainLines(n int) error {
|
||||
for i := 0; i < n; i++ {
|
||||
widget.buffer.ReadBytes('\n')
|
||||
_, err := widget.buffer.ReadBytes('\n')
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (widget *Widget) environment() []string {
|
||||
envs := os.Environ()
|
||||
envs = append(
|
||||
|
@ -44,7 +44,7 @@ func (widget *Widget) content() (string, string, bool) {
|
||||
formatableText("Open Sell", "OpenSellOrders"),
|
||||
)
|
||||
|
||||
strTemplate.Execute(writer, map[string]string{
|
||||
err := strTemplate.Execute(writer, map[string]string{
|
||||
"nameColor": widget.settings.colors.market.name,
|
||||
"fieldColor": widget.settings.colors.market.field,
|
||||
"valueColor": widget.settings.colors.market.value,
|
||||
@ -57,8 +57,12 @@ func (widget *Widget) content() (string, string, bool) {
|
||||
"OpenSellOrders": marketCurrency.OpenSellOrders,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
str = err.Error()
|
||||
} else {
|
||||
str += writer.String() + "\n"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -90,7 +90,9 @@ func (widget *Widget) Refresh() {
|
||||
func (widget *Widget) updateSummary() {
|
||||
// In case if anything bad happened!
|
||||
defer func() {
|
||||
recover()
|
||||
if r := recover(); r != nil {
|
||||
fmt.Println("recovered in updateSummary()", r)
|
||||
}
|
||||
}()
|
||||
|
||||
client := &http.Client{
|
||||
@ -120,10 +122,14 @@ func (widget *Widget) updateSummary() {
|
||||
errorText = ""
|
||||
}
|
||||
|
||||
defer response.Body.Close()
|
||||
defer func() { _ = response.Body.Close() }()
|
||||
jsonResponse := summaryResponse{}
|
||||
decoder := json.NewDecoder(response.Body)
|
||||
decoder.Decode(&jsonResponse)
|
||||
err = decoder.Decode(&jsonResponse)
|
||||
if err != nil {
|
||||
errorText = "Could not parse JSON!"
|
||||
break
|
||||
}
|
||||
|
||||
if !jsonResponse.Success {
|
||||
ok = false
|
||||
|
@ -115,7 +115,7 @@ func MakeApiRequest(token string, method string) ([]byte, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -99,7 +99,9 @@ func (widget *Widget) getToList(symbol string) []*toCurrency {
|
||||
|
||||
func (widget *Widget) updateCurrencies() {
|
||||
defer func() {
|
||||
recover()
|
||||
if r := recover(); r != nil {
|
||||
fmt.Println("recovered in updateSummary()", r)
|
||||
}
|
||||
}()
|
||||
for _, fromCurrency := range widget.list.items {
|
||||
|
||||
@ -121,7 +123,7 @@ func (widget *Widget) updateCurrencies() {
|
||||
ok = true
|
||||
}
|
||||
|
||||
defer response.Body.Close()
|
||||
defer func() { _ = response.Body.Close() }()
|
||||
|
||||
_ = json.NewDecoder(response.Body).Decode(&jsonResponse)
|
||||
|
||||
|
@ -68,7 +68,9 @@ func (widget *Widget) Refresh(wg *sync.WaitGroup) {
|
||||
|
||||
func (widget *Widget) updateData() {
|
||||
defer func() {
|
||||
recover()
|
||||
if r := recover(); r != nil {
|
||||
fmt.Println("recovered in updateSummary()", r)
|
||||
}
|
||||
}()
|
||||
|
||||
client := &http.Client{
|
||||
|
@ -177,7 +177,10 @@ func (widget *Widget) dropletDestroy() {
|
||||
return
|
||||
}
|
||||
|
||||
widget.client.Droplets.Delete(context.Background(), currDroplet.ID)
|
||||
_, err := widget.client.Droplets.Delete(context.Background(), currDroplet.ID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
widget.dropletRemoveSelected()
|
||||
widget.Refresh()
|
||||
@ -190,7 +193,11 @@ func (widget *Widget) dropletEnabledPrivateNetworking() {
|
||||
return
|
||||
}
|
||||
|
||||
widget.client.DropletActions.EnablePrivateNetworking(context.Background(), currDroplet.ID)
|
||||
_, _, err := widget.client.DropletActions.EnablePrivateNetworking(context.Background(), currDroplet.ID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
widget.Refresh()
|
||||
}
|
||||
|
||||
@ -210,7 +217,10 @@ func (widget *Widget) dropletRestart() {
|
||||
return
|
||||
}
|
||||
|
||||
widget.client.DropletActions.Reboot(context.Background(), currDroplet.ID)
|
||||
_, _, err := widget.client.DropletActions.Reboot(context.Background(), currDroplet.ID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
widget.Refresh()
|
||||
}
|
||||
|
||||
@ -221,7 +231,10 @@ func (widget *Widget) dropletShutDown() {
|
||||
return
|
||||
}
|
||||
|
||||
widget.client.DropletActions.Shutdown(context.Background(), currDroplet.ID)
|
||||
_, _, err := widget.client.DropletActions.Shutdown(context.Background(), currDroplet.ID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
widget.Refresh()
|
||||
}
|
||||
|
||||
|
@ -16,14 +16,14 @@ func FetchExchangeRates(settings *Settings) (map[string]map[string]float64, erro
|
||||
out := map[string]map[string]float64{}
|
||||
|
||||
for base, rates := range settings.rates {
|
||||
res, err := http.Get(fmt.Sprintf("https://api.exchangeratesapi.io/latest?base=%s", base))
|
||||
resp, err := http.Get(fmt.Sprintf("https://api.exchangeratesapi.io/latest?base=%s", base))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer res.Body.Close()
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
|
||||
var resp Response
|
||||
err = utils.ParseJSON(&resp, res.Body)
|
||||
var data Response
|
||||
err = utils.ParseJSON(&data, resp.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -31,7 +31,7 @@ func FetchExchangeRates(settings *Settings) (map[string]map[string]float64, erro
|
||||
out[base] = map[string]float64{}
|
||||
|
||||
for _, currency := range rates {
|
||||
rate, ok := resp.Rates[currency]
|
||||
rate, ok := data.Rates[currency]
|
||||
if ok {
|
||||
out[base][currency] = rate
|
||||
}
|
||||
|
@ -95,7 +95,7 @@ func (widget *Widget) GetStandings(leagueId int) string {
|
||||
if err != nil {
|
||||
return fmt.Sprintf("Error fetching standings: %s", err.Error())
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
data, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return fmt.Sprintf("Error fetching standings: %s", err.Error())
|
||||
@ -141,7 +141,7 @@ func (widget *Widget) GetMatches(leagueId int) string {
|
||||
if err != nil {
|
||||
return fmt.Sprintf("Error fetching matches: %s", err.Error())
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
data, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return fmt.Sprintf("Error fetching matches: %s", err.Error())
|
||||
|
@ -172,7 +172,8 @@ func tokenFromFile(file string) (*oauth2.Token, error) {
|
||||
}
|
||||
t := &oauth2.Token{}
|
||||
err = json.NewDecoder(f).Decode(t)
|
||||
defer f.Close()
|
||||
defer func() { _ = f.Close() }()
|
||||
|
||||
return t, err
|
||||
}
|
||||
|
||||
@ -182,11 +183,14 @@ func saveToken(file string, token *oauth2.Token) {
|
||||
fmt.Printf("Saving credential file to: %s\n", file)
|
||||
f, err := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
|
||||
if err != nil {
|
||||
log.Fatalf("Unable to cache oauth token: %v", err)
|
||||
log.Fatalf("unable to cache oauth token: %v", err)
|
||||
}
|
||||
defer f.Close()
|
||||
defer func() { _ = f.Close() }()
|
||||
|
||||
json.NewEncoder(f).Encode(token)
|
||||
err = json.NewEncoder(f).Encode(token)
|
||||
if err != nil {
|
||||
log.Fatalf("unable to encode oauth token: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (widget *Widget) getCalendarIdList(srv *calendar.Service) ([]string, error) {
|
||||
|
@ -14,7 +14,10 @@ func newContext(settings *Settings) (*context, error) {
|
||||
gitlabClient := glb.NewClient(nil, settings.apiKey)
|
||||
|
||||
if baseURL != "" {
|
||||
gitlabClient.SetBaseURL(baseURL)
|
||||
err := gitlabClient.SetBaseURL(baseURL)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
user, _, err := gitlabClient.Users.CurrentUser()
|
||||
|
@ -112,10 +112,14 @@ func tokenCacheFile() (string, error) {
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
tokenCacheDir := filepath.Join(usr.HomeDir, ".credentials")
|
||||
os.MkdirAll(tokenCacheDir, 0700)
|
||||
return filepath.Join(tokenCacheDir,
|
||||
url.QueryEscape("spreadsheets-go-quickstart.json")), err
|
||||
err = os.MkdirAll(tokenCacheDir, 0700)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return filepath.Join(tokenCacheDir, url.QueryEscape("spreadsheets-go-quickstart.json")), err
|
||||
}
|
||||
|
||||
// tokenFromFile retrieves a Token from a given file path.
|
||||
@ -127,7 +131,7 @@ func tokenFromFile(file string) (*oauth2.Token, error) {
|
||||
}
|
||||
t := &oauth2.Token{}
|
||||
err = json.NewDecoder(f).Decode(t)
|
||||
defer f.Close()
|
||||
defer func() { _ = f.Close() }()
|
||||
return t, err
|
||||
}
|
||||
|
||||
@ -139,7 +143,10 @@ func saveToken(file string, token *oauth2.Token) {
|
||||
if err != nil {
|
||||
log.Fatalf("Unable to cache oauth token: %v", err)
|
||||
}
|
||||
defer f.Close()
|
||||
defer func() { _ = f.Close() }()
|
||||
|
||||
json.NewEncoder(f).Encode(token)
|
||||
err = json.NewEncoder(f).Encode(token)
|
||||
if err != nil {
|
||||
log.Fatalf("Unable to encode oauth token: %v", err)
|
||||
}
|
||||
}
|
||||
|
@ -131,7 +131,10 @@ func (widget *Widget) validateHTTPResponse(responseCode int, body []byte) *hibpE
|
||||
|
||||
switch responseCode {
|
||||
case 401, 402:
|
||||
json.Unmarshal(body, hibpErr)
|
||||
err := json.Unmarshal(body, hibpErr)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
default:
|
||||
hibpErr = nil
|
||||
}
|
||||
|
@ -69,7 +69,7 @@ func (widget *Widget) ipinfo() {
|
||||
widget.result = err.Error()
|
||||
return
|
||||
}
|
||||
defer response.Body.Close()
|
||||
defer func() { _ = response.Body.Close() }()
|
||||
var info ipinfo
|
||||
err = json.NewDecoder(response.Body).Decode(&info)
|
||||
if err != nil {
|
||||
@ -96,7 +96,7 @@ func (widget *Widget) setResult(info *ipinfo) {
|
||||
|
||||
resultBuffer := new(bytes.Buffer)
|
||||
|
||||
resultTemplate.Execute(resultBuffer, map[string]string{
|
||||
err := resultTemplate.Execute(resultBuffer, map[string]string{
|
||||
"nameColor": widget.settings.colors.name,
|
||||
"valueColor": widget.settings.colors.value,
|
||||
"Ip": info.Query,
|
||||
@ -111,6 +111,10 @@ func (widget *Widget) setResult(info *ipinfo) {
|
||||
"Timezone": info.Timezone,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
widget.result = err.Error()
|
||||
}
|
||||
|
||||
widget.result = resultBuffer.String()
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,7 @@ func (widget *Widget) ipinfo() {
|
||||
widget.result = err.Error()
|
||||
return
|
||||
}
|
||||
defer response.Body.Close()
|
||||
defer func() { _ = response.Body.Close() }()
|
||||
|
||||
var info ipinfo
|
||||
err = json.NewDecoder(response.Body).Decode(&info)
|
||||
@ -86,7 +86,7 @@ func (widget *Widget) setResult(info *ipinfo) {
|
||||
|
||||
resultBuffer := new(bytes.Buffer)
|
||||
|
||||
resultTemplate.Execute(resultBuffer, map[string]string{
|
||||
err := resultTemplate.Execute(resultBuffer, map[string]string{
|
||||
"subheadingColor": widget.settings.common.Colors.Subheading,
|
||||
"valueColor": widget.settings.common.Colors.Text,
|
||||
"Ip": info.Ip,
|
||||
@ -99,6 +99,10 @@ func (widget *Widget) setResult(info *ipinfo) {
|
||||
"Organization": info.Organization,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
widget.result = err.Error()
|
||||
}
|
||||
|
||||
widget.result = resultBuffer.String()
|
||||
}
|
||||
|
||||
|
@ -70,7 +70,7 @@ func (widget *Widget) tailFile() []string {
|
||||
if err != nil {
|
||||
return []string{}
|
||||
}
|
||||
defer file.Close()
|
||||
defer func() { _ = file.Close() }()
|
||||
|
||||
stat, err := file.Stat()
|
||||
if err != nil {
|
||||
|
@ -67,7 +67,7 @@ func (widget *Widget) nbascore() (string, string, bool) {
|
||||
if err != nil {
|
||||
return title, err.Error(), true
|
||||
}
|
||||
defer response.Body.Close()
|
||||
defer func() { _ = response.Body.Close() }()
|
||||
if response.StatusCode != 200 {
|
||||
return title, err.Error(), true
|
||||
} // Get data from data.nba.net and check if successful
|
||||
@ -77,7 +77,10 @@ func (widget *Widget) nbascore() (string, string, bool) {
|
||||
return title, err.Error(), true
|
||||
}
|
||||
result := map[string]interface{}{}
|
||||
json.Unmarshal(contents, &result)
|
||||
err = json.Unmarshal(contents, &result)
|
||||
if err != nil {
|
||||
return title, err.Error(), true
|
||||
}
|
||||
|
||||
allGame := fmt.Sprintf(" [%s]", widget.settings.common.Colors.Subheading) + (cur.Format(utils.FriendlyDateFormat) + "\n\n") + "[white]"
|
||||
|
||||
|
@ -31,7 +31,7 @@ func (c *Client) doRequest(req *http.Request, out interface{}) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
b, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -65,7 +65,7 @@ func opsGenieRequest(url string, apiKey string) (*OnCallResponse, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
|
||||
response := &OnCallResponse{}
|
||||
if err := json.NewDecoder(resp.Body).Decode(response); err != nil {
|
||||
|
@ -87,7 +87,7 @@ func (client *Client) request(req request, result interface{}) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
|
||||
responseBody, err := ioutil.ReadAll(resp.Body)
|
||||
|
||||
|
@ -18,7 +18,10 @@ func CurrentActiveItems(accessToken, assignedToName string, activeOnly bool) (*A
|
||||
return items, err
|
||||
}
|
||||
|
||||
utils.ParseJSON(&items, resp.Body)
|
||||
err = utils.ParseJSON(&items, resp.Body)
|
||||
if err != nil {
|
||||
return items, err
|
||||
}
|
||||
|
||||
return items, nil
|
||||
}
|
||||
|
@ -19,30 +19,47 @@ func (widget *Widget) initializeKeyboardControls() {
|
||||
}
|
||||
|
||||
func (widget *Widget) selectPrevious() {
|
||||
widget.client.Previous()
|
||||
err := widget.client.Previous()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
time.Sleep(time.Millisecond * 500)
|
||||
widget.Refresh()
|
||||
}
|
||||
|
||||
func (widget *Widget) selectNext() {
|
||||
widget.client.Next()
|
||||
err := widget.client.Next()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
time.Sleep(time.Millisecond * 500)
|
||||
widget.Refresh()
|
||||
}
|
||||
|
||||
func (widget *Widget) playPause() {
|
||||
var err error
|
||||
if widget.playerState.CurrentlyPlaying.Playing {
|
||||
widget.client.Pause()
|
||||
err = widget.client.Pause()
|
||||
} else {
|
||||
widget.client.Play()
|
||||
err = widget.client.Play()
|
||||
}
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
time.Sleep(time.Millisecond * 500)
|
||||
widget.Refresh()
|
||||
}
|
||||
|
||||
func (widget *Widget) toggleShuffle() {
|
||||
widget.playerState.ShuffleState = !widget.playerState.ShuffleState
|
||||
widget.client.Shuffle(widget.playerState.ShuffleState)
|
||||
err := widget.client.Shuffle(widget.playerState.ShuffleState)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
time.Sleep(time.Millisecond * 500)
|
||||
widget.Refresh()
|
||||
}
|
||||
|
@ -53,7 +53,10 @@ func authHandler(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
// use the token to get an authenticated client
|
||||
client := auth.NewClient(tok)
|
||||
fmt.Fprintf(w, "Login Completed!")
|
||||
_, err = fmt.Fprintf(w, "Login Completed!")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
tempClientChan <- &client
|
||||
}
|
||||
|
||||
@ -81,7 +84,12 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *
|
||||
}
|
||||
|
||||
http.HandleFunc("/callback", authHandler)
|
||||
go http.ListenAndServe(":"+callbackPort, nil)
|
||||
go func() {
|
||||
err := http.ListenAndServe(":"+callbackPort, nil)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}()
|
||||
|
||||
go func() {
|
||||
// wait for auth to complete
|
||||
|
@ -95,7 +95,7 @@ func (widget *Widget) formattedText() string {
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
defer file.Close()
|
||||
defer func() { _ = file.Close() }()
|
||||
|
||||
lexer := lexers.Match(filePath)
|
||||
if lexer == nil {
|
||||
@ -115,7 +115,10 @@ func (widget *Widget) formattedText() string {
|
||||
iterator, _ := lexer.Tokenise(nil, string(contents))
|
||||
|
||||
var buf bytes.Buffer
|
||||
formatter.Format(&buf, style, iterator)
|
||||
err = formatter.Format(&buf, style, iterator)
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
|
||||
return tview.TranslateANSI(buf.String())
|
||||
}
|
||||
@ -152,7 +155,11 @@ func (widget *Widget) watchForFileChanges() {
|
||||
for _, source := range widget.Sources {
|
||||
fullPath, err := utils.ExpandHomeDir(source)
|
||||
if err == nil {
|
||||
watch.Add(fullPath)
|
||||
e := watch.Add(fullPath)
|
||||
if e != nil {
|
||||
fmt.Println(e)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -91,11 +91,11 @@ func (widget *Widget) SetList(list checklist.Checklist) {
|
||||
func (widget *Widget) init() {
|
||||
_, err := cfg.CreateFile(widget.filePath)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// isItemSelected returns weather any item of the todo is selected or not
|
||||
// isItemSelected returns whether any item of the todo is selected or not
|
||||
func (widget *Widget) isItemSelected() bool {
|
||||
return widget.Selected >= 0 && widget.Selected < len(widget.list.Items)
|
||||
}
|
||||
@ -107,7 +107,10 @@ func (widget *Widget) load() {
|
||||
|
||||
fileData, _ := utils.ReadFileBytes(filePath)
|
||||
|
||||
yaml.Unmarshal(fileData, &widget.list)
|
||||
err := yaml.Unmarshal(fileData, &widget.list)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
widget.ScrollableWidget.SetItemCount(len(widget.list.Items))
|
||||
widget.setItemChecks()
|
||||
|
@ -158,7 +158,10 @@ func (widget *Widget) deleteSelectedTorrent() {
|
||||
DeleteLocalData: false,
|
||||
}
|
||||
|
||||
widget.client.TorrentRemove(removePayload)
|
||||
err := widget.client.TorrentRemove(removePayload)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
widget.display()
|
||||
}
|
||||
@ -176,10 +179,15 @@ func (widget *Widget) pauseUnpauseTorrent() {
|
||||
|
||||
ids := []int64{*currTorrent.ID}
|
||||
|
||||
var err error
|
||||
if *currTorrent.Status == transmissionrpc.TorrentStatusStopped {
|
||||
widget.client.TorrentStartIDs(ids)
|
||||
err = widget.client.TorrentStartIDs(ids)
|
||||
} else {
|
||||
widget.client.TorrentStopIDs(ids)
|
||||
err = widget.client.TorrentStopIDs(ids)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
widget.display()
|
||||
|
@ -10,7 +10,7 @@ func Request(httpClient *http.Client, apiURL string) ([]byte, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
|
||||
data, err := ParseBody(resp)
|
||||
if err != nil {
|
||||
|
@ -73,19 +73,22 @@ func (client *Client) GetStatsForUser(username string) TwitterStats {
|
||||
}
|
||||
|
||||
url := fmt.Sprintf("%s?screen_name=%s", userTimelineURL, username)
|
||||
res, err := client.httpClient.Get(url)
|
||||
resp, err := client.httpClient.Get(url)
|
||||
if err != nil {
|
||||
return stats
|
||||
}
|
||||
defer res.Body.Close()
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
|
||||
body, err := ioutil.ReadAll(res.Body)
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return stats
|
||||
}
|
||||
|
||||
// If there is an error while parsing, just discard the error and return the empty stats
|
||||
json.Unmarshal(body, &stats)
|
||||
err = json.Unmarshal(body, &stats)
|
||||
if err != nil {
|
||||
return stats
|
||||
}
|
||||
|
||||
return stats
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ func victorOpsRequest(url string, apiID string, apiKey string) ([]OnCallTeam, er
|
||||
if resp.StatusCode != 200 {
|
||||
return nil, fmt.Errorf("%s", resp.Status)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
|
||||
response := &OnCallResponse{}
|
||||
if err := json.NewDecoder(resp.Body).Decode(response); err != nil {
|
||||
|
@ -55,7 +55,7 @@ func (widget *Widget) prettyWeather() {
|
||||
return
|
||||
|
||||
}
|
||||
defer response.Body.Close()
|
||||
defer func() { _ = response.Body.Close() }()
|
||||
|
||||
contents, err := ioutil.ReadAll(response.Body)
|
||||
if err != nil {
|
||||
|
@ -36,8 +36,7 @@ func (widget *Widget) api(meth string, path string, params string) (*Resource, e
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
defer resp.Body.Close()
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
|
||||
data, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
|
@ -55,12 +55,16 @@ func (widget *Widget) listTickets(pag ...string) (*TicketArray, error) {
|
||||
} else {
|
||||
path = pag[0]
|
||||
}
|
||||
|
||||
resource, err := widget.api("GET", path, "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
json.Unmarshal([]byte(resource.Raw), TicketStruct)
|
||||
err = json.Unmarshal([]byte(resource.Raw), TicketStruct)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return TicketStruct, err
|
||||
|
||||
|
@ -92,27 +92,38 @@ func OpenFile(path string) {
|
||||
if (strings.HasPrefix(path, "http://")) || (strings.HasPrefix(path, "https://")) {
|
||||
if len(OpenUrlUtil) > 0 {
|
||||
commands := append(OpenUrlUtil, path)
|
||||
exec.Command(commands[0], commands[1:]...).Start()
|
||||
cmd := exec.Command(commands[0], commands[1:]...)
|
||||
err := cmd.Start()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var cmd *exec.Cmd
|
||||
switch runtime.GOOS {
|
||||
case "linux":
|
||||
exec.Command("xdg-open", path).Start()
|
||||
cmd = exec.Command("xdg-open", path)
|
||||
case "windows":
|
||||
exec.Command("rundll32", "url.dll,FileProtocolHandler", path).Start()
|
||||
cmd = exec.Command("rundll32", "url.dll,FileProtocolHandler", path)
|
||||
case "darwin":
|
||||
exec.Command("open", path).Start()
|
||||
cmd = exec.Command("open", path)
|
||||
default:
|
||||
// for the BSDs
|
||||
exec.Command("xdg-open", path).Start()
|
||||
cmd = exec.Command("xdg-open", path)
|
||||
}
|
||||
} else {
|
||||
|
||||
err := cmd.Start()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
filePath, _ := ExpandHomeDir(path)
|
||||
cmd := exec.Command(OpenFileUtil, filePath)
|
||||
ExecuteCommand(cmd)
|
||||
}
|
||||
}
|
||||
|
||||
// ReadFileBytes reads the contents of a file and returns those contents as a slice of bytes
|
||||
func ReadFileBytes(filePath string) ([]byte, error) {
|
||||
|
2
vendor/github.com/google/go-github/v26/github/github.go
generated
vendored
2
vendor/github.com/google/go-github/v26/github/github.go
generated
vendored
@ -527,7 +527,7 @@ func (c *Client) Do(ctx context.Context, req *http.Request, v interface{}) (*Res
|
||||
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
|
||||
response := newResponse(resp)
|
||||
|
||||
|
3
vendor/github.com/gophercloud/gophercloud/pagination/http.go
generated
vendored
3
vendor/github.com/gophercloud/gophercloud/pagination/http.go
generated
vendored
@ -21,7 +21,8 @@ type PageResult struct {
|
||||
func PageResultFrom(resp *http.Response) (PageResult, error) {
|
||||
var parsedBody interface{}
|
||||
|
||||
defer resp.Body.Close()
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
|
||||
rawBody, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return PageResult{}, err
|
||||
|
Loading…
x
Reference in New Issue
Block a user