diff options
Diffstat (limited to 'Swift/Controllers')
-rw-r--r-- | Swift/Controllers/MainController.cpp | 11 |
1 files changed, 8 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_; } } |