1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
/*
* Copyright (C) 2008-2010 Manjeet Dahiya
*
* Author:
* Manjeet Dahiya
*
* Source:
* http://code.google.com/p/qxmpp
*
* This file is a part of QXmpp library.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
*/
#ifndef QXMPPROSTER_H
#define QXMPPROSTER_H
#include <QObject>
#include <QMap>
#include <QSet>
#include <QStringList>
#include "QXmppClient.h"
class QXmppRosterIq;
class QXmppPresence;
/// \brief The QXmppRoster class provides access to a connected client's roster.
///
/// \note It's object should not be created using it's constructor. Instead
/// QXmppClient::getRoster() should be used to get the reference of instantiated
/// object 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
/// functionality to get all the bareJids in the client's roster and Roster and
/// Presence details of the same.
///
/// After the sucessfull xmpp connection that after the signal QXmppClient::connected()
/// is emitted QXmpp requests for getting the roster. Once QXmpp receives the roster
/// the signal QXmppRoster::rosterReceived() is emitted and after that user can
/// use the functions of this class to get roster entries.
///
/// Function QXmppRoster::isRosterReceived() tells whether the roster has been
/// received or not.
///
/// Signals presenceChanged() or rosterChanged() are emitted whenever presence
/// or roster changes respectively.
///
class QXmppRoster : public QObject
{
Q_OBJECT
public:
class QXmppRosterEntry
{
public:
/// An enumeration for type of subscription with the bareJid in the roster.
enum SubscriptionType
{
None = 1, ///< the user does not have a subscription to the
///< contact's presence information, and the contact does
///< not have a subscription to the user's presence information
Both, ///< both the user and the contact have subscriptions to each
///< other's presence information
From, ///< the contact has a subscription to the user's presence information,
///< but the user does not have a subscription to the contact's presence information
To, ///< the user has a subscription to the contact's presence information,
///< but the contact does not have a subscription to the user's presence information
Remove ///< to delete a roster item
};
QString bareJid() const;
QString name() const;
QXmppRosterEntry::SubscriptionType subscriptionType() const;
QString subscriptionStatus() const;
QSet<QString> groups() const;
void setBareJid(const QString&);
void setName(const QString&);
void setSubscriptionType(QXmppRosterEntry::SubscriptionType);
void setSubscriptionStatus(const QString&);
void setGroups(const QSet<QString>&);
void addGroupEntry(const QString&);
// deprecated accessors, use the form without "get" instead
QString Q_DECL_DEPRECATED getBareJid() const;
QString Q_DECL_DEPRECATED getName() const;
QXmppRosterEntry::SubscriptionType Q_DECL_DEPRECATED getSubscriptionType() const;
QString Q_DECL_DEPRECATED getSubscriptionStatus() const;
QSet<QString> Q_DECL_DEPRECATED getGroups() const;
private:
QString m_bareJid;
SubscriptionType m_type;
QString m_name;
// can be subscribe/unsubscribe (attribute "ask")
QString m_subscriptionStatus;
QSet<QString> m_groups;
};
QXmppRoster(QXmppStream* stream);
~QXmppRoster();
bool isRosterReceived();
QStringList getRosterBareJids() const;
QXmppRoster::QXmppRosterEntry getRosterEntry(const QString& bareJid) const;
QMap<QString, QXmppRoster::QXmppRosterEntry> Q_DECL_DEPRECATED getRosterEntries() const;
QStringList getResources(const QString& bareJid) const;
QMap<QString, QMap<QString, QXmppPresence> > Q_DECL_DEPRECATED getAllPresences() const;
QMap<QString, QXmppPresence> getAllPresencesForBareJid(
const QString& bareJid) const;
QXmppPresence getPresence(const QString& bareJid,
const QString& resource) const;
signals:
/// This signal is emitted when the Roster IQ is received after a successful
/// connection.
void rosterReceived();
/// This signal is emitted when the presence of a particular bareJid and resource changes.
void presenceChanged(const QString& bareJid, const QString& resource);
/// This signal is emitted when the roster entry of a particular bareJid changes.
void rosterChanged(const QString& bareJid);
private:
//reverse pointer to stream
QXmppStream* m_stream;
//map of bareJid and its rosterEntry
QMap<QString, QXmppRoster::QXmppRosterEntry> m_entries;
// map of resources of the jid and map of resouces and presences
QMap<QString, QMap<QString, QXmppPresence> > m_presences;
// flag to store that QXmppRoster has been populated
bool m_isRosterReceived;
private slots:
void disconnected();
void presenceReceived(const QXmppPresence&);
void rosterIqReceived(const QXmppRosterIq&);
void rosterRequestIqReceived(const QXmppRosterIq&);
};
#endif // QXMPPROSTER_H
|