aboutsummaryrefslogtreecommitdiff
path: root/src/QXmppMucManager.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2011-06-05 10:15:12 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2011-06-05 10:15:12 +0000
commitc79ca4de22443c6d786b96e5fd33bd03e19c4900 (patch)
tree0c314061ded0e654bd741313a9f4b7356ac864b2 /src/QXmppMucManager.cpp
parent6bee004d52df797e402e9a0c6feb21179f9389e6 (diff)
downloadqxmpp-c79ca4de22443c6d786b96e5fd33bd03e19c4900.tar.gz
* add some properties to make MUC easier to script
* remove room participant just after emitting participantRemoved()
Diffstat (limited to 'src/QXmppMucManager.cpp')
-rw-r--r--src/QXmppMucManager.cpp16
1 files changed, 14 insertions, 2 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()) {