aboutsummaryrefslogtreecommitdiff
path: root/lib/connection.cpp
diff options
context:
space:
mode:
authorTobias Fella <fella@posteo.de>2021-12-10 16:10:10 +0100
committerTobias Fella <fella@posteo.de>2021-12-10 16:10:31 +0100
commitb4cc38fc7c2c63d8122106a2451aec2c60176a4b (patch)
treea5c18272ce47b7aa08f96e4f8bdeebb7b8a7ea54 /lib/connection.cpp
parent6cec450f1d749936bd51a1471ac0ed74f633ef66 (diff)
downloadlibquotient-b4cc38fc7c2c63d8122106a2451aec2c60176a4b.tar.gz
libquotient-b4cc38fc7c2c63d8122106a2451aec2c60176a4b.zip
Use individual databases for each connection
Diffstat (limited to 'lib/connection.cpp')
-rw-r--r--lib/connection.cpp21
1 files changed, 15 insertions, 6 deletions
diff --git a/lib/connection.cpp b/lib/connection.cpp
index d1a29a7d..8b9f9688 100644
--- a/lib/connection.cpp
+++ b/lib/connection.cpp
@@ -116,6 +116,7 @@ public:
QueryKeysJob *currentQueryKeysJob = nullptr;
bool encryptionUpdateRequired = false;
PicklingMode picklingMode = Unencrypted {};
+ Database *database = nullptr;
#endif
GetCapabilitiesJob* capabilitiesJob = nullptr;
@@ -268,11 +269,9 @@ Connection::Connection(const QUrl& server, QObject* parent)
: QObject(parent), d(new Private(std::make_unique<ConnectionData>(server)))
{
#ifdef Quotient_E2EE_ENABLED
- d->encryptionManager = new EncryptionManager(this);
connect(qApp, &QCoreApplication::aboutToQuit, this, [this](){
saveOlmAccount();
});
- Database::instance();
#endif
d->q = this; // All d initialization should occur before this line
}
@@ -446,7 +445,8 @@ void Connection::Private::loginToServer(LoginArgTs&&... loginArgs)
#ifndef Quotient_E2EE_ENABLED
qCWarning(E2EE) << "End-to-end encryption (E2EE) support is turned off.";
#else // Quotient_E2EE_ENABLED
- Database::instance().clear(loginJob->userId());
+ database = new Database(loginJob->userId(), q);
+ database->clear();
#endif // Quotient_E2EE_ENABLED
});
connect(loginJob, &BaseJob::failure, q, [this, loginJob] {
@@ -502,9 +502,13 @@ void Connection::Private::completeSetup(const QString& mxId)
olmAccount = std::make_unique<QOlmAccount>(data->userId(), data->deviceId(), q);
connect(olmAccount.get(), &QOlmAccount::needsSave, q, &Connection::saveOlmAccount);
+ if (!database) {
+ database = new Database(data->userId(), q);
+ }
+
encryptionManager = new EncryptionManager(q);
- if (Database::instance().accountPickle(data->userId()).isEmpty()) {
+ if (database->accountPickle().isEmpty()) {
// create new account and save unpickle data
olmAccount->createNewAccount();
auto job = q->callApi<UploadKeysJob>(olmAccount->deviceKeys());
@@ -513,7 +517,7 @@ void Connection::Private::completeSetup(const QString& mxId)
});
} else {
// account already existing
- auto pickle = Database::instance().accountPickle(data->userId());
+ auto pickle = database->accountPickle();
olmAccount->unpickle(pickle, picklingMode);
}
#endif // Quotient_E2EE_ENABLED
@@ -2040,7 +2044,7 @@ void Connection::saveOlmAccount()
qCDebug(E2EE) << "Saving olm account";
#ifdef Quotient_E2EE_ENABLED
auto pickle = d->olmAccount->pickle(d->picklingMode);
- Database::instance().setAccountPickle(userId(), std::get<QByteArray>(pickle));
+ d->database->setAccountPickle(std::get<QByteArray>(pickle));
#endif
}
@@ -2067,4 +2071,9 @@ QJsonObject Connection::decryptNotification(const QJsonObject &notification)
}
return decrypted->fullJson();
}
+
+Database* Connection::database()
+{
+ return d->database;
+}
#endif