Don't run QtKeychain job in a nested event loop
Doing that causes deadlocks and there's no need for it here
This commit is contained in:
@@ -271,23 +271,19 @@ QKeychain::ReadPasswordJob *Controller::loadAccessTokenFromKeyChain(const QStrin
|
|||||||
return job;
|
return job;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Controller::saveAccessTokenToKeyChain(const QString &userId, const QByteArray &accessToken)
|
void Controller::saveAccessTokenToKeyChain(const QString &userId, const QByteArray &accessToken)
|
||||||
{
|
{
|
||||||
qDebug() << "Save the access token to the keychain for " << userId;
|
qDebug() << "Save the access token to the keychain for " << userId;
|
||||||
QKeychain::WritePasswordJob job(qAppName());
|
auto job = new QKeychain::WritePasswordJob(qAppName());
|
||||||
job.setAutoDelete(false);
|
job->setAutoDelete(true);
|
||||||
job.setKey(userId);
|
job->setKey(userId);
|
||||||
job.setBinaryData(accessToken);
|
job->setBinaryData(accessToken);
|
||||||
QEventLoop loop;
|
connect(job, &QKeychain::WritePasswordJob::finished, this, [job]() {
|
||||||
QKeychain::WritePasswordJob::connect(&job, &QKeychain::Job::finished, &loop, &QEventLoop::quit);
|
if (job->error()) {
|
||||||
job.start();
|
qWarning() << "Could not save access token to the keychain: " << qPrintable(job->errorString());
|
||||||
loop.exec();
|
}
|
||||||
|
});
|
||||||
if (job.error()) {
|
job->start();
|
||||||
qWarning() << "Could not save access token to the keychain: " << qPrintable(job.errorString());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Controller::supportSystemTray() const
|
bool Controller::supportSystemTray() const
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
* @brief Save an access token to the keychain for the given account.
|
* @brief Save an access token to the keychain for the given account.
|
||||||
*/
|
*/
|
||||||
bool saveAccessTokenToKeyChain(const QString &userId, const QByteArray &accessToken);
|
void saveAccessTokenToKeyChain(const QString &userId, const QByteArray &accessToken);
|
||||||
|
|
||||||
[[nodiscard]] bool supportSystemTray() const;
|
[[nodiscard]] bool supportSystemTray() const;
|
||||||
|
|
||||||
|
|||||||
@@ -78,9 +78,7 @@ void LoginHelper::init()
|
|||||||
account.setHomeserver(m_connection->homeserver());
|
account.setHomeserver(m_connection->homeserver());
|
||||||
account.setDeviceId(m_connection->deviceId());
|
account.setDeviceId(m_connection->deviceId());
|
||||||
account.setDeviceName(m_deviceName);
|
account.setDeviceName(m_deviceName);
|
||||||
if (!Controller::instance().saveAccessTokenToKeyChain(account.userId(), m_connection->accessToken())) {
|
Controller::instance().saveAccessTokenToKeyChain(account.userId(), m_connection->accessToken());
|
||||||
qWarning() << "Couldn't save access token";
|
|
||||||
}
|
|
||||||
account.sync();
|
account.sync();
|
||||||
Controller::instance().addConnection(m_connection);
|
Controller::instance().addConnection(m_connection);
|
||||||
Controller::instance().setActiveConnection(m_connection);
|
Controller::instance().setActiveConnection(m_connection);
|
||||||
|
|||||||
@@ -105,9 +105,7 @@ void Registration::registerAccount()
|
|||||||
account.setHomeserver(connection->homeserver());
|
account.setHomeserver(connection->homeserver());
|
||||||
account.setDeviceId(connection->deviceId());
|
account.setDeviceId(connection->deviceId());
|
||||||
account.setDeviceName(displayName);
|
account.setDeviceName(displayName);
|
||||||
if (!Controller::instance().saveAccessTokenToKeyChain(account.userId(), connection->accessToken())) {
|
Controller::instance().saveAccessTokenToKeyChain(account.userId(), connection->accessToken());
|
||||||
qWarning() << "Couldn't save access token";
|
|
||||||
}
|
|
||||||
account.sync();
|
account.sync();
|
||||||
Controller::instance().addConnection(connection);
|
Controller::instance().addConnection(connection);
|
||||||
Controller::instance().setActiveConnection(connection);
|
Controller::instance().setActiveConnection(connection);
|
||||||
|
|||||||
Reference in New Issue
Block a user