Skip to content

Commit

Permalink
fixing a sudden panic when the wallet has many addresses (#408)
Browse files Browse the repository at this point in the history
  • Loading branch information
b00f committed Sep 20, 2022
1 parent ce5416e commit f754efb
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 31 deletions.
77 changes: 50 additions & 27 deletions cmd/gtk/model_wallet.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
package main

import (
"fmt"

"github.com/gotk3/gotk3/glib"
"github.com/gotk3/gotk3/gtk"
"github.com/pactus-project/pactus/util"
Expand All @@ -16,7 +18,7 @@ type walletModel struct {

func newWalletModel(wallet *wallet.Wallet) *walletModel {
listStore, _ := gtk.ListStoreNew(
glib.TYPE_INT, // Column no
glib.TYPE_STRING, // Column no
glib.TYPE_STRING, // Address
glib.TYPE_STRING, // Label
glib.TYPE_STRING, // balance
Expand All @@ -33,37 +35,58 @@ func (model *walletModel) ToTreeModel() *gtk.TreeModel {
}

func (model *walletModel) rebuildModel() error {
model.listStore.Clear()
for no, info := range model.wallet.AddressLabels() {
label := info.Label
if info.Imported {
label += "(Imported)"
}
balance, _ := model.wallet.Balance(info.Address)
stake, _ := model.wallet.Stake(info.Address)
balanceStr := util.ChangeToString(balance)
stakeStr := util.ChangeToString(stake)

iter := model.listStore.Append()
err := model.listStore.Set(iter,
[]int{
IDAddressesColumnNo,
IDAddressesColumnAddress,
IDAddressesColumnLabel,
IDAddressesColumnBalance,
IDAddressesColumnStake},
[]interface{}{
no + 1,
go func() {
data := [][]string{}
for no, info := range model.wallet.AddressLabels() {
label := info.Label
if info.Imported {
label += "(Imported)"
}

balanceStr := "-"
stakeStr := "-"
if no < 5 {
balance, _ := model.wallet.Balance(info.Address)
stake, _ := model.wallet.Stake(info.Address)
balanceStr = util.ChangeToString(balance)
stakeStr = util.ChangeToString(stake)
}

data = append(data, []string{
fmt.Sprintf("%v", no+1),
info.Address,
label,
balanceStr,
stakeStr,
})

if err != nil {
return err
}
}

glib.IdleAdd(func() bool {
model.listStore.Clear()
for _, d := range data {
iter := model.listStore.Append()
err := model.listStore.Set(iter,
[]int{
IDAddressesColumnNo,
IDAddressesColumnAddress,
IDAddressesColumnLabel,
IDAddressesColumnBalance,
IDAddressesColumnStake},
[]interface{}{
d[0],
d[1],
d[2],
d[3],
d[4],
})

errorCheck(err)
}

return false
})

}()

return nil
}
Expand All @@ -83,7 +106,7 @@ func (model *walletModel) createAddress() error {
IDAddressesColumnBalance,
IDAddressesColumnStake},
[]interface{}{
model.wallet.AddressCount() + 1,
fmt.Sprintf("%v", model.wallet.AddressCount()+1),
address,
"",
"0",
Expand Down
6 changes: 2 additions & 4 deletions cmd/gtk/widget_wallet.go
Original file line number Diff line number Diff line change
Expand Up @@ -169,10 +169,8 @@ func (ww *widgetWallet) onShowSeed() {
}

func (ww *widgetWallet) timeout() bool {
go func() {
err := ww.model.rebuildModel()
fatalErrorCheck(err)
}()
err := ww.model.rebuildModel()
errorCheck(err)

return true
}
Expand Down

0 comments on commit f754efb

Please sign in to comment.