Skip to content

Commit ec3e68e

Browse files
committed
qml: Move setSelectedWallet work to worker QThread
1 parent b41a0e4 commit ec3e68e

File tree

2 files changed

+28
-8
lines changed

2 files changed

+28
-8
lines changed

src/qml/walletqmlcontroller.cpp

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,47 @@
55
#include <qml/walletqmlcontroller.h>
66

77
#include <interfaces/node.h>
8+
#include <util/threadnames.h>
9+
10+
#include <QTimer>
811

912
WalletQmlController::WalletQmlController(interfaces::Node& node, QObject *parent)
1013
: QObject(parent)
1114
, m_node(node)
15+
, m_selected_wallet(new WalletQmlModel(parent))
16+
, m_worker(new QObject)
17+
, m_worker_thread(new QThread(this))
1218
{
13-
m_selected_wallet = new WalletQmlModel(parent);
19+
m_worker->moveToThread(m_worker_thread);
20+
m_worker_thread->start();
21+
QTimer::singleShot(0, m_worker, []() {
22+
util::ThreadRename("qml-walletctrl");
23+
});
1424
}
1525

1626
WalletQmlController::~WalletQmlController()
1727
{
1828
if (m_handler_load_wallet) {
1929
m_handler_load_wallet->disconnect();
2030
}
31+
m_worker_thread->quit();
32+
m_worker_thread->wait();
33+
delete m_worker;
2134
}
2235

2336
void WalletQmlController::setSelectedWallet(QString path)
2437
{
25-
std::vector<bilingual_str> warning_message;
26-
auto wallet{m_node.walletLoader().loadWallet(path.toStdString(), warning_message)};
27-
if (wallet.has_value()) {
28-
m_selected_wallet = new WalletQmlModel(std::move(wallet.value()));
29-
m_wallets.push_back(m_selected_wallet);
30-
Q_EMIT selectedWalletChanged();
31-
}
38+
QTimer::singleShot(0, m_worker, [this, path = path.toStdString()]() {
39+
std::vector<bilingual_str> warning_message;
40+
auto wallet{m_node.walletLoader().loadWallet(path, warning_message)};
41+
if (wallet.has_value()) {
42+
auto wallet_model = new WalletQmlModel(std::move(wallet.value()));
43+
wallet_model->moveToThread(this->thread());
44+
m_selected_wallet = wallet_model;
45+
m_wallets.push_back(m_selected_wallet);
46+
Q_EMIT selectedWalletChanged();
47+
}
48+
});
3249
}
3350

3451
WalletQmlModel* WalletQmlController::selectedWallet() const

src/qml/walletqmlcontroller.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <interfaces/wallet.h>
1212

1313
#include <QObject>
14+
#include <QThread>
1415
#include <memory>
1516

1617
class WalletQmlController : public QObject
@@ -38,6 +39,8 @@ public Q_SLOTS:
3839

3940
interfaces::Node& m_node;
4041
WalletQmlModel* m_selected_wallet;
42+
QObject* m_worker;
43+
QThread* m_worker_thread;
4144
std::vector<WalletQmlModel*> m_wallets;
4245
std::unique_ptr<interfaces::Handler> m_handler_load_wallet;
4346
};

0 commit comments

Comments
 (0)