diff options
-rw-r--r-- | Swiften/MUC/MUC.cpp | 2 | ||||
-rw-r--r-- | Swiften/Presence/PresenceSender.cpp | 8 | ||||
-rw-r--r-- | Swiften/Presence/PresenceSender.h | 2 |
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; |