Skip to content

Commit 458d682

Browse files
committed
qt: Move wallet preloading out of model constructors
1 parent 0daa4df commit 458d682

11 files changed

Lines changed: 45 additions & 17 deletions

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
@@ -127,6 +127,7 @@ void TestAddAddressesToSendBook(interfaces::Node& node)
127127
WalletContext& context = *node.walletLoader().context();
128128
AddWallet(context, wallet);
129129
WalletModel walletModel(interfaces::MakeWallet(context, wallet), clientModel, platformStyle.get());
130+
walletModel.preload();
130131
RemoveWallet(context, wallet, /* load_on_start= */ std::nullopt);
131132
EditAddressDialog editAddressDialog(EditAddressDialog::NewSendingAddress);
132133
editAddressDialog.setModel(walletModel.getAddressTableModel());

src/qt/test/wallettests.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ void TestGUI(interfaces::Node& node)
188188
WalletContext& context = *node.walletLoader().context();
189189
AddWallet(context, wallet);
190190
WalletModel walletModel(interfaces::MakeWallet(context, wallet), clientModel, platformStyle.get());
191+
walletModel.preload();
191192
RemoveWallet(context, wallet, /* load_on_start= */ std::nullopt);
192193
sendCoinsDialog.setModel(&walletModel);
193194
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
@@ -130,6 +130,8 @@ WalletModel* WalletController::getOrCreateWallet(std::unique_ptr<interfaces::Wal
130130
wallet_model = new WalletModel(std::move(wallet), m_client_model, m_platform_style, this);
131131
}, GUIUtil::blockingGUIThreadConnection());
132132

133+
wallet_model->preload();
134+
133135
m_wallets.push_back(wallet_model);
134136

135137
// 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)