Merge 9bd109b78d into merged_master (Bitcoin PR #17120)

This commit is contained in:
Andrew Poelstra 2020-11-09 21:20:45 +00:00
commit 3feea6cb08
3 changed files with 17 additions and 7 deletions

View file

@ -109,6 +109,12 @@ WalletModel* WalletController::getOrCreateWallet(std::unique_ptr<interfaces::Wal
wallet_model->setParent(this);
m_wallets.push_back(wallet_model);
// WalletModel::startPollBalance needs to be called in a thread managed by
// Qt because of startTimer. Considering the current thread can be a RPC
// thread, better delegate the calling to Qt with Qt::AutoConnection.
const bool called = QMetaObject::invokeMethod(wallet_model, "startPollBalance");
assert(called);
connect(wallet_model, &WalletModel::unload, [this, wallet_model] {
// Defer removeAndDeleteWallet when no modal widget is active.
// TODO: remove this workaround by removing usage of QDiallog::exec.

View file

@ -58,11 +58,6 @@ WalletModel::WalletModel(std::unique_ptr<interfaces::Wallet> wallet, interfaces:
transactionTableModel = new TransactionTableModel(platformStyle, this);
recentRequestsTableModel = new RecentRequestsTableModel(this);
// This timer will be fired repeatedly to update the balance
pollTimer = new QTimer(this);
connect(pollTimer, &QTimer::timeout, this, &WalletModel::pollBalanceChanged);
pollTimer->start(MODEL_UPDATE_DELAY);
subscribeToCoreSignals();
}
@ -76,6 +71,14 @@ std::set<CAsset> WalletModel::getAssetTypes() const
return cached_asset_types;
}
void WalletModel::startPollBalance()
{
// This timer will be fired repeatedly to update the balance
QTimer* timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &WalletModel::pollBalanceChanged);
timer->start(MODEL_UPDATE_DELAY);
}
void WalletModel::updateStatus()
{
EncryptionStatus newEncryptionStatus = getEncryptionStatus();

View file

@ -257,8 +257,6 @@ private:
EncryptionStatus cachedEncryptionStatus;
int cachedNumBlocks;
QTimer *pollTimer;
void subscribeToCoreSignals();
void unsubscribeFromCoreSignals();
void checkBalanceChanged(const interfaces::WalletBalances& new_balances);
@ -297,6 +295,9 @@ Q_SIGNALS:
void canGetAddressesChanged();
public Q_SLOTS:
/* Starts a timer to periodically update the balance */
void startPollBalance();
/* Wallet status might have changed */
void updateStatus();
/* New transaction, or transaction changed status */