xxcc/jiddb.h

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