pull/20/head
Miguel Mota 6 years ago
parent 1a81f7edfc
commit b0e44a999f

@ -55,6 +55,10 @@ In action
## Installing
There are multiple ways you can install cointop depending on the platform you're on.
## From source (always latest)
Make sure to have [go](https://golang.org/) (1.9+) installed, then do:
```bash
@ -94,7 +98,7 @@ sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub
Install cointop flatpak
```bash
sudo flatpak install cointop com.github.miguelmota.Cointop
sudo flatpak install flathub com.github.miguelmota.Cointop
```
Run cointop flatpak

@ -42,7 +42,8 @@ type Cointop struct {
api api.Interface
allcoins []*coin
coins []*coin
allcoinsmap map[string]*coin
allcoinssymbolmap map[string]*coin
allcoinsslugmap map[string]*coin
page int
perpage int
refreshmux sync.Mutex
@ -144,10 +145,10 @@ func New() *Cointop {
log.Fatal(err)
}
allcoinsmap := map[string]apitypes.Coin{}
coinscachekey := "allcoinsmap"
fcache.Get(coinscachekey, &allcoinsmap)
ct.cache.Set(coinscachekey, allcoinsmap, 10*time.Second)
allcoinsslugmap := map[string]apitypes.Coin{}
coinscachekey := "allcoinsslugmap"
fcache.Get(coinscachekey, &allcoinsslugmap)
ct.cache.Set(coinscachekey, allcoinsslugmap, 10*time.Second)
var globaldata []float64
chartcachekey := strings.ToLower(fmt.Sprintf("%s_%s", "globaldata", strings.Replace(ct.selectedchartrange, " ", "", -1)))

@ -20,11 +20,12 @@ var supportedfiatconversions = map[string]string{
"KRW": "South Korean Won",
"NZD": "New Zealand Dollar",
"CFH": "Swiss Franc",
"NOK": "Norwegian Krone",
"MXN": "Mexican Peso",
"AUD": "Australian Dollar",
"IDR": "Indonesian Rupiah",
"RUB": "Russian Ruble",
"CAD": "Canadian dollar",
"CAD": "Canadian Dollar",
"MYR": "Malaysian Ringgit",
}

@ -17,6 +17,7 @@ var currencysymbols = map[string]string{
"KRW": "₩",
"NZD": "$",
"CFH": "₣",
"NOK": "kr",
"MXN": "$",
"AUD": "$",
"IDR": "Rp.",

@ -74,9 +74,9 @@ func (ct *Cointop) layout(g *gocui.Gui) error {
go func() {
ct.updateCoins()
ct.updateTable()
_, found := ct.cache.Get("allcoinsmap")
_, found := ct.cache.Get("allcoinsslugmap")
if found {
ct.cache.Delete("allcoinsmap")
ct.cache.Delete("allcoinsslugmap")
ct.updateCoins()
ct.updateTable()
}

@ -14,36 +14,36 @@ func (ct *Cointop) updateCoins() error {
coinslock.Lock()
defer coinslock.Unlock()
list := []*coin{}
cachekey := "allcoinsmap"
cachekey := "allcoinsslugmap"
var err error
var allcoinsmap map[string]types.Coin
var allcoinsslugmap map[string]types.Coin
cached, found := ct.cache.Get(cachekey)
if found {
// cache hit
allcoinsmap, _ = cached.(map[string]types.Coin)
allcoinsslugmap, _ = cached.(map[string]types.Coin)
ct.debuglog("soft cache hit")
}
// cache miss
if allcoinsmap == nil {
if allcoinsslugmap == nil {
ct.debuglog("cache miss")
allcoinsmap, err = ct.api.GetAllCoinData(ct.currencyconversion)
allcoinsslugmap, err = ct.api.GetAllCoinData(ct.currencyconversion)
if err != nil {
return err
}
ct.cache.Set(cachekey, allcoinsmap, 10*time.Second)
ct.cache.Set(cachekey, allcoinsslugmap, 10*time.Second)
go func() {
_ = fcache.Set(cachekey, allcoinsmap, 24*time.Hour)
_ = fcache.Set(cachekey, allcoinsslugmap, 24*time.Hour)
}()
}
if len(ct.allcoinsmap) == 0 {
ct.allcoinsmap = map[string]*coin{}
if len(ct.allcoinsslugmap) == 0 {
ct.allcoinsslugmap = map[string]*coin{}
}
for k, v := range allcoinsmap {
last := ct.allcoinsmap[k]
ct.allcoinsmap[k] = &coin{
for k, v := range allcoinsslugmap {
last := ct.allcoinsslugmap[k]
ct.allcoinsslugmap[k] = &coin{
ID: v.ID,
Name: v.Name,
Symbol: v.Symbol,
@ -59,20 +59,20 @@ func (ct *Cointop) updateCoins() error {
LastUpdated: v.LastUpdated,
}
if last != nil {
ct.allcoinsmap[k].Favorite = last.Favorite
ct.allcoinsslugmap[k].Favorite = last.Favorite
}
}
if len(ct.allcoins) == 0 {
for i := range ct.allcoinsmap {
coin := ct.allcoinsmap[i]
for i := range ct.allcoinsslugmap {
coin := ct.allcoinsslugmap[i]
list = append(list, coin)
}
ct.allcoins = list
ct.sort(ct.sortby, ct.sortdesc, ct.allcoins)
} else {
// update list in place without changing order
for i := range ct.allcoinsmap {
cm := ct.allcoinsmap[i]
for i := range ct.allcoinsslugmap {
cm := ct.allcoinsslugmap[i]
for k := range ct.allcoins {
c := ct.allcoins[k]
if c.ID == cm.ID {

@ -14,7 +14,8 @@ func (ct *Cointop) refreshAll() error {
ct.refreshmux.Lock()
defer ct.refreshmux.Unlock()
ct.setRefreshStatus()
ct.cache.Delete("allcoinsmap")
ct.cache.Delete("allcoinsslugmap")
ct.cache.Delete("allcoinssymbolmap")
ct.cache.Delete("market")
ct.updateCoins()
ct.updateTable()

@ -103,8 +103,8 @@ func (ct *Cointop) refreshTable() error {
func (ct *Cointop) updateTable() error {
sliced := []*coin{}
for i := range ct.allcoinsmap {
v := ct.allcoinsmap[i]
for i := range ct.allcoinsslugmap {
v := ct.allcoinsslugmap[i]
if ct.favorites[v.Symbol] {
v.Favorite = true
}

@ -3,6 +3,7 @@ package cointop
type coin struct {
ID string
Name string
Slug string
Symbol string
Rank int
Price float64

@ -5,6 +5,7 @@ import (
"encoding/gob"
"os"
"runtime"
"strings"
"github.com/miguelmota/cointop/pkg/open"
)
@ -39,3 +40,8 @@ func userHomeDir() string {
}
return os.Getenv("HOME")
}
func (ct *Cointop) slugify(s string) string {
s = strings.ToLower(s)
return s
}

Loading…
Cancel
Save