diff options
author | Remko Tronçon <git@el-tramo.be> | 2010-01-03 09:42:47 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2010-01-03 09:42:47 (GMT) |
commit | e30322061756a64cd23d949e16f21dfe2f18b192 (patch) | |
tree | 46ddb8fc61f4741107c8cb91f22ef66b4770324c | |
parent | 09400aab33c46b7136bf7d0fab149641578e3c77 (diff) | |
download | swift-e30322061756a64cd23d949e16f21dfe2f18b192.zip swift-e30322061756a64cd23d949e16f21dfe2f18b192.tar.bz2 |
Don't send caps info and vcard info twice.
-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_; }; |