115 lines
3.3 KiB
C++
115 lines
3.3 KiB
C++
#ifndef JID_DB_H
|
|
#define JID_DB_H
|
|
|
|
#include "direction.h"
|
|
#include <QByteArray>
|
|
#include <QDateTime>
|
|
#include <QList>
|
|
#include <QObject>
|
|
#include <QPair>
|
|
#include <QString>
|
|
#include <QStringList>
|
|
#include <QSqlDatabase>
|
|
#include <QXmppOmemoStorage.h>
|
|
#include <QVariant>
|
|
#include <optional>
|
|
|
|
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<QByteArray> &keys) :
|
|
owner(owner),
|
|
trust_level(trust_level),
|
|
keys(keys)
|
|
{}
|
|
QString owner, trust_level;
|
|
QList<QByteArray> keys;
|
|
};
|
|
|
|
struct OmemoDevice
|
|
{
|
|
QString jid;
|
|
QHash<uint32_t, QXmppOmemoStorage::Device> devices;
|
|
};
|
|
|
|
JidDb(const QString &jid);
|
|
QStringList roster() const;
|
|
const QString &jid;
|
|
|
|
public Q_SLOTS:
|
|
QList<Conversation> conversations() const;
|
|
QList<Message> messages(const QString &jid,
|
|
int tail = -1) const;
|
|
QList<Keys> keys(const QString &encryption) const;
|
|
QString securityPolicy(const QString &encryption) const;
|
|
QList<OmemoDevice> omemoDevices() const;
|
|
std::optional<QXmppOmemoStorage::OwnDevice> omemoOwnDevice() const;
|
|
QHash<uint32_t, QXmppOmemoStorage::SignedPreKeyPair> signedPreKeyPairs()
|
|
const;
|
|
QHash<uint32_t, QByteArray> 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<uint32_t, QByteArray> &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
|