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_;  	}; | 
 Swift
 Swift