forked from blue/squawk
Basic roster receiving
This commit is contained in:
parent
d14883ad91
commit
7b30228249
10 changed files with 151 additions and 3 deletions
|
@ -1,4 +1,5 @@
|
|||
#include "account.h"
|
||||
#include <qxmpp/QXmppRosterManager.h>
|
||||
|
||||
using namespace Core;
|
||||
|
||||
|
@ -9,15 +10,19 @@ Account::Account(const QString& p_login, const QString& p_server, const QString&
|
|||
server(p_server),
|
||||
password(p_password),
|
||||
client(),
|
||||
state(Shared::disconnected)
|
||||
state(Shared::disconnected),
|
||||
groups()
|
||||
{
|
||||
QObject::connect(&client, SIGNAL(connected()), this, SLOT(onClientConnected()));
|
||||
QObject::connect(&client, SIGNAL(disconnected()), this, SLOT(onClientDisconnected()));
|
||||
|
||||
|
||||
QXmppRosterManager& rm = client.rosterManager();
|
||||
QObject::connect(&rm, SIGNAL(rosterReceived()), this, SLOT(onRosterReceived()));
|
||||
}
|
||||
|
||||
Account::~Account()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Shared::ConnectionState Core::Account::getState() const
|
||||
|
@ -85,3 +90,31 @@ QString Core::Account::getServer() const
|
|||
{
|
||||
return server;
|
||||
}
|
||||
|
||||
void Core::Account::onRosterReceived()
|
||||
{
|
||||
QXmppRosterManager& rm = client.rosterManager();
|
||||
QStringList bj = rm.getRosterBareJids();
|
||||
for (int i = 0; i < bj.size(); ++i) {
|
||||
const QString& jid = bj[i];
|
||||
QXmppRosterIq::Item re = rm.getRosterEntry(jid);
|
||||
QSet<QString> gr = re.groups();
|
||||
int grCount = 0;
|
||||
for (QSet<QString>::const_iterator itr = gr.begin(), end = gr.end(); itr != end; ++itr) {
|
||||
const QString& groupName = *itr;
|
||||
std::map<QString, int>::iterator gItr = groups.find(groupName);
|
||||
if (gItr == groups.end()) {
|
||||
gItr = groups.insert(std::make_pair(groupName, 0)).first;
|
||||
emit addGroup(groupName);
|
||||
}
|
||||
gItr->second++;
|
||||
emit addContact(jid, re.name(), groupName);
|
||||
grCount++;
|
||||
}
|
||||
|
||||
if (grCount == 0) {
|
||||
emit addContact(jid, re.name(), "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#define CORE_ACCOUNT_H
|
||||
|
||||
#include <QtCore/QObject>
|
||||
#include <map>
|
||||
|
||||
#include <qxmpp/QXmppClient.h>
|
||||
#include "../global.h"
|
||||
|
@ -27,6 +28,9 @@ public:
|
|||
|
||||
signals:
|
||||
void connectionStateChanged(int);
|
||||
void addGroup(const QString& name);
|
||||
void removeGroup(const QString& name);
|
||||
void addContact(const QString& jid, const QString& name, const QString& group);
|
||||
|
||||
private:
|
||||
QString name;
|
||||
|
@ -35,10 +39,12 @@ private:
|
|||
QString password;
|
||||
QXmppClient client;
|
||||
Shared::ConnectionState state;
|
||||
std::map<QString, int> groups;
|
||||
|
||||
private slots:
|
||||
void onClientConnected();
|
||||
void onClientDisconnected();
|
||||
void onRosterReceived();
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -74,6 +74,9 @@ void Core::Squawk::addAccount(const QString& login, const QString& server, const
|
|||
amap.insert(std::make_pair(name, acc));
|
||||
|
||||
connect(acc, SIGNAL(connectionStateChanged(int)), this, SLOT(onAccountConnectionStateChanged(int)));
|
||||
connect(acc, SIGNAL(addContact(const QString&, const QString&, const QString&)), this, SLOT(onAccountAddContact(const QString&, const QString&, const QString&)));
|
||||
connect(acc, SIGNAL(addGroup(const QString&)), this, SLOT(onAccountAddGroup(const QString&)));
|
||||
connect(acc, SIGNAL(removeGroup(const QString&)), this, SLOT(onAccountRemoveGroup(const QString&)));
|
||||
|
||||
QMap<QString, QVariant> map = {
|
||||
{"login", login},
|
||||
|
@ -112,3 +115,20 @@ void Core::Squawk::onAccountConnectionStateChanged(int state)
|
|||
emit accountConnectionStateChanged(acc->getName(), state);
|
||||
}
|
||||
|
||||
void Core::Squawk::onAccountAddContact(const QString& jid, const QString& name, const QString& group)
|
||||
{
|
||||
Account* acc = static_cast<Account*>(sender());
|
||||
emit addContact(acc->getName(), jid, name, group);
|
||||
}
|
||||
|
||||
void Core::Squawk::onAccountAddGroup(const QString& name)
|
||||
{
|
||||
Account* acc = static_cast<Account*>(sender());
|
||||
emit addGroup(acc->getName(), name);
|
||||
}
|
||||
|
||||
void Core::Squawk::onAccountRemoveGroup(const QString& name)
|
||||
{
|
||||
Account* acc = static_cast<Account*>(sender());
|
||||
emit removeGroup(acc->getName(), name);
|
||||
}
|
||||
|
|
|
@ -25,6 +25,9 @@ signals:
|
|||
void quit();
|
||||
void newAccount(const QMap<QString, QVariant>&);
|
||||
void accountConnectionStateChanged(const QString&, int);
|
||||
void addGroup(const QString& account, const QString& name);
|
||||
void removeGroup(const QString& account, const QString& name);
|
||||
void addContact(const QString& account, const QString& jid, const QString& name, const QString& group);
|
||||
|
||||
public slots:
|
||||
void start();
|
||||
|
@ -45,6 +48,9 @@ private:
|
|||
|
||||
private slots:
|
||||
void onAccountConnectionStateChanged(int state);
|
||||
void onAccountAddGroup(const QString& name);
|
||||
void onAccountRemoveGroup(const QString& name);
|
||||
void onAccountAddContact(const QString& jid, const QString& name, const QString& group);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue