diff options
| author | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2023-08-21 00:37:36 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2023-08-30 02:46:41 +0200 |
| commit | 78d9bd40849a39db1fbdbfc87b2c45e9d3e73d06 (patch) | |
| tree | bb3898abbdaf5d11c62c5deee8debe582ace8c60 | |
| parent | 8cbcb1f98f5982f56c9b3ac5b8e089b3b18cf305 (diff) | |
| download | xxcc-78d9bd40849a39db1fbdbfc87b2c45e9d3e73d06.tar.gz | |
Insert JidDb into Client
| -rw-r--r-- | client.cpp | 11 | ||||
| -rw-r--r-- | client.h | 4 | ||||
| -rw-r--r-- | contacts.cpp | 8 | ||||
| -rw-r--r-- | contacts.h | 4 | ||||
| -rw-r--r-- | xxcc.cpp | 64 | ||||
| -rw-r--r-- | xxcc.h | 3 |
6 files changed, 51 insertions, 43 deletions
@@ -3,6 +3,7 @@ Client::Client(const QString &jid, QObject *const parent) : QXmppClient(parent), jid(jid), + db(jid), trust_db(jid), trust(&trust_db), omemo_db(jid), @@ -18,3 +19,13 @@ QString Client::jidBare() { return configuration().jidBare(); } + +const JidDb &Client::database() const +{ + return db; +} + +JidDb &Client::database() +{ + return db; +} @@ -2,6 +2,7 @@ #define CLIENT_H #include "omemo_db.h" +#include "jiddb.h" #include "trust_db.h" #include <QObject> #include <QString> @@ -17,9 +18,12 @@ class Client : public QXmppClient public: Client(const QString &jid, QObject *parent = nullptr); QString jidBare(); + const JidDb &database() const; + JidDb &database(); private: const QString jid; + JidDb db; TrustDb trust_db; QXmppTrustManager trust; QXmppPubSubManager pubsub; diff --git a/contacts.cpp b/contacts.cpp index 3d3ff77..4336ac3 100644 --- a/contacts.cpp +++ b/contacts.cpp @@ -3,16 +3,16 @@ #include <QListWidgetItem> #include <QScroller> -Contacts::Contacts(const QHash<QString, JidDb *> &databases, +Contacts::Contacts(const QList<Client *> &clients, QWidget *const parent) : QDialog(parent) { ui.setupUi(this); QScroller::grabGesture(ui.contacts_list, QScroller::TouchGesture); - for (const auto db : databases) - for (const auto &contact : db->roster()) - add(db->jid, contact); + for (const auto c : clients) + for (const auto &contact : c->database().roster()) + add(c->jidBare(), contact); connect(ui.contacts_list, &QListWidget::itemActivated, this, [this] @@ -2,7 +2,7 @@ #define CONTACTS_H #include "ui_contacts.h" -#include "jiddb.h" +#include "client.h" #include <QDialog> #include <QHash> #include <QString> @@ -13,7 +13,7 @@ class Contacts : public QDialog Q_OBJECT public: - Contacts(const QHash<QString, JidDb *> &databases, + Contacts(const QList<Client *> &clients, QWidget *parent = nullptr); void add(const QString &own, const QString &other); @@ -23,7 +23,6 @@ xxcc::xxcc(QWidget *const parent) : ui.setupUi(this); QScroller::grabGesture(ui.conversations_list, QScroller::TouchGesture); QScroller::grabGesture(ui.messages, QScroller::TouchGesture); - setupDatabases(pairs); connectAccounts(pairs); retrieveConversations(); connect(ui.accounts, &QPushButton::released, this, @@ -39,16 +38,20 @@ xxcc::xxcc(QWidget *const parent) : connect(ui.contacts, &QPushButton::released, this, [this] { - Contacts c(databases, this); + Contacts c(clients, this); connect(&c, &Contacts::startChat, this, &xxcc::startChat); - for (const auto db : databases) + for (const auto cl : clients) + { + const auto db = &cl->database(); + c.connect(db, &JidDb::addedToRoster, &c, [&c, db] (const QString jid) { c.add(db->jid, jid); }); + } c.exec(); }); @@ -74,11 +77,11 @@ xxcc::xxcc(QWidget *const parent) : break; } - if (databases.contains(selected->jidBare())) + if (selected) { - const auto db = databases[selected->jidBare()]; + const auto &db = selected->database(); static const auto n_messages = 20; - const auto messages = db->getMessages(conv->to, n_messages); + const auto messages = db.getMessages(conv->to, n_messages); for (auto it = messages.rbegin(); it != messages.rend(); it++) new Message(it->body, it->dt, it->direction, ui.messages); @@ -97,9 +100,6 @@ xxcc::~xxcc() { for (const auto c : clients) delete c; - - for (const auto db : databases) - delete db; } void xxcc::connectAccounts(const QList<Credentials::Pair> &pairs) @@ -120,12 +120,6 @@ void xxcc::connectAccounts(const QList<Credentials::Pair> &pairs) } } -void xxcc::setupDatabases(const QList<Credentials::Pair> &pairs) -{ - for (const auto &p : pairs) - databases[p.first] = new JidDb(p.first); -} - void xxcc::startChat(const QString from, const QString to) { bool found = false; @@ -194,12 +188,7 @@ void xxcc::addAccount(Client *const c) roster->connect(roster, &QXmppRosterManager::rosterReceived, c, [this, c, roster] { - if (databases.contains(c->jidBare())) - { - const auto db = databases[c->jidBare()]; - - db->addToRoster(roster->getRosterBareJids()); - } + c->database().addToRoster(roster->getRosterBareJids()); }); else throw std::runtime_error("Expected non-null QXmppRosterManager"); @@ -239,23 +228,30 @@ void xxcc::storeMessage(const QXmppMessage &msg, const Direction dir) const break; } - if (databases.contains(jid)) + for (const auto c : clients) { - const auto db = databases[jid]; - JidDb::Message m; - - m.body = msg.body(); - m.dt = msg.stamp(); - m.direction = dir; - m.contact = contact; - db->storeMessage(m); + if (c->jidBare() == jid) + { + const auto &db = c->database(); + JidDb::Message m; + + m.body = msg.body(); + m.dt = msg.stamp(); + m.direction = dir; + m.contact = contact; + db.storeMessage(m); + } } } void xxcc::retrieveConversations() { - for (const auto db : databases) - for (const auto &conv : db->getConversations()) - new Conversation(db->jid, conv.to, - ui.conversations_list, conv.last_msg, conv.dt); + for (const auto c : clients) + { + const auto &db = c->database(); + + for (const auto &conv : db.getConversations()) + new Conversation(db.jid, conv.to, + ui.conversations_list, conv.last_msg, conv.dt); + } } @@ -6,7 +6,6 @@ #include "credentials.h" #include "jiddb.h" #include <QDateTime> -#include <QHash> #include <QList> #include <QWidget> #include <QSqlDatabase> @@ -25,10 +24,8 @@ private: enum Tab {Conversations, Chat}; Ui_main ui; QList<Client *> clients; - QHash<QString, JidDb *> databases; Credentials creds; Client *selected; - void setupDatabases(const QList<Credentials::Pair> &pairs); void connectAccounts(const QList<Credentials::Pair> &pairs); void storeMessage(const QXmppMessage &msg, Direction dir) const; void retrieveConversations(); |
