1
Fork 0
mirror of https://github.com/redstrate/Astra.git synced 2025-04-22 04:37:46 +00:00

Implement manual password store for Steam Deck Game Mode

This commit is contained in:
Joshua Goins 2023-12-20 21:57:51 -05:00
parent 167a94a2fe
commit 8d4ee7b19d

View file

@ -271,41 +271,51 @@ void Account::fetchAvatar()
void Account::setKeychainValue(const QString &key, const QString &value) void Account::setKeychainValue(const QString &key, const QString &value)
{ {
auto job = new QKeychain::WritePasswordJob(QStringLiteral("Astra"), this); if (m_launcher.isSteamDeck()) {
job->setTextData(value); auto stateConfig = KSharedConfig::openStateConfig();
#ifdef FLATPAK
job->setKey(QStringLiteral("flatpak-") + m_key + QStringLiteral("-") + key);
#else
job->setKey(m_key + QStringLiteral("-") + key);
#endif
job->setInsecureFallback(m_launcher.isSteamDeck()); // The Steam Deck does not have secrets provider in Game Mode
job->start();
connect(job, &QKeychain::WritePasswordJob::finished, this, [job] { stateConfig->group(QStringLiteral("Passwords")).writeEntry(m_key + QStringLiteral("-") + key, value);
if (job->error() != QKeychain::NoError) { stateConfig->sync();
qWarning(ASTRA_LOG) << "Error when writing" << job->errorString(); } else {
} auto job = new QKeychain::WritePasswordJob(QStringLiteral("Astra"), this);
}); job->setTextData(value);
#ifdef FLATPAK
job->setKey(QStringLiteral("flatpak-") + m_key + QStringLiteral("-") + key);
#else
job->setKey(m_key + QStringLiteral("-") + key);
#endif
job->setInsecureFallback(m_launcher.isSteamDeck()); // The Steam Deck does not have secrets provider in Game Mode
job->start();
connect(job, &QKeychain::WritePasswordJob::finished, this, [job] {
if (job->error() != QKeychain::NoError) {
qWarning(ASTRA_LOG) << "Error when writing" << job->errorString();
}
});
}
} }
QCoro::Task<QString> Account::getKeychainValue(const QString &key) QCoro::Task<QString> Account::getKeychainValue(const QString &key)
{ {
auto job = new QKeychain::ReadPasswordJob(QStringLiteral("Astra"), this); if (m_launcher.isSteamDeck()) {
co_return KSharedConfig::openStateConfig()->group(QStringLiteral("Passwords")).readEntry(m_key + QStringLiteral("-") + key);
} else {
auto job = new QKeychain::ReadPasswordJob(QStringLiteral("Astra"), this);
#ifdef FLATPAK #ifdef FLATPAK
job->setKey(QStringLiteral("flatpak-") + m_key + QStringLiteral("-") + key); job->setKey(QStringLiteral("flatpak-") + m_key + QStringLiteral("-") + key);
#else #else
job->setKey(m_key + QStringLiteral("-") + key); job->setKey(m_key + QStringLiteral("-") + key);
#endif #endif
job->setInsecureFallback(m_launcher.isSteamDeck()); job->start();
job->start();
co_await qCoro(job, &QKeychain::ReadPasswordJob::finished); co_await qCoro(job, &QKeychain::ReadPasswordJob::finished);
if (job->error() != QKeychain::NoError) { if (job->error() != QKeychain::NoError) {
qWarning(ASTRA_LOG) << "Error when reading" << key << job->errorString(); qWarning(ASTRA_LOG) << "Error when reading" << key << job->errorString();
}
co_return job->textData();
} }
co_return job->textData();
} }
void Account::updateConfig() void Account::updateConfig()