mirror of
https://github.com/feather-wallet/feather.git
synced 2025-01-23 11:14:31 +00:00
WindowManager: move Wallet cleanup to different thread
This commit is contained in:
parent
2d07483577
commit
9fb734607e
8 changed files with 40 additions and 23 deletions
|
@ -368,8 +368,8 @@ void MainWindow::initWalletContext() {
|
|||
connect(m_ctx->nodes, &Nodes::WSNodeExhausted, this, &MainWindow::showWSNodeExhaustedMessage);
|
||||
|
||||
// Wallet
|
||||
connect(m_ctx->wallet.get(), &Wallet::connectionStatusChanged, this, &MainWindow::onConnectionStatusChanged);
|
||||
connect(m_ctx->wallet.get(), &Wallet::currentSubaddressAccountChanged, this, &MainWindow::updateTitle);
|
||||
connect(m_ctx->wallet, &Wallet::connectionStatusChanged, this, &MainWindow::onConnectionStatusChanged);
|
||||
connect(m_ctx->wallet, &Wallet::currentSubaddressAccountChanged, this, &MainWindow::updateTitle);
|
||||
}
|
||||
|
||||
void MainWindow::menuToggleTabVisible(const QString &key){
|
||||
|
@ -714,7 +714,7 @@ void MainWindow::showConnectionStatusDialog() {
|
|||
}
|
||||
|
||||
void MainWindow::showPasswordDialog() {
|
||||
PasswordChangeDialog dialog{this, m_ctx->wallet.get()};
|
||||
PasswordChangeDialog dialog{this, m_ctx->wallet};
|
||||
dialog.exec();
|
||||
this->updatePasswordIcon();
|
||||
}
|
||||
|
@ -790,12 +790,12 @@ void MainWindow::menuSettingsClicked() {
|
|||
}
|
||||
|
||||
void MainWindow::menuSignVerifyClicked() {
|
||||
SignVerifyDialog dialog{m_ctx->wallet.get(), this};
|
||||
SignVerifyDialog dialog{m_ctx->wallet, this};
|
||||
dialog.exec();
|
||||
}
|
||||
|
||||
void MainWindow::menuVerifyTxProof() {
|
||||
VerifyProofDialog dialog{m_ctx->wallet.get(), this};
|
||||
VerifyProofDialog dialog{m_ctx->wallet, this};
|
||||
dialog.exec();
|
||||
}
|
||||
|
||||
|
@ -845,6 +845,7 @@ void MainWindow::closeEvent(QCloseEvent *event) {
|
|||
m_txTimer.stop();
|
||||
|
||||
this->saveGeo();
|
||||
m_ctx->stopTimers();
|
||||
m_windowManager->closeWindow(this);
|
||||
}
|
||||
|
||||
|
@ -1175,7 +1176,7 @@ void MainWindow::rescanSpent() {
|
|||
}
|
||||
|
||||
void MainWindow::showBalanceDialog() {
|
||||
BalanceDialog dialog{this, m_ctx->wallet.get()};
|
||||
BalanceDialog dialog{this, m_ctx->wallet};
|
||||
dialog.exec();
|
||||
}
|
||||
|
||||
|
|
|
@ -179,6 +179,8 @@ private slots:
|
|||
void onSetStatusText(const QString &text);
|
||||
|
||||
private:
|
||||
friend WindowManager;
|
||||
|
||||
void initStatusBar();
|
||||
void initWidgets();
|
||||
void initMenu();
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
WindowManager::WindowManager() {
|
||||
m_walletManager = WalletManager::instance();
|
||||
m_splashDialog = new SplashDialog;
|
||||
m_cleanupThread = new QThread();
|
||||
|
||||
connect(m_walletManager, &WalletManager::walletOpened, this, &WindowManager::onWalletOpened);
|
||||
connect(m_walletManager, &WalletManager::walletCreated, this, &WindowManager::onWalletCreated);
|
||||
|
@ -68,6 +69,11 @@ void WindowManager::close() {
|
|||
|
||||
void WindowManager::closeWindow(MainWindow *window) {
|
||||
m_windows.removeOne(window);
|
||||
|
||||
// Move Wallet to a different thread for cleanup so it doesn't block GUI thread
|
||||
window->m_ctx->wallet->moveToThread(m_cleanupThread);
|
||||
m_cleanupThread->start();
|
||||
window->m_ctx->wallet->deleteLater();
|
||||
}
|
||||
|
||||
void WindowManager::restartApplication(const QString &binaryFilename) {
|
||||
|
|
|
@ -77,6 +77,8 @@ private:
|
|||
bool m_openWalletTriedOnce = false;
|
||||
bool m_openingWallet = false;
|
||||
bool m_initialNetworkConfigured = false;
|
||||
|
||||
QThread *m_cleanupThread;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -27,22 +27,22 @@ AppContext::AppContext(Wallet *wallet)
|
|||
, networkType(constants::networkType)
|
||||
, m_rpc(new DaemonRpc{this, getNetworkTor(), ""})
|
||||
{
|
||||
connect(this->wallet.get(), &Wallet::moneySpent, this, &AppContext::onMoneySpent);
|
||||
connect(this->wallet.get(), &Wallet::moneyReceived, this, &AppContext::onMoneyReceived);
|
||||
connect(this->wallet.get(), &Wallet::unconfirmedMoneyReceived, this, &AppContext::onUnconfirmedMoneyReceived);
|
||||
connect(this->wallet.get(), &Wallet::newBlock, this, &AppContext::onWalletNewBlock);
|
||||
connect(this->wallet.get(), &Wallet::updated, this, &AppContext::onWalletUpdate);
|
||||
connect(this->wallet.get(), &Wallet::refreshed, this, &AppContext::onWalletRefreshed);
|
||||
connect(this->wallet.get(), &Wallet::transactionCommitted, this, &AppContext::onTransactionCommitted);
|
||||
connect(this->wallet.get(), &Wallet::heightRefreshed, this, &AppContext::onHeightRefreshed);
|
||||
connect(this->wallet.get(), &Wallet::transactionCreated, this, &AppContext::onTransactionCreated);
|
||||
connect(this->wallet.get(), &Wallet::deviceError, this, &AppContext::onDeviceError);
|
||||
connect(this->wallet.get(), &Wallet::deviceButtonRequest, this, &AppContext::onDeviceButtonRequest);
|
||||
connect(this->wallet.get(), &Wallet::deviceButtonPressed, this, &AppContext::onDeviceButtonPressed);
|
||||
connect(this->wallet.get(), &Wallet::connectionStatusChanged, [this]{
|
||||
connect(this->wallet, &Wallet::moneySpent, this, &AppContext::onMoneySpent);
|
||||
connect(this->wallet, &Wallet::moneyReceived, this, &AppContext::onMoneyReceived);
|
||||
connect(this->wallet, &Wallet::unconfirmedMoneyReceived, this, &AppContext::onUnconfirmedMoneyReceived);
|
||||
connect(this->wallet, &Wallet::newBlock, this, &AppContext::onWalletNewBlock);
|
||||
connect(this->wallet, &Wallet::updated, this, &AppContext::onWalletUpdate);
|
||||
connect(this->wallet, &Wallet::refreshed, this, &AppContext::onWalletRefreshed);
|
||||
connect(this->wallet, &Wallet::transactionCommitted, this, &AppContext::onTransactionCommitted);
|
||||
connect(this->wallet, &Wallet::heightRefreshed, this, &AppContext::onHeightRefreshed);
|
||||
connect(this->wallet, &Wallet::transactionCreated, this, &AppContext::onTransactionCreated);
|
||||
connect(this->wallet, &Wallet::deviceError, this, &AppContext::onDeviceError);
|
||||
connect(this->wallet, &Wallet::deviceButtonRequest, this, &AppContext::onDeviceButtonRequest);
|
||||
connect(this->wallet, &Wallet::deviceButtonPressed, this, &AppContext::onDeviceButtonPressed);
|
||||
connect(this->wallet, &Wallet::connectionStatusChanged, [this]{
|
||||
this->nodes->autoConnect();
|
||||
});
|
||||
connect(this->wallet.get(), &Wallet::currentSubaddressAccountChanged, [this]{
|
||||
connect(this->wallet, &Wallet::currentSubaddressAccountChanged, [this]{
|
||||
this->updateBalance();
|
||||
});
|
||||
|
||||
|
@ -273,6 +273,10 @@ void AppContext::onOpenAliasResolve(const QString &openAlias) {
|
|||
emit openAliasResolveError(msg);
|
||||
}
|
||||
|
||||
void AppContext::stopTimers() {
|
||||
m_storeTimer.stop();
|
||||
}
|
||||
|
||||
// ########################################## LIBWALLET QT SIGNALS ####################################################
|
||||
|
||||
void AppContext::onMoneySpent(const QString &txId, quint64 amount) {
|
||||
|
|
|
@ -25,7 +25,7 @@ Q_OBJECT
|
|||
public:
|
||||
explicit AppContext(Wallet *wallet);
|
||||
|
||||
QScopedPointer<Wallet> wallet;
|
||||
Wallet *wallet;
|
||||
Nodes *nodes;
|
||||
|
||||
bool donationSending = false;
|
||||
|
@ -46,6 +46,8 @@ public:
|
|||
|
||||
void storeWallet();
|
||||
|
||||
void stopTimers();
|
||||
|
||||
public slots:
|
||||
void onCreateTransaction(const QString &address, quint64 amount, const QString &description, bool all);
|
||||
void onCreateTransactionMultiDest(const QVector<QString> &addresses, const QVector<quint64> &amounts, const QString &description);
|
||||
|
|
|
@ -45,7 +45,7 @@ AccountSwitcherDialog::AccountSwitcherDialog(QSharedPointer<AppContext> ctx, QWi
|
|||
m_ctx->wallet->subaddressAccount()->refresh();
|
||||
});
|
||||
|
||||
connect(m_ctx->wallet.get(), &Wallet::currentSubaddressAccountChanged, this, &AccountSwitcherDialog::updateSelection);
|
||||
connect(m_ctx->wallet, &Wallet::currentSubaddressAccountChanged, this, &AccountSwitcherDialog::updateSelection);
|
||||
connect(m_ctx->wallet->subaddressAccount(), &SubaddressAccount::refreshFinished, this, &AccountSwitcherDialog::updateSelection);
|
||||
|
||||
this->updateSelection();
|
||||
|
|
|
@ -30,7 +30,7 @@ TxInfoDialog::TxInfoDialog(QSharedPointer<AppContext> ctx, TransactionInfo *txIn
|
|||
connect(ui->btn_CopyTxKey, &QPushButton::pressed, this, &TxInfoDialog::copyTxKey);
|
||||
connect(ui->btn_createTxProof, &QPushButton::pressed, this, &TxInfoDialog::createTxProof);
|
||||
|
||||
connect(m_ctx->wallet.get(), &Wallet::newBlock, this, &TxInfoDialog::updateData);
|
||||
connect(m_ctx->wallet, &Wallet::newBlock, this, &TxInfoDialog::updateData);
|
||||
|
||||
this->setData(txInfo);
|
||||
|
||||
|
|
Loading…
Reference in a new issue