Skip to content

Commit 0697de7

Browse files
committed
qt: Move wallet preloading out of model constructors
1 parent 7b47d1e commit 0697de7

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

@@ -39,6 +34,14 @@ RecentRequestsTableModel::~RecentRequestsTableModel()
3934
/* Intentionally left empty */
4035
}
4136

37+
void RecentRequestsTableModel::preload()
38+
{
39+
// Load entries from wallet
40+
for (const std::string& request : walletModel->wallet().getAddressReceiveRequests()) {
41+
addNewRequest(request);
42+
}
43+
}
44+
4245
int RecentRequestsTableModel::rowCount(const QModelIndex &parent) const
4346
{
4447
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
@@ -118,6 +118,7 @@ void TestAddAddressesToSendBook(interfaces::Node& node)
118118
WalletContext& context = *node.walletClient().context();
119119
AddWallet(context, wallet);
120120
WalletModel walletModel(interfaces::MakeWallet(context, wallet), clientModel, platformStyle.get());
121+
walletModel.preload();
121122
RemoveWallet(context, wallet, /* load_on_start= */ std::nullopt);
122123
EditAddressDialog editAddressDialog(EditAddressDialog::NewSendingAddress);
123124
editAddressDialog.setModel(walletModel.getAddressTableModel());

src/qt/test/wallettests.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ void TestGUI(interfaces::Node& node)
178178
WalletContext& context = *node.walletClient().context();
179179
AddWallet(context, wallet);
180180
WalletModel walletModel(interfaces::MakeWallet(context, wallet), clientModel, platformStyle.get());
181+
walletModel.preload();
181182
RemoveWallet(context, wallet, /* load_on_start= */ std::nullopt);
182183
sendCoinsDialog.setModel(&walletModel);
183184
transactionView.setModel(&walletModel);

src/qt/transactiontablemodel.cpp

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

@@ -269,6 +265,12 @@ TransactionTableModel::~TransactionTableModel()
269265
delete priv;
270266
}
271267

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

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
@@ -124,6 +124,8 @@ WalletModel* WalletController::getOrCreateWallet(std::unique_ptr<interfaces::Wal
124124
wallet_model = new WalletModel(std::move(wallet), m_client_model, m_platform_style, this);
125125
}, GUIUtil::blockingGUIThreadConnection());
126126

127+
wallet_model->preload();
128+
127129
m_wallets.push_back(wallet_model);
128130

129131
// 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
@@ -53,15 +53,21 @@ WalletModel::WalletModel(std::unique_ptr<interfaces::Wallet> wallet, ClientModel
5353
addressTableModel = new AddressTableModel(this);
5454
transactionTableModel = new TransactionTableModel(platformStyle, this);
5555
recentRequestsTableModel = new RecentRequestsTableModel(this);
56-
57-
subscribeToCoreSignals();
5856
}
5957

6058
WalletModel::~WalletModel()
6159
{
6260
unsubscribeFromCoreSignals();
6361
}
6462

63+
void WalletModel::preload()
64+
{
65+
addressTableModel->preload();
66+
transactionTableModel->preload();
67+
recentRequestsTableModel->preload();
68+
subscribeToCoreSignals();
69+
}
70+
6571
void WalletModel::startPollBalance()
6672
{
6773
// This timer will be fired repeatedly to update the balance

0 commit comments

Comments
 (0)