summaryrefslogtreecommitdiff
path: root/omemo_db.cpp
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavi92@disroot.org>2026-02-03 15:59:29 +0100
committerXavier Del Campo Romero <xavi92@disroot.org>2026-02-03 16:26:52 +0100
commitfdb64c59865e4db76addfb8222f6421443e25240 (patch)
tree0de2bad9f758c69b7fb9ba2670653c8515a3a70d /omemo_db.cpp
parent207176de48d5e44c8d3e6318b526db5d772dd008 (diff)
Import files from xxcc
Diffstat (limited to 'omemo_db.cpp')
-rw-r--r--omemo_db.cpp93
1 files changed, 93 insertions, 0 deletions
diff --git a/omemo_db.cpp b/omemo_db.cpp
new file mode 100644
index 0000000..c1949c0
--- /dev/null
+++ b/omemo_db.cpp
@@ -0,0 +1,93 @@
+#include "omemo_db.h"
+#include <QXmppConfiguration.h>
+#include <QXmppFutureUtils_p.h>
+#include <QString>
+#include <iostream>
+#include <optional>
+
+static const QString service = "xxcc", key_namespace = "omemo";
+
+OmemoDb::OmemoDb(const JidDb &db) :
+ db(db)
+{
+}
+
+QXmppTask<QXmppOmemoStorage::OmemoData> OmemoDb::allData()
+{
+ QXmppOmemoStorage::OmemoData ret;
+ QHash<QString, QHash<uint32_t, Device>> devices;
+
+ for (const auto &d : db.omemoDevices())
+ ret.devices.insert(d.jid, d.devices);
+
+ ret.ownDevice = db.omemoOwnDevice();
+ ret.preKeyPairs = db.preKeyPairs();
+ ret.signedPreKeyPairs = db.signedPreKeyPairs();
+ return QXmpp::Private::makeReadyTask(QXmppOmemoStorage::OmemoData(ret));
+}
+
+QXmppTask<void> OmemoDb::setOwnDevice(const std::optional<OwnDevice> &device)
+{
+ if (device.has_value() && db.store(device.value()))
+ std::cerr << "db.store failed" << std::endl;
+
+ return QXmpp::Private::makeReadyTask();
+}
+
+QXmppTask<void> OmemoDb::addSignedPreKeyPair(const uint32_t keyId,
+ const SignedPreKeyPair &keyPair)
+{
+ if (db.store(keyId, keyPair))
+ std::cerr << "db.store failed" << std::endl;
+
+ return QXmpp::Private::makeReadyTask();
+}
+
+QXmppTask<void> OmemoDb::removeSignedPreKeyPair(uint32_t keyId)
+{
+ db.removeSignedPreKeyPair(keyId);
+ return QXmpp::Private::makeReadyTask();
+}
+
+QXmppTask<void> OmemoDb::addPreKeyPairs(
+ const QHash<uint32_t, QByteArray> &keyPairs)
+{
+ if (db.store(keyPairs))
+ std::cerr << "db.store failed" << std::endl;
+
+ return QXmpp::Private::makeReadyTask();
+}
+
+QXmppTask<void> OmemoDb::removePreKeyPair(const uint32_t keyId)
+{
+ db.removePreKeyPair(keyId);
+ return QXmpp::Private::makeReadyTask();
+}
+
+QXmppTask<void> OmemoDb::addDevice(const QString &jid,
+ const uint32_t deviceId, const Device &d)
+{
+ if (db.store(jid, deviceId, d))
+ std::cerr << "db.store failed" << std::endl;
+
+ return QXmpp::Private::makeReadyTask();
+}
+
+QXmppTask<void> OmemoDb::removeDevice(const QString &jid,
+ const uint32_t deviceId)
+{
+ db.removeOmemoDevice(jid, deviceId);
+ return QXmpp::Private::makeReadyTask();
+}
+
+QXmppTask<void> OmemoDb::removeDevices(const QString &jid)
+{
+ db.removeOmemoDevices(jid);
+ return QXmpp::Private::makeReadyTask();
+}
+
+QXmppTask<void> OmemoDb::resetAll()
+{
+ db.removeOmemo();
+ return QXmpp::Private::makeReadyTask();
+}