#ifndef JID_DB_H #define JID_DB_H #include "direction.h" #include #include #include #include #include #include #include #include #include #include #include class JidDb : public QObject { Q_OBJECT public: struct Message { Direction direction; QDateTime dt; QString contact, body; }; struct Conversation { Conversation(const QString &to, const QString &last_msg, const QDateTime &dt) : to(to), last_msg(last_msg), dt(dt) {} QString to, last_msg; QDateTime dt; }; struct Trust { QString security_policy; }; struct Keys { Keys() {} Keys(const QString &owner, const QString &trust_level, const QList &keys) : owner(owner), trust_level(trust_level), keys(keys) {} QString owner, trust_level; QList keys; }; struct OmemoDevice { QString jid; QHash devices; }; JidDb(const QString &jid); QStringList roster() const; const QString &jid; public Q_SLOTS: QList conversations() const; QList messages(const QString &jid, int tail = -1) const; QList keys(const QString &encryption) const; QString securityPolicy(const QString &encryption) const; QList omemoDevices() const; std::optional omemoOwnDevice() const; QHash signedPreKeyPairs() const; QHash preKeyPairs() const; QByteArray ownKeyId(const QString &encryption) const; int addToRoster(const QString &jid); int addToRoster(const QStringList &roster); int store(const Message &msg) const; int store(const QString &encryption, const QString &securityPolicy) const; int store(const QString &encryption, const Keys &keys) const; int store(const QString &jid, uint32_t id, const QXmppOmemoStorage::Device &d) const; int store(uint32_t id, const QXmppOmemoStorage::SignedPreKeyPair &spk) const; int store(const QHash &pairs) const; int store(const QXmppOmemoStorage::OwnDevice &own) const; int store(const QString &encryption, const QByteArray &ownId) const; void removeKeys(const QString &encryption) const; void removeOmemoDevice(const QString &jid, uint32_t id) const; void removeOmemoDevices(const QString &jid) const; void removeOmemo() const; void removeSignedPreKeyPair(uint32_t id) const; void removePreKeyPair(uint32_t id) const; Q_SIGNALS: void addedToRoster(QString jid); private: QSqlDatabase db; int ensureSecurityPolicyTable(const QString &encryption, QString &table) const; int ensureContactTable(const QString &jid) const; int ensureKeysTable(const QString &encryption, QString &table) const; int ensureOmemoDeviceTable() const; int ensureOmemoSignedPreKeyTable() const; int ensureOmemoPreKeyTable() const; int ensureOmemoOwnDeviceTable() const; int ensureOwnIdTable(const QString &encryption, QString &table) const; QStringList tables() const; }; #endif