Skip to content

Commit 6ba6907

Browse files
committed
qml: Fix handling of load wallet in controller
Previous implementation was loading the wallet twice
1 parent a8d15db commit 6ba6907

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)