Skip to content
Permalink
Browse files

Port away from deprecated client extension getters of the QXmppClient

This replaces the deprecated getters in the examples and in the
documentation.
  • Loading branch information...
lnjX committed Oct 21, 2019
1 parent 91157d2 commit dfec49b06fc305cc55631e5473b9ba19c729cd03
@@ -29,30 +29,22 @@
#include "example_2_rosterHandling.h"

xmppClient::xmppClient(QObject *parent)
: QXmppClient(parent)
: QXmppClient(parent),
m_rosterManager(findExtension<QXmppRosterManager>())
{
bool check;
Q_UNUSED(check);
connect(this, &QXmppClient::connected,
this, &xmppClient::clientConnected);

check = connect(this, SIGNAL(connected()),
SLOT(clientConnected()));
Q_ASSERT(check);
connect(m_rosterManager, &QXmppRosterManager::rosterReceived,
this, &xmppClient::rosterReceived);

check = connect(&this->rosterManager(), SIGNAL(rosterReceived()),
SLOT(rosterReceived()));
Q_ASSERT(check);

/// Then QXmppRoster::presenceChanged() is emitted whenever presence of someone
/// in roster changes
check = connect(&this->rosterManager(), SIGNAL(presenceChanged(QString,QString)),
SLOT(presenceChanged(QString,QString)));
Q_ASSERT(check);
/// Then QXmppRoster::presenceChanged() is emitted whenever presence of
/// someone in roster changes
connect(m_rosterManager, &QXmppRosterManager::presenceChanged,
this, &xmppClient::presenceChanged);
}

xmppClient::~xmppClient()
{

}
xmppClient::~xmppClient() = default;

void xmppClient::clientConnected()
{
@@ -62,8 +54,9 @@ void xmppClient::clientConnected()
void xmppClient::rosterReceived()
{
qDebug("example_2_rosterHandling:: Roster received");
foreach (const QString &bareJid, rosterManager().getRosterBareJids()) {
QString name = rosterManager().getRosterEntry(bareJid).name();
const QStringList jids = m_rosterManager->getRosterBareJids();
for (const QString &bareJid : jids) {
QString name = m_rosterManager->getRosterEntry(bareJid).name();
if(name.isEmpty())
name = "-";
qDebug("example_2_rosterHandling:: Roster received: %s [%s]", qPrintable(bareJid), qPrintable(name));
@@ -27,6 +27,8 @@

#include "QXmppClient.h"

class QXmppRosterManager;

class xmppClient : public QXmppClient
{
Q_OBJECT
@@ -39,6 +41,9 @@ public slots:
void clientConnected();
void rosterReceived();
void presenceChanged(const QString& bareJid, const QString& resource);

private:
QXmppRosterManager *m_rosterManager;
};

#endif // XMPPCLIENT_H
@@ -21,10 +21,9 @@
*
*/

#include <iostream>

#include <QBuffer>
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QFile>
#include <QImage>
@@ -39,53 +38,43 @@
#include "example_9_vCard.h"

xmppClient::xmppClient(QObject *parent)
: QXmppClient(parent)
: QXmppClient(parent),
m_rosterManager(findExtension<QXmppRosterManager>()),
m_vCardManager(findExtension<QXmppVCardManager>())
{
bool check;
Q_UNUSED(check);

check = connect(this, SIGNAL(connected()),
SLOT(clientConnected()));
Q_ASSERT(check);
connect(this, &QXmppClient::connected, this, &xmppClient::clientConnected);

check = connect(&this->rosterManager(), SIGNAL(rosterReceived()),
SLOT(rosterReceived()));
Q_ASSERT(check);
connect(m_rosterManager, &QXmppRosterManager::rosterReceived,
this, &xmppClient::rosterReceived);
}

xmppClient::~xmppClient()
{

}
xmppClient::~xmppClient() = default;

void xmppClient::clientConnected()
{
std::cout<<"example_9_vCard:: CONNECTED"<<std::endl;
qDebug() << "example_9_vCard: CONNECTED";
}

void xmppClient::rosterReceived()
{
std::cout<<"example_9_vCard:: Roster Received"<<std::endl;
bool check = connect(&this->vCardManager(), SIGNAL(vCardReceived(QXmppVCardIq)),
SLOT(vCardReceived(QXmppVCardIq)));
Q_ASSERT(check);
Q_UNUSED(check);

QStringList list = rosterManager().getRosterBareJids();
for(int i = 0; i < list.size(); ++i)
{
// request vCard of all the bareJids in roster
vCardManager().requestVCard(list.at(i));
}
qDebug() << "example_9_vCard: Roster Received";

connect(m_vCardManager, &QXmppVCardManager::vCardReceived,
this, &xmppClient::vCardReceived);

// request vCard of all the bareJids in roster
const QStringList jids = m_rosterManager->getRosterBareJids();
for (const auto &jid : jids)
m_vCardManager->requestVCard(jid);
}

void xmppClient::vCardReceived(const QXmppVCardIq& vCard)
{
QString bareJid = vCard.from();
std::cout<<"example_9_vCard:: vCard Received:: " << qPrintable(bareJid) <<std::endl;
qDebug() << "example_9_vCard: vCard Received:" << bareJid;

QString out("FullName: %1\nNickName: %2\n");
std::cout<<qPrintable(out.arg(vCard.fullName()).arg(vCard.nickName())) <<std::endl;
qDebug() << "FullName:" << vCard.fullName();
qDebug() << "Nickname:" << vCard.nickName();

QString vCardsDir("vCards/");

@@ -94,12 +83,11 @@ void xmppClient::vCardReceived(const QXmppVCardIq& vCard)
dir.mkdir(vCardsDir);

QFile file("vCards/" + bareJid + ".xml");
if(file.open(QIODevice::ReadWrite))
{
if (file.open(QIODevice::ReadWrite)) {
QXmlStreamWriter stream(&file);
vCard.toXml(&stream);
file.close();
std::cout<<"example_9_vCard:: vCard written to the file:: " << qPrintable(bareJid) <<std::endl;
qDebug() << "example_9_vCard: vCard written to the file:" << bareJid;
}

QString name("vCards/" + bareJid + ".png");
@@ -109,10 +97,8 @@ void xmppClient::vCardReceived(const QXmppVCardIq& vCard)
buffer.open(QIODevice::ReadOnly);
QImageReader imageReader(&buffer);
QImage image = imageReader.read();
if(image.save(name))
{
std::cout<<"example_9_vCard:: Avatar saved to file" <<std::endl<<std::endl;
}
if (image.save(name))
qDebug() << "example_9_vCard: Avatar saved to file";
}

int main(int argc, char *argv[])
@@ -27,7 +27,9 @@

#include "QXmppClient.h"

class QXmppRosterManager;
class QXmppVCardIq;
class QXmppVCardManager;

class xmppClient : public QXmppClient
{
@@ -41,6 +43,10 @@ public slots:
void clientConnected();
void rosterReceived();
void vCardReceived(const QXmppVCardIq&);

private:
QXmppRosterManager *m_rosterManager;
QXmppVCardManager *m_vCardManager;
};

#endif // XMPPCLIENT_H
@@ -361,22 +361,31 @@ QXmppRosterManager& QXmppClient::rosterManager()
/// is offline or not present in the roster, it will still send a message to
/// the bareJid.
///
/// \note Usage of this method is discouraged because most modern clients use
/// carbon messages (XEP-0280: Message Carbons) and MAM (XEP-0313: Message
/// Archive Management) and so could possibly receive messages multiple times
/// or not receive them at all.
/// \c QXmppClient::sendPacket() should be used instead with a \c QXmppMessage.
///
/// \param bareJid bareJid of the receiving entity
/// \param message Message string to be sent.

void QXmppClient::sendMessage(const QString& bareJid, const QString& message)
{
QStringList resources = rosterManager().getResources(bareJid);
if(!resources.isEmpty())
{
for(int i = 0; i < resources.size(); ++i)
{
sendPacket(QXmppMessage("", bareJid + "/" + resources.at(i), message));
QXmppRosterManager *rosterManager = findExtension<QXmppRosterManager>();

const QStringList resources = rosterManager
? rosterManager->getResources(bareJid)
: QStringList();

if (!resources.isEmpty()) {
for (const auto &resource : resources) {
sendPacket(
QXmppMessage({}, bareJid + QStringLiteral("/") + resource, message)
);
}
}
else
{
sendPacket(QXmppMessage("", bareJid, message));
} else {
sendPacket(QXmppMessage({}, bareJid, message));
}
}

@@ -64,9 +64,9 @@ class QXmppVersionManager;
/// QXmppConfiguration::setAutoReconnectionEnabled().
///
/// Not all the managers or extensions have been enabled by default. One can
/// enable/disable the managers using the functions addExtension() and
/// removeExtension(). findExtension() can be used to find reference/pointer to
/// particular instansiated and enabled manager.
/// enable/disable the managers using the functions \c addExtension() and
/// \c removeExtension(). \c findExtension() can be used to find reference/
/// pointer to particular instansiated and enabled manager.
///
/// List of managers enabled by default:
/// - QXmppRosterManager
@@ -168,8 +168,8 @@ class QXMPP_EXPORT QXmppClient : public QXmppLoggable

signals:

/// This signal is emitted when the client connects successfully to the XMPP
/// server i.e. when a successful XMPP connection is established.
/// This signal is emitted when the client connects successfully to the
/// XMPP server i.e. when a successful XMPP connection is established.
/// XMPP Connection involves following sequential steps:
/// - TCP socket connection
/// - Client sends start stream
@@ -182,15 +182,15 @@ class QXMPP_EXPORT QXmppClient : public QXmppLoggable
/// After all these steps a successful XMPP connection is established and
/// connected() signal is emitted.
///
/// After the connected() signal is emitted QXmpp will send the roster request
/// to the server. On receiving the roster, QXmpp will emit
/// QXmppRosterManager::rosterReceived(). After this signal, QXmppRosterManager object gets
/// populated and you can use rosterManager() to get the handle of QXmppRosterManager object.
///
/// After the connected() signal is emitted QXmpp will send the roster
/// request to the server. On receiving the roster, QXmpp will emit
/// QXmppRosterManager::rosterReceived(). After this signal,
/// QXmppRosterManager object gets populated and you can use
/// \c findExtension<QXmppRosterManager>() to get the handle of
/// QXmppRosterManager object.
void connected();

/// This signal is emitted when the XMPP connection disconnects.
///
void disconnected();

/// This signal is emitted when the XMPP connection encounters any error.
@@ -35,29 +35,32 @@

class QXmppRosterManagerPrivate;

/// \brief The QXmppRosterManager class provides access to a connected client's roster.
/// \brief The QXmppRosterManager class provides access to a connected client's
/// roster.
///
/// \note It's object should not be created using it's constructor. Instead
/// QXmppClient::rosterManager() should be used to get the reference of instantiated
/// object this class.
/// \c QXmppClient::findExtension<QXmppRosterManager>() should be used to get
/// the instantiated object of this class.
///
/// It stores all the Roster and Presence details of all the roster entries (that
/// is all the bareJids) in the client's friend's list. It provides the
/// It stores all the Roster and Presence details of all the roster entries
/// (that is all the bareJids) in the client's friend's list. It provides the
/// functionality to get all the bareJids in the client's roster and Roster and
/// Presence details of the same.
///
/// After the successful xmpp connection that after the signal QXmppClient::connected()
/// is emitted QXmpp requests for getting the roster. Once QXmpp receives the roster
/// the signal QXmppRosterManager::rosterReceived() is emitted and after that user can
/// use the functions of this class to get roster entries.
/// After the QXmpp connected successfully to the XMPP server the signal
/// \c QXmppClient::connected() is emitted and the roster is requested from the
/// server. Once QXmpp receives the roster the signal
/// \c QXmppRosterManager::rosterReceived() is emitted and after that the
/// methods of this class can be used to get the roster entries.
///
/// Function QXmppRosterManager::isRosterReceived() tells whether the roster has been
/// received or not.
/// \c QXmppRosterManager::isRosterReceived() can be used to find out whether
/// the roster has been received yet.
///
/// The itemAdded(), itemChanged() and itemRemoved() signals are emitted whenever roster
/// entries are added, changed or removed.
/// The \c itemAdded(), \c itemChanged() and \c itemRemoved() signals are
/// emitted whenever roster entries are added, changed or removed.
///
/// The presenceChanged() signal is emitted whenever the presence for a roster item changes.
/// The \c presenceChanged() signal is emitted whenever the presence for a
/// roster item changes.
///
/// \ingroup Managers

@@ -34,8 +34,8 @@ class QXmppVCardManagerPrivate;
/// implementation of XEP-0054: vcard-temp.
///
/// \note It's object should not be created using it's constructor. Instead
/// QXmppClient::vCardManager() should be used to get the reference of instantiated
/// object this class.
/// \c QXmppClient::findExtension<QXmppVCardManager>() should be used to get
/// the instantiated object of this class.
///
/// <B>Getting vCards of entries in Roster:</B><BR>
/// It doesn't store vCards of the JIDs in the roster of connected user. Instead
@@ -32,6 +32,10 @@ class QXmppVersionManagerPrivate;
/// \brief The QXmppVersionManager class makes it possible to request for
/// the software version of an entity as defined by XEP-0092: Software Version.
///
/// \note It's object should not be created using it's constructor. Instead
/// \c QXmppClient::findExtension<QXmppVersionManager>() should be used to get
/// the instantiated object of this class.
///
/// \ingroup Managers

class QXMPP_EXPORT QXmppVersionManager : public QXmppClientExtension

0 comments on commit dfec49b

Please sign in to comment.
You can’t perform that action at this time.