summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Swiften/MUC/MUC.cpp2
-rw-r--r--Swiften/Presence/PresenceSender.cpp8
-rw-r--r--Swiften/Presence/PresenceSender.h2
3 files changed, 11 insertions, 1 deletions
diff --git a/Swiften/MUC/MUC.cpp b/Swiften/MUC/MUC.cpp
index 3446849..8f04308 100644
--- a/Swiften/MUC/MUC.cpp
+++ b/Swiften/MUC/MUC.cpp
@@ -35,7 +35,7 @@ void MUC::joinAs(const String &nick) {
ownMUCJID = JID(ownMUCJID.getNode(), ownMUCJID.getDomain(), nick);
- boost::shared_ptr<Presence> joinPresence(new Presence());
+ boost::shared_ptr<Presence> joinPresence(presenceSender->getLastSentUndirectedPresence());
joinPresence->setTo(ownMUCJID);
joinPresence->addPayload(boost::shared_ptr<Payload>(new MUCPayload()));
presenceSender->sendPresence(joinPresence);
diff --git a/Swiften/Presence/PresenceSender.cpp b/Swiften/Presence/PresenceSender.cpp
index 082c841..6df02b8 100644
--- a/Swiften/Presence/PresenceSender.cpp
+++ b/Swiften/Presence/PresenceSender.cpp
@@ -31,6 +31,14 @@ void PresenceSender::sendPresence(boost::shared_ptr<Presence> presence) {
}
}
+/**
+ * Gets either the last broadcast presence, or an empty stanza if none has been sent.
+ */
+boost::shared_ptr<Presence> PresenceSender::getLastSentUndirectedPresence() {
+ boost::shared_ptr<Presence> presenceCopy(lastSentUndirectedPresence ? new Presence(*lastSentUndirectedPresence) : new Presence());
+ return presenceCopy;
+}
+
void PresenceSender::addDirectedPresenceReceiver(const JID& jid) {
directedPresenceReceivers.insert(jid);
if (channel->isAvailable()) {
diff --git a/Swiften/Presence/PresenceSender.h b/Swiften/Presence/PresenceSender.h
index 87be753..3336523 100644
--- a/Swiften/Presence/PresenceSender.h
+++ b/Swiften/Presence/PresenceSender.h
@@ -26,6 +26,8 @@ namespace Swift {
void confirmSubscription(const JID& jid);
void requestSubscription(const JID& jid);
+ boost::shared_ptr<Presence> getLastSentUndirectedPresence();
+
private:
boost::shared_ptr<Presence> lastSentUndirectedPresence;
StanzaChannel* channel;