Refactoring, new messages thread beggining

This commit is contained in:
Blue 2019-04-11 17:58:59 +03:00
parent 5575cff1f5
commit e48444636a
25 changed files with 610 additions and 163 deletions

View file

@ -336,14 +336,7 @@ void Core::Account::setResource(const QString& p_resource)
void Core::Account::onMessageReceived(const QXmppMessage& msg)
{
QString from = msg.from();
QStringList fcomps = from.split("/");
QString fjid = fcomps.front();
QString fresource = fcomps.back();
QString to = msg.to();
QStringList tcomps = to.split("/");
QString tjid = tcomps.front();
QString tresource = tcomps.back();
bool handled = false;
switch (msg.type()) {
case QXmppMessage::Normal:
@ -353,14 +346,16 @@ void Core::Account::onMessageReceived(const QXmppMessage& msg)
QString body(msg.body());
if (body.size() != 0) {
QString id(msg.id());
emit message({
{"body", body},
{"from", fjid},
{"to", tjid},
{"fromResource", fresource},
{"toResource", tresource},
{"id", id}
});
QDateTime time(msg.stamp());
Shared::Message sMsg(Shared::Message::chat);
sMsg.setId(id);
sMsg.setFrom(from);
sMsg.setTo(to);
sMsg.setBody(body);
if (time.isValid()) {
sMsg.setTime(time);
}
emit message(sMsg);
if (msg.isReceiptRequested() && id.size() > 0) {
QXmppMessage receipt(getFullJid(), from, "");
@ -384,8 +379,8 @@ void Core::Account::onMessageReceived(const QXmppMessage& msg)
if (!handled) {
qDebug() << "Message wasn't handled: ";
qDebug() << "- from: " << msg.from();
qDebug() << "- to: " << msg.to();
qDebug() << "- from: " << from;
qDebug() << "- to: " << to;
qDebug() << "- body: " << msg.body();
qDebug() << "- type: " << msg.type();
qDebug() << "- state: " << msg.state();
@ -406,10 +401,10 @@ QString Core::Account::getFullJid() const
return getLogin() + "@" + getServer() + "/" + getResource();
}
void Core::Account::sendMessage(const QMap<QString, QString>& data)
void Core::Account::sendMessage(const Shared::Message& data)
{
if (state == Shared::connected) {
client.sendMessage(data.value("to"), data.value("body"));
client.sendMessage(data.getTo(), data.getBody());
} else {
qDebug() << "An attempt to send message with not connected account " << name << ", skipping";
}

View file

@ -36,7 +36,7 @@ public:
void setResource(const QString& p_resource);
void setAvailability(Shared::Availability avail);
QString getFullJid() const;
void sendMessage(const QMap<QString, QString>& data);
void sendMessage(const Shared::Message& data);
signals:
void connectionStateChanged(int);
@ -49,7 +49,7 @@ signals:
void changeContact(const QString& jid, const QMap<QString, QVariant>& data);
void addPresence(const QString& jid, const QString& name, const QMap<QString, QVariant>& data);
void removePresence(const QString& jid, const QString& name);
void message(const QMap<QString, QString>& data);
void message(const Shared::Message& data);
private:
QString name;

View file

@ -86,7 +86,7 @@ void Core::Squawk::addAccount(const QString& login, const QString& server, const
connect(acc, SIGNAL(addPresence(const QString&, const QString&, const QMap<QString, QVariant>&)),
this, SLOT(onAccountAddPresence(const QString&, const QString&, const QMap<QString, QVariant>&)));
connect(acc, SIGNAL(removePresence(const QString&, const QString&)), this, SLOT(onAccountRemovePresence(const QString&, const QString&)));
connect(acc, SIGNAL(message(const QMap<QString, QString>&)), this, SLOT(onAccountMessage(const QMap<QString, QString>&)));
connect(acc, SIGNAL(message(const Shared::Message&)), this, SLOT(onAccountMessage(const Shared::Message&)));
QMap<QString, QVariant> map = {
{"login", login},
@ -194,13 +194,13 @@ void Core::Squawk::onAccountAvailabilityChanged(int state)
emit accountAvailabilityChanged(acc->getName(), state);
}
void Core::Squawk::onAccountMessage(const QMap<QString, QString>& data)
void Core::Squawk::onAccountMessage(const Shared::Message& data)
{
Account* acc = static_cast<Account*>(sender());
emit accountMessage(acc->getName(), data);
}
void Core::Squawk::sendMessage(const QString& account, const QMap<QString, QString>& data)
void Core::Squawk::sendMessage(const QString& account, const Shared::Message& data)
{
AccountsMap::const_iterator itr = amap.find(account);
if (itr == amap.end()) {

View file

@ -35,7 +35,7 @@ signals:
void addPresence(const QString& account, const QString& jid, const QString& name, const QMap<QString, QVariant>& data);
void removePresence(const QString& account, const QString& jid, const QString& name);
void stateChanged(int state);
void accountMessage(const QString& account, const QMap<QString, QString>& data);
void accountMessage(const QString& account, const Shared::Message& data);
public slots:
void start();
@ -44,7 +44,7 @@ public slots:
void connectAccount(const QString& account);
void disconnectAccount(const QString& account);
void changeState(int state);
void sendMessage(const QString& account, const QMap<QString, QString>& data);
void sendMessage(const QString& account, const Shared::Message& data);
private:
typedef std::deque<Account*> Accounts;
@ -68,7 +68,7 @@ private slots:
void onAccountChangeContact(const QString& jid, const QMap<QString, QVariant>& data);
void onAccountAddPresence(const QString& jid, const QString& name, const QMap<QString, QVariant>& data);
void onAccountRemovePresence(const QString& jid, const QString& name);
void onAccountMessage(const QMap<QString, QString>& data);
void onAccountMessage(const Shared::Message& data);
};
}