diff options
Diffstat (limited to 'Swift/Controllers')
| -rw-r--r-- | Swift/Controllers/Chat/ChatController.cpp | 10 | ||||
| -rw-r--r-- | Swift/Controllers/MainController.cpp | 2 | ||||
| -rw-r--r-- | Swift/Controllers/Roster/ContactRosterItem.cpp | 12 | ||||
| -rw-r--r-- | Swift/Controllers/Roster/ContactRosterItem.h | 4 | ||||
| -rw-r--r-- | Swift/Controllers/StatusTracker.cpp | 6 | ||||
| -rw-r--r-- | Swift/Controllers/StatusTracker.h | 5 | 
6 files changed, 36 insertions, 3 deletions
| diff --git a/Swift/Controllers/Chat/ChatController.cpp b/Swift/Controllers/Chat/ChatController.cpp index edd2e3b..2d2d941 100644 --- a/Swift/Controllers/Chat/ChatController.cpp +++ b/Swift/Controllers/Chat/ChatController.cpp @@ -31,6 +31,7 @@  #include <Swift/Controllers/UIEvents/ShowWhiteboardUIEvent.h>  #include <Swiften/Elements/DeliveryReceipt.h>  #include <Swiften/Elements/DeliveryReceiptRequest.h> +#include <Swiften/Elements/Idle.h>  #include <Swift/Controllers/SettingConstants.h>  #include <Swift/Controllers/Highlighter.h>  #include <Swiften/Base/Log.h> @@ -62,6 +63,10 @@ ChatController::ChatController(const JID& self, StanzaChannel* stanzaChannel, IQ  		startMessage = str(format(QT_TRANSLATE_NOOP("", "Starting chat with %1% - %2%")) % nick % contact.toBare().toString());  		theirPresence = contact.isBare() ? presenceOracle->getHighestPriorityPresence(contact.toBare()) : presenceOracle->getLastPresence(contact);  	} +	Idle::ref idle; +	if (theirPresence && (idle = theirPresence->getPayload<Idle>())) { +		startMessage += QT_TRANSLATE_NOOP("", ", who has been idle since ") + boost::posix_time::to_simple_string(idle->getSince()); +	}  	startMessage += ": " + statusShowTypeToFriendlyName(theirPresence ? theirPresence->getShow() : StatusShow::None);  	if (theirPresence && !theirPresence->getStatus().empty()) {  		startMessage += " (" + theirPresence->getStatus() + ")"; @@ -335,6 +340,11 @@ std::string ChatController::getStatusChangeString(boost::shared_ptr<Presence> pr  			response = QT_TRANSLATE_NOOP("", "%1% is now busy");  		}   	} +	Idle::ref idle; +	if ((idle = presence->getPayload<Idle>())) { +		response += QT_TRANSLATE_NOOP("", " and has been idle since ") + boost::posix_time::to_simple_string(idle->getSince()); +	} +  	if (!response.empty()) {  		response = str(format(response) % nick);  	} diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp index 87ec94d..0c9c09c 100644 --- a/Swift/Controllers/MainController.cpp +++ b/Swift/Controllers/MainController.cpp @@ -461,7 +461,7 @@ void MainController::handleInputIdleChanged(bool idle) {  	}  	else {  		if (idle) { -			if (statusTracker_->goAutoAway()) { +			if (statusTracker_->goAutoAway(idleDetector_->getIdleTimeSeconds())) {  				if (client_ && client_->isAvailable()) {  					sendPresence(statusTracker_->getNextPresence());  				} diff --git a/Swift/Controllers/Roster/ContactRosterItem.cpp b/Swift/Controllers/Roster/ContactRosterItem.cpp index 5b1b6e0..d2edfe7 100644 --- a/Swift/Controllers/Roster/ContactRosterItem.cpp +++ b/Swift/Controllers/Roster/ContactRosterItem.cpp @@ -8,6 +8,9 @@  #include "Swift/Controllers/Roster/GroupRosterItem.h"  #include <Swiften/Base/foreach.h> +#include <Swiften/Elements/Idle.h> + +#include <boost/date_time/posix_time/posix_time.hpp>  namespace Swift { @@ -39,6 +42,15 @@ std::string ContactRosterItem::getStatusText() const {  	return shownPresence_ ? shownPresence_->getStatus() : "";  } +std::string ContactRosterItem::getIdleText() const { +	Idle::ref idle = shownPresence_ ? shownPresence_->getPayload<Idle>() : Idle::ref(); +	if (!idle || idle->getSince().is_not_a_date_time()) { +		return ""; +	} else { +		return boost::posix_time::to_simple_string(idle->getSince()); +	} +} +  void ContactRosterItem::setAvatarPath(const std::string& path) {  	avatarPath_ = path;  	onDataChanged(); diff --git a/Swift/Controllers/Roster/ContactRosterItem.h b/Swift/Controllers/Roster/ContactRosterItem.h index 8389a44..7a2100e 100644 --- a/Swift/Controllers/Roster/ContactRosterItem.h +++ b/Swift/Controllers/Roster/ContactRosterItem.h @@ -17,6 +17,7 @@  #include <boost/bind.hpp>  #include "Swiften/Base/boost_bsignals.h"  #include <boost/shared_ptr.hpp> +#include <boost/date_time/posix_time/ptime.hpp>  namespace Swift { @@ -35,6 +36,7 @@ class ContactRosterItem : public RosterItem {  		StatusShow::Type getStatusShow() const;  		StatusShow::Type getSimplifiedStatusShow() const;  		std::string getStatusText() const; +		std::string getIdleText() const;  		void setAvatarPath(const std::string& path);  		const std::string& getAvatarPath() const;  		const JID& getJID() const; @@ -50,9 +52,11 @@ class ContactRosterItem : public RosterItem {  		void setSupportedFeatures(const std::set<Feature>& features);  		bool supportsFeature(Feature feature) const; +  	private:  		JID jid_;  		JID displayJID_; +		boost::posix_time::ptime lastAvailableTime_;  		std::string avatarPath_;  		std::map<std::string, boost::shared_ptr<Presence> > presences_;  		boost::shared_ptr<Presence> offlinePresence_; diff --git a/Swift/Controllers/StatusTracker.cpp b/Swift/Controllers/StatusTracker.cpp index 0c88f4d..6766c2e 100644 --- a/Swift/Controllers/StatusTracker.cpp +++ b/Swift/Controllers/StatusTracker.cpp @@ -8,6 +8,8 @@  #include <boost/smart_ptr/make_shared.hpp> +#include <Swiften/Elements/Idle.h> +  namespace Swift {  StatusTracker::StatusTracker() { @@ -21,6 +23,7 @@ boost::shared_ptr<Presence> StatusTracker::getNextPresence() {  		presence = boost::make_shared<Presence>();  		presence->setShow(StatusShow::Away);  		presence->setStatus(queuedPresence_->getStatus()); +		presence->addPayload(boost::make_shared<Idle>(isAutoAwaySince_));  	} else {  		presence = queuedPresence_;  	} @@ -35,11 +38,12 @@ void StatusTracker::setRequestedPresence(boost::shared_ptr<Presence> presence) {  //	}  } -bool StatusTracker::goAutoAway() { +bool StatusTracker::goAutoAway(const int& seconds) {  	if (queuedPresence_->getShow() != StatusShow::Online) {  		return false;  	}  	isAutoAway_ = true; +	isAutoAwaySince_ = boost::posix_time::second_clock::universal_time() - boost::posix_time::seconds(seconds);  	return true;  } diff --git a/Swift/Controllers/StatusTracker.h b/Swift/Controllers/StatusTracker.h index 4f4e880..10a5c0c 100644 --- a/Swift/Controllers/StatusTracker.h +++ b/Swift/Controllers/StatusTracker.h @@ -10,6 +10,8 @@  #include "Swiften/Elements/Presence.h" +#include <boost/date_time/posix_time/posix_time_types.hpp> +  namespace Swift {  	class StatusTracker { @@ -17,10 +19,11 @@ namespace Swift {  			StatusTracker();  			boost::shared_ptr<Presence> getNextPresence();  			void setRequestedPresence(boost::shared_ptr<Presence> presence); -			bool goAutoAway(); +			bool goAutoAway(const int& seconds);  			bool goAutoUnAway();  		private:  			boost::shared_ptr<Presence> queuedPresence_;  			bool isAutoAway_; +			boost::posix_time::ptime isAutoAwaySince_;  	};  } | 
 Swift
 Swift