diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2011-06-05 10:15:12 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2011-06-05 10:15:12 +0000 |
| commit | c79ca4de22443c6d786b96e5fd33bd03e19c4900 (patch) | |
| tree | 0c314061ded0e654bd741313a9f4b7356ac864b2 /src | |
| parent | 6bee004d52df797e402e9a0c6feb21179f9389e6 (diff) | |
| download | qxmpp-c79ca4de22443c6d786b96e5fd33bd03e19c4900.tar.gz | |
* add some properties to make MUC easier to script
* remove room participant just after emitting participantRemoved()
Diffstat (limited to 'src')
| -rw-r--r-- | src/QXmppMucManager.cpp | 16 | ||||
| -rw-r--r-- | src/QXmppMucManager.h | 13 |
2 files changed, 25 insertions, 4 deletions
diff --git a/src/QXmppMucManager.cpp b/src/QXmppMucManager.cpp index f2a8933b..b753250c 100644 --- a/src/QXmppMucManager.cpp +++ b/src/QXmppMucManager.cpp @@ -59,7 +59,6 @@ QXmppMucManager::QXmppMucManager() d = new QXmppMucManagerPrivate; } - /// Destroys a QXmppMucManager. QXmppMucManager::~QXmppMucManager() @@ -188,6 +187,12 @@ QXmppMucRoom::QXmppMucRoom(QXmppClient *client, const QString &jid, QObject *par check = connect(d->client, SIGNAL(presenceReceived(QXmppPresence)), this, SLOT(_q_presenceReceived(QXmppPresence))); Q_ASSERT(check); + + check = connect(this, SIGNAL(joined()), this, SIGNAL(isJoinedChanged())); + Q_ASSERT(check); + + check = connect(this, SIGNAL(left()), this, SIGNAL(isJoinedChanged())); + Q_ASSERT(check); } /// Destroys a QXmppMucRoom. @@ -335,8 +340,12 @@ bool QXmppMucRoom::sendMessage(const QString &text) void QXmppMucRoom::setNickName(const QString &nickName) { + if (nickName == d->nickName) + return; + const bool wasJoined = isJoined(); d->nickName = nickName; + emit nickNameChanged(nickName); // if we had already joined the room, request nickname change if (wasJoined) { @@ -586,8 +595,11 @@ void QXmppMucRoom::_q_presenceReceived(const QXmppPresence &presence) } } else if (presence.type() == QXmppPresence::Unavailable) { - if (d->participants.remove(jid)) { + if (d->participants.contains(jid)) { + d->participants.insert(jid, presence); + emit participantRemoved(jid); + d->participants.remove(jid); // check whether this was our own presence if (jid == d->ownJid()) { diff --git a/src/QXmppMucManager.h b/src/QXmppMucManager.h index cbf9e5ce..24d33069 100644 --- a/src/QXmppMucManager.h +++ b/src/QXmppMucManager.h @@ -95,9 +95,11 @@ private: class QXmppMucRoom : public QObject { Q_OBJECT + Q_FLAGS(Action Actions) Q_PROPERTY(QXmppMucRoom::Actions allowedActions READ allowedActions NOTIFY allowedActionsChanged) - Q_PROPERTY(QString jid READ jid) - Q_PROPERTY(QString nickName READ nickName WRITE setNickName) + Q_PROPERTY(bool isJoined READ isJoined NOTIFY isJoinedChanged) + Q_PROPERTY(QString jid READ jid CONSTANT) + Q_PROPERTY(QString nickName READ nickName WRITE setNickName NOTIFY nickNameChanged) Q_PROPERTY(QStringList participants READ participants) Q_PROPERTY(QString password READ password WRITE setPassword) Q_PROPERTY(QString subject READ subject WRITE setSubject NOTIFY subjectChanged) @@ -148,12 +150,19 @@ signals: /// This signal is emitted if you get kicked from the room. void kicked(const QString &jid, const QString &reason); + /// \cond + void isJoinedChanged(); + /// \endconf + /// This signal is emiited once you have left the room. void left(); /// This signal is emitted when a message is received. void messageReceived(const QXmppMessage &message); + /// This signal is emitted when your own nick name changes. + void nickNameChanged(const QString &nickName); + /// This signal is emitted when a participant joins the room. void participantAdded(const QString &jid); |
