From e30322061756a64cd23d949e16f21dfe2f18b192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Remko=20Tron=C3=A7on?= Date: Sun, 3 Jan 2010 10:42:47 +0100 Subject: Don't send caps info and vcard info twice. 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) { + // Copy presence before adding extra information + lastSentPresence_ = presence->clone(); + + // Add information and send if (!vCardPhotoHash_.isEmpty()) { presence->addPayload(boost::shared_ptr(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(new Priority(priority))); } + boost::shared_ptr clone() const { + return boost::shared_ptr(new Presence(*this)); + } + private: Presence::Type type_; }; -- cgit v0.10.2-6-g49f6