1
0
mirror of https://github.com/taigrr/wtf synced 2025-01-18 04:03:14 -08:00
Chris Cummer cde904ff08
Use errcheck to find unhandled errors (#795)
Signed-off-by: Chris Cummer <chriscummer@me.com>
2019-12-17 08:26:16 -08:00

111 lines
2.2 KiB
Go

package toplist
import (
"encoding/json"
"fmt"
"net/http"
"os"
"sync"
"time"
)
var baseURL = "https://min-api.cryptocompare.com/data/top/exchanges"
// Widget Toplist Widget
type Widget struct {
Result string
RefreshInterval int
list *cList
settings *Settings
}
// NewWidget Make new toplist widget
func NewWidget(settings *Settings) *Widget {
widget := Widget{
settings: settings,
}
widget.list = &cList{}
widget.setList()
return &widget
}
func (widget *Widget) setList() {
for symbol, currency := range widget.settings.top {
toList := widget.makeToList(symbol, currency.limit)
widget.list.addItem(symbol, currency.displayName, currency.limit, toList)
}
}
func (widget *Widget) makeToList(symbol string, limit int) (list []*tCurrency) {
for _, to := range widget.settings.top[symbol].to {
list = append(list, &tCurrency{
name: to.(string),
info: make([]tInfo, limit),
})
}
return
}
/* -------------------- Exported Functions -------------------- */
// Refresh & update after interval time
func (widget *Widget) Refresh(wg *sync.WaitGroup) {
if len(widget.list.items) != 0 {
widget.updateData()
widget.display()
}
wg.Done()
}
/* -------------------- Unexported Functions -------------------- */
func (widget *Widget) updateData() {
defer func() {
if r := recover(); r != nil {
fmt.Println("recovered in updateSummary()", r)
}
}()
client := &http.Client{
Timeout: time.Duration(5 * time.Second),
}
for _, fromCurrency := range widget.list.items {
for _, toCurrency := range fromCurrency.to {
request := makeRequest(fromCurrency.name, toCurrency.name, fromCurrency.limit)
response, _ := client.Do(request)
var jsonResponse responseInterface
err := json.NewDecoder(response.Body).Decode(&jsonResponse)
if err != nil {
os.Exit(1)
}
for idx, info := range jsonResponse.Data {
toCurrency.info[idx] = tInfo{
exchange: info.Exchange,
volume24h: info.Volume24h,
volume24hTo: info.Volume24hTo,
}
}
}
}
}
func makeRequest(fsym, tsym string, limit int) *http.Request {
url := fmt.Sprintf("%s?fsym=%s&tsym=%s&limit=%d", baseURL, fsym, tsym, limit)
request, _ := http.NewRequest("GET", url, nil)
return request
}