aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavi.dcr@tutanota.com>2023-08-19 11:23:51 +0200
committerXavier Del Campo Romero <xavi.dcr@tutanota.com>2023-08-30 02:46:41 +0200
commit8cbcb1f98f5982f56c9b3ac5b8e089b3b18cf305 (patch)
treeb1b8011d8bf978476037ca296a69c979c810b038
parent6ecc6b6f0272a47d41ce5d619eaa779a29fcf9df (diff)
Replace QList with QHash
-rw-r--r--contacts.cpp6
-rw-r--r--contacts.h6
-rw-r--r--xxcc.cpp57
-rw-r--r--xxcc.h3
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);
diff --git a/contacts.h b/contacts.h
index 410f07e..11be2f9 100644
--- a/contacts.h
+++ b/contacts.h
@@ -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:
diff --git a/xxcc.cpp b/xxcc.cpp
index f0ed464..4581137 100644
--- a/xxcc.cpp
+++ b/xxcc.cpp
@@ -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);
diff --git a/xxcc.h b/xxcc.h
index a3eda5d..9825070 100644
--- a/xxcc.h
+++ b/xxcc.h
@@ -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);