diff --git a/cointop/navigation.go b/cointop/navigation.go index abbd2be..6c8fe65 100644 --- a/cointop/navigation.go +++ b/cointop/navigation.go @@ -409,13 +409,18 @@ func (ct *Cointop) GoToPageRowIndex(idx int) error { // GoToGlobalIndex navigates to the selected row index of all page rows func (ct *Cointop) GoToGlobalIndex(idx int) error { - log.Debug("GoToGlobalIndex()") + log.Debugf("GoToGlobalIndex(%d)", idx) + target := ct.State.allCoins[idx] l := ct.TableRowsLen() atpage := idx / l ct.SetPage(atpage) - rowIndex := idx % l - ct.HighlightRow(rowIndex) ct.UpdateTable() + // Look for the coin in the current page + for i, coin := range ct.State.coins { + if coin == target { + ct.HighlightRow(i) + } + } return nil } diff --git a/cointop/portfolio.go b/cointop/portfolio.go index d27f32f..52860c1 100644 --- a/cointop/portfolio.go +++ b/cointop/portfolio.go @@ -556,25 +556,13 @@ func (ct *Cointop) GetPortfolioSlice() []*Coin { return sliced } -OUTER: - for i := range ct.State.allCoins { - coin := ct.State.allCoins[i] - p, isNew := ct.PortfolioEntry(coin) - if isNew { + for _, p := range ct.State.portfolio.Entries { + coinIfc, _ := ct.State.allCoinsSlugMap.Load(p.Coin) + coin, ok := coinIfc.(*Coin) + if !ok { + log.Errorf("Could not find coin %s", p.Coin) continue } - // check not already found - updateSlice := -1 - for j := range sliced { - if coin.Symbol == sliced[j].Symbol { - if coin.Rank >= sliced[j].Rank { - continue OUTER // skip updates from lower-ranked coins - } - updateSlice = j // update this later - break - } - } - coin.Holdings = p.Holdings balance := coin.Price * p.Holdings balancestr := fmt.Sprintf("%.2f", balance) @@ -583,12 +571,7 @@ OUTER: } balance, _ = strconv.ParseFloat(balancestr, 64) coin.Balance = balance - if updateSlice == -1 { - sliced = append(sliced, coin) - } else { - sliced[updateSlice] = coin - } - + sliced = append(sliced, coin) } sort.Slice(sliced, func(i, j int) bool {