diff options
-rw-r--r-- | Swift/Controllers/MainController.cpp | 11 | ||||
-rw-r--r-- | Swiften/Elements/Presence.h | 4 |
2 files changed, 12 insertions, 3 deletions
diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp index 29d67b5..946b7d0 100644 --- a/Swift/Controllers/MainController.cpp +++ b/Swift/Controllers/MainController.cpp @@ -202,17 +202,21 @@ void MainController::handleChangeStatusRequest(StatusShow::Type show, const Stri if (presence->getType() != Presence::Unavailable && !client_->isAvailable()) { performLoginFromCachedCredentials(); queuedPresence_ = presence; - } else { + } + else { sendPresence(presence); } } void MainController::sendPresence(boost::shared_ptr<Presence> presence) { + // Copy presence before adding extra information + lastSentPresence_ = presence->clone(); + + // Add information and send if (!vCardPhotoHash_.isEmpty()) { presence->addPayload(boost::shared_ptr<VCardUpdate>(new VCardUpdate(vCardPhotoHash_))); } presence->addPayload(capsInfo_); - lastSentPresence_ = presence; presenceSender_->sendPresence(presence); if (presence->getType() == Presence::Unavailable) { logout(); @@ -233,7 +237,8 @@ void MainController::handleInputIdleChanged(bool idle) { else { if (client_) { sendPresence(preIdlePresence_); - } else { + } + else { queuedPresence_ = preIdlePresence_; } } diff --git a/Swiften/Elements/Presence.h b/Swiften/Elements/Presence.h index a1f15fa..f748e44 100644 --- a/Swiften/Elements/Presence.h +++ b/Swiften/Elements/Presence.h @@ -52,6 +52,10 @@ namespace Swift { updatePayload(boost::shared_ptr<Priority>(new Priority(priority))); } + boost::shared_ptr<Presence> clone() const { + return boost::shared_ptr<Presence>(new Presence(*this)); + } + private: Presence::Type type_; }; |