Skip to content

Commit a38cf5b

Browse files
committed
Merge #447: Fix handling of load wallet in controller
6ba6907 qml: Fix handling of load wallet in controller (johnny9) Pull request description: Don't load wallet if we already have them loaded. There are 3 changes to the original code. In setSelectedWallet there is a proper check to see if there's already an instance of the wallet loaded in our m_wallets list and sets selected_wallet to that if true, It only loads the wallet into the list once (handleLoadWallet gets called when doing loadWallet), and it fixes the initialize to not call handlLoadWallet and emit selectedWalletChanged a bunch of times. ACKs for top commit: jarolrod: ACK 6ba6907 Tree-SHA512: daba6fb019ba78f1c83105e34a1d724408ba83a4564942dd127d1e0edd0fc5abc63e3080b9b621cce9ae27b2dca96070300caaa8250c4c031836f34b5b678a07
2 parents fd54cd9 + 6ba6907 commit a38cf5b

File tree

1 file changed

+30
-22
lines changed

1 file changed

+30
-22
lines changed

src/qml/walletqmlcontroller.cpp

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
#include <qml/walletqmlcontroller.h>
66

7+
#include <qml/models/walletqmlmodel.h>
8+
79
#include <interfaces/node.h>
810
#include <support/allocators/secure.h>
911
#include <wallet/walletutil.h>
@@ -37,19 +39,19 @@ WalletQmlController::~WalletQmlController()
3739

3840
void WalletQmlController::setSelectedWallet(QString path)
3941
{
42+
if (!m_wallets.empty()) {
43+
for (WalletQmlModel* wallet : m_wallets) {
44+
if (wallet->name() == path) {
45+
m_selected_wallet = wallet;
46+
Q_EMIT selectedWalletChanged();
47+
return;
48+
}
49+
}
50+
}
51+
4052
QTimer::singleShot(0, m_worker, [this, path = path.toStdString()]() {
4153
std::vector<bilingual_str> warning_message;
4254
auto wallet{m_node.walletLoader().loadWallet(path, warning_message)};
43-
if (wallet.has_value()) {
44-
auto wallet_model = new WalletQmlModel(std::move(wallet.value()));
45-
wallet_model->moveToThread(this->thread());
46-
{
47-
QMutexLocker locker(&m_wallets_mutex);
48-
m_selected_wallet = wallet_model;
49-
m_wallets.push_back(m_selected_wallet);
50-
}
51-
Q_EMIT selectedWalletChanged();
52-
}
5355
});
5456
}
5557

@@ -85,20 +87,22 @@ void WalletQmlController::createSingleSigWallet(const QString &name, const QStri
8587

8688
void WalletQmlController::handleLoadWallet(std::unique_ptr<interfaces::Wallet> wallet)
8789
{
88-
{
89-
QMutexLocker locker(&m_wallets_mutex);
90-
if (!m_wallets.empty()) {
91-
QString name = QString::fromStdString(wallet->getWalletName());
92-
for (WalletQmlModel* wallet_model : m_wallets) {
93-
if (wallet_model->name() == name) {
94-
return;
95-
}
90+
QMutexLocker locker(&m_wallets_mutex);
91+
if (!m_wallets.empty()) {
92+
QString name = QString::fromStdString(wallet->getWalletName());
93+
for (WalletQmlModel* wallet_model : m_wallets) {
94+
if (wallet_model->name() == name) {
95+
m_selected_wallet = wallet_model;
96+
Q_EMIT selectedWalletChanged();
97+
return;
9698
}
9799
}
98-
99-
m_selected_wallet = new WalletQmlModel(std::move(wallet));
100-
m_wallets.push_back(m_selected_wallet);
101100
}
101+
102+
auto wallet_model = new WalletQmlModel(std::move(wallet));
103+
wallet_model->moveToThread(this->thread());
104+
m_selected_wallet = wallet_model;
105+
m_wallets.push_back(m_selected_wallet);
102106
Q_EMIT selectedWalletChanged();
103107
}
104108

@@ -110,6 +114,10 @@ void WalletQmlController::initialize()
110114

111115
auto wallets = m_node.walletLoader().getWallets();
112116
for (auto& wallet : wallets) {
113-
handleLoadWallet(std::move(wallet));
117+
m_wallets.push_back(new WalletQmlModel(std::move(wallet)));
118+
}
119+
if (!m_wallets.empty()) {
120+
m_selected_wallet = m_wallets.front();
121+
Q_EMIT selectedWalletChanged();
114122
}
115123
}

0 commit comments

Comments
 (0)