aboutsummaryrefslogtreecommitdiff
path: root/src
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
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')
-rw-r--r--src/QXmppMucManager.cpp16
-rw-r--r--src/QXmppMucManager.h13
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);