Skip to content

Commit e2ffc98

Browse files
promagJoão Barbosa
authored andcommitted
qt: Move wallet preloading out of model constructors
1 parent f3e7047 commit e2ffc98

11 files changed

+45
-17
lines changed

src/qt/addresstablemodel.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,13 @@ class AddressTablePriv
7070
{
7171
public:
7272
QList<AddressTableEntry> cachedAddressTable;
73-
AddressTableModel *parent;
73+
AddressTableModel* const parent;
74+
const bool pk_hash_only;
7475

75-
explicit AddressTablePriv(AddressTableModel *_parent):
76-
parent(_parent) {}
76+
explicit AddressTablePriv(AddressTableModel *_parent, bool pk_hash_only):
77+
parent(_parent), pk_hash_only(pk_hash_only) {}
7778

78-
void refreshAddressTable(interfaces::Wallet& wallet, bool pk_hash_only = false)
79+
void refreshAddressTable(interfaces::Wallet& wallet)
7980
{
8081
cachedAddressTable.clear();
8182
{
@@ -166,15 +167,19 @@ AddressTableModel::AddressTableModel(WalletModel *parent, bool pk_hash_only) :
166167
QAbstractTableModel(parent), walletModel(parent)
167168
{
168169
columns << tr("Label") << tr("Address");
169-
priv = new AddressTablePriv(this);
170-
priv->refreshAddressTable(parent->wallet(), pk_hash_only);
170+
priv = new AddressTablePriv(this, pk_hash_only);
171171
}
172172

173173
AddressTableModel::~AddressTableModel()
174174
{
175175
delete priv;
176176
}
177177

178+
void AddressTableModel::preload()
179+
{
180+
priv->refreshAddressTable(walletModel->wallet());
181+
}
182+
178183
int AddressTableModel::rowCount(const QModelIndex &parent) const
179184
{
180185
if (parent.isValid()) {

src/qt/addresstablemodel.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ class AddressTableModel : public QAbstractTableModel
5050
static const QString Send; /**< Specifies send address */
5151
static const QString Receive; /**< Specifies receive address */
5252

53+
void preload();
54+
5355
/** @name Methods overridden from QAbstractTableModel
5456
@{*/
5557
int rowCount(const QModelIndex &parent) const override;

src/qt/recentrequeststablemodel.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,6 @@
2323
RecentRequestsTableModel::RecentRequestsTableModel(WalletModel *parent) :
2424
QAbstractTableModel(parent), walletModel(parent)
2525
{
26-
// Load entries from wallet
27-
for (const std::string& request : parent->wallet().getAddressReceiveRequests()) {
28-
addNewRequest(request);
29-
}
30-
3126
/* These columns must match the indices in the ColumnIndex enumeration */
3227
columns << tr("Date") << tr("Label") << tr("Message") << getAmountTitle();
3328

@@ -36,6 +31,14 @@ RecentRequestsTableModel::RecentRequestsTableModel(WalletModel *parent) :
3631

3732
RecentRequestsTableModel::~RecentRequestsTableModel() = default;
3833

34+
void RecentRequestsTableModel::preload()
35+
{
36+
// Load entries from wallet
37+
for (const std::string& request : walletModel->wallet().getAddressReceiveRequests()) {
38+
addNewRequest(request);
39+
}
40+
}
41+
3942
int RecentRequestsTableModel::rowCount(const QModelIndex &parent) const
4043
{
4144
if (parent.isValid()) {

src/qt/recentrequeststablemodel.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ class RecentRequestsTableModel: public QAbstractTableModel
6565
NUMBER_OF_COLUMNS
6666
};
6767

68+
void preload();
69+
6870
/** @name Methods overridden from QAbstractTableModel
6971
@{*/
7072
int rowCount(const QModelIndex &parent) const override;

src/qt/test/addressbooktests.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ void TestAddAddressesToSendBook(interfaces::Node& node)
129129
WalletContext& context = *node.walletLoader().context();
130130
AddWallet(context, wallet);
131131
WalletModel walletModel(interfaces::MakeWallet(context, wallet), clientModel, platformStyle.get());
132+
walletModel.preload();
132133
RemoveWallet(context, wallet, /* load_on_start= */ std::nullopt);
133134
EditAddressDialog editAddressDialog(EditAddressDialog::NewSendingAddress);
134135
editAddressDialog.setModel(walletModel.getAddressTableModel());

src/qt/test/wallettests.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ void TestGUI(interfaces::Node& node)
189189
WalletContext& context = *node.walletLoader().context();
190190
AddWallet(context, wallet);
191191
WalletModel walletModel(interfaces::MakeWallet(context, wallet), clientModel, platformStyle.get());
192+
walletModel.preload();
192193
RemoveWallet(context, wallet, /* load_on_start= */ std::nullopt);
193194
sendCoinsDialog.setModel(&walletModel);
194195
transactionView.setModel(&walletModel);

src/qt/transactiontablemodel.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -256,11 +256,7 @@ TransactionTableModel::TransactionTableModel(const PlatformStyle *_platformStyle
256256
fProcessingQueuedTransactions(false),
257257
platformStyle(_platformStyle)
258258
{
259-
subscribeToCoreSignals();
260-
261259
columns << QString() << QString() << tr("Date") << tr("Type") << tr("Label") << BitcoinUnits::getAmountColumnTitle(walletModel->getOptionsModel()->getDisplayUnit());
262-
priv->refreshWallet(walletModel->wallet());
263-
264260
connect(walletModel->getOptionsModel(), &OptionsModel::displayUnitChanged, this, &TransactionTableModel::updateDisplayUnit);
265261
}
266262

@@ -270,6 +266,12 @@ TransactionTableModel::~TransactionTableModel()
270266
delete priv;
271267
}
272268

269+
void TransactionTableModel::preload()
270+
{
271+
subscribeToCoreSignals();
272+
priv->refreshWallet(walletModel->wallet());
273+
}
274+
273275
/** Updates the column title to "Amount (DisplayUnit)" and emits headerDataChanged() signal for table headers to react. */
274276
void TransactionTableModel::updateAmountColumnTitle()
275277
{

src/qt/transactiontablemodel.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ class TransactionTableModel : public QAbstractTableModel
7676
RawDecorationRole,
7777
};
7878

79+
void preload();
80+
7981
int rowCount(const QModelIndex &parent) const override;
8082
int columnCount(const QModelIndex &parent) const override;
8183
QVariant data(const QModelIndex &index, int role) const override;

src/qt/walletcontroller.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ WalletModel* WalletController::getOrCreateWallet(std::unique_ptr<interfaces::Wal
131131
wallet_model = new WalletModel(std::move(wallet), m_client_model, m_platform_style, this);
132132
}, GUIUtil::blockingGUIThreadConnection());
133133

134+
wallet_model->preload();
135+
134136
m_wallets.push_back(wallet_model);
135137

136138
// WalletModel::startPollBalance needs to be called in a thread managed by

src/qt/walletmodel.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,21 @@ WalletModel::WalletModel(std::unique_ptr<interfaces::Wallet> wallet, ClientModel
5656
addressTableModel = new AddressTableModel(this);
5757
transactionTableModel = new TransactionTableModel(platformStyle, this);
5858
recentRequestsTableModel = new RecentRequestsTableModel(this);
59-
60-
subscribeToCoreSignals();
6159
}
6260

6361
WalletModel::~WalletModel()
6462
{
6563
unsubscribeFromCoreSignals();
6664
}
6765

66+
void WalletModel::preload()
67+
{
68+
addressTableModel->preload();
69+
transactionTableModel->preload();
70+
recentRequestsTableModel->preload();
71+
subscribeToCoreSignals();
72+
}
73+
6874
void WalletModel::startPollBalance()
6975
{
7076
// This timer will be fired repeatedly to update the balance

0 commit comments

Comments
 (0)