diff options
| author | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2023-08-19 11:23:51 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2023-08-30 02:46:41 +0200 |
| commit | 8cbcb1f98f5982f56c9b3ac5b8e089b3b18cf305 (patch) | |
| tree | b1b8011d8bf978476037ca296a69c979c810b038 | |
| parent | 6ecc6b6f0272a47d41ce5d619eaa779a29fcf9df (diff) | |
Replace QList with QHash
| -rw-r--r-- | contacts.cpp | 6 | ||||
| -rw-r--r-- | contacts.h | 6 | ||||
| -rw-r--r-- | xxcc.cpp | 57 | ||||
| -rw-r--r-- | xxcc.h | 3 |
4 files changed, 35 insertions, 37 deletions
diff --git a/contacts.cpp b/contacts.cpp index 1729d2c..3d3ff77 100644 --- a/contacts.cpp +++ b/contacts.cpp @@ -3,9 +3,9 @@ #include <QListWidgetItem> #include <QScroller> -Contacts::Contacts(QList<JidDb *> &databases, QWidget *const parent) : - QDialog(parent), - databases(databases) +Contacts::Contacts(const QHash<QString, JidDb *> &databases, + QWidget *const parent) : + QDialog(parent) { ui.setupUi(this); QScroller::grabGesture(ui.contacts_list, QScroller::TouchGesture); @@ -4,7 +4,7 @@ #include "ui_contacts.h" #include "jiddb.h" #include <QDialog> -#include <QList> +#include <QHash> #include <QString> #include <QWidget> @@ -13,12 +13,12 @@ class Contacts : public QDialog Q_OBJECT public: - Contacts(QList<JidDb *> &databases, QWidget *parent = nullptr); + Contacts(const QHash<QString, JidDb *> &databases, + QWidget *parent = nullptr); void add(const QString &own, const QString &other); private: Ui_contacts ui; - QList<JidDb *> &databases; enum Role {From = Qt::UserRole, To}; Q_SIGNALS: @@ -74,17 +74,15 @@ xxcc::xxcc(QWidget *const parent) : break; } - for (const auto *const db : databases) - if (db->jid == selected->jidBare()) - { - static const auto n_messages = 20; - 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); + if (databases.contains(selected->jidBare())) + { + const auto db = databases[selected->jidBare()]; + static const auto n_messages = 20; + const auto messages = db->getMessages(conv->to, n_messages); - break; - } + for (auto it = messages.rbegin(); it != messages.rend(); it++) + new Message(it->body, it->dt, it->direction, ui.messages); + } ui.sw->setCurrentIndex(Tab::Chat); ui.jid->setText(conv->to); @@ -125,7 +123,7 @@ void xxcc::connectAccounts(const QList<Credentials::Pair> &pairs) void xxcc::setupDatabases(const QList<Credentials::Pair> &pairs) { for (const auto &p : pairs) - databases.append(new JidDb(p.first)); + databases[p.first] = new JidDb(p.first); } void xxcc::startChat(const QString from, const QString to) @@ -196,12 +194,12 @@ void xxcc::addAccount(Client *const c) roster->connect(roster, &QXmppRosterManager::rosterReceived, c, [this, c, roster] { - for (const auto db : databases) - if (db->jid == c->jidBare()) - { - db->addToRoster(roster->getRosterBareJids()); - break; - } + if (databases.contains(c->jidBare())) + { + const auto db = databases[c->jidBare()]; + + db->addToRoster(roster->getRosterBareJids()); + } }); else throw std::runtime_error("Expected non-null QXmppRosterManager"); @@ -241,23 +239,22 @@ void xxcc::storeMessage(const QXmppMessage &msg, const Direction dir) const break; } - for (const auto db : databases) - if (db->jid == jid) - { - JidDb::Message m; - - m.body = msg.body(); - m.dt = msg.stamp(); - m.direction = dir; - m.contact = contact; - db->storeMessage(m); - break; - } + if (databases.contains(jid)) + { + 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); + } } void xxcc::retrieveConversations() { - for (const auto *const db : databases) + 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); @@ -6,6 +6,7 @@ #include "credentials.h" #include "jiddb.h" #include <QDateTime> +#include <QHash> #include <QList> #include <QWidget> #include <QSqlDatabase> @@ -24,7 +25,7 @@ private: enum Tab {Conversations, Chat}; Ui_main ui; QList<Client *> clients; - QList<JidDb *> databases; + QHash<QString, JidDb *> databases; Credentials creds; Client *selected; void setupDatabases(const QList<Credentials::Pair> &pairs); |
