diff options
| author | Richard Maudsley <richard.maudsley@isode.com> | 2014-06-27 16:06:49 (GMT) | 
|---|---|---|
| committer | Richard Maudsley <richard.maudsley@isode.com> | 2014-07-07 10:49:04 (GMT) | 
| commit | 14fd8e4363241e04b20da85dfc61e5f315e9b28d (patch) | |
| tree | b7a5450f73e98dd64c0367702575bb3f52e44ab4 /Swift/Controllers | |
| parent | 9179b54ac93ddc88765c3cd984916d7ffd130d20 (diff) | |
| download | swift-contrib-14fd8e4363241e04b20da85dfc61e5f315e9b28d.zip swift-contrib-14fd8e4363241e04b20da85dfc61e5f315e9b28d.tar.bz2  | |
Show own tooltip when hovering over roster header.
Test-Information:
Made combinations of presence/vcard/avatar changes and verified that the information in the tooltip was synchronized. Connect two clients and verify that the tooltip presence text reflects the local client presence only.
Change-Id: I92af0f58f7045f3a15f2fae2f9cbc6e24a066923
Diffstat (limited to 'Swift/Controllers')
| -rw-r--r-- | Swift/Controllers/MainController.cpp | 3 | ||||
| -rw-r--r-- | Swift/Controllers/Roster/RosterController.cpp | 30 | ||||
| -rw-r--r-- | Swift/Controllers/Roster/RosterController.h | 5 | ||||
| -rw-r--r-- | Swift/Controllers/UIInterfaces/MainWindow.h | 2 | ||||
| -rw-r--r-- | Swift/Controllers/UnitTest/MockMainWindow.h | 1 | 
5 files changed, 35 insertions, 6 deletions
diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp index df137f4..f16f8ad 100644 --- a/Swift/Controllers/MainController.cpp +++ b/Swift/Controllers/MainController.cpp @@ -341,3 +341,3 @@ void MainController::handleConnected() {  		fileTransferListController_->setFileTransferOverview(ftOverview_); -		rosterController_ = new RosterController(jid_, client_->getRoster(), client_->getAvatarManager(), uiFactory_, client_->getNickManager(), client_->getNickResolver(), client_->getPresenceOracle(), client_->getSubscriptionManager(), eventController_, uiEventStream_, client_->getIQRouter(), settings_, client_->getEntityCapsProvider(), ftOverview_, client_->getClientBlockListManager(), client_->getVCardManager()); +		rosterController_ = new RosterController(boundJID_, client_->getRoster(), client_->getAvatarManager(), uiFactory_, client_->getNickManager(), client_->getNickResolver(), client_->getPresenceOracle(), client_->getSubscriptionManager(), eventController_, uiEventStream_, client_->getIQRouter(), settings_, client_->getEntityCapsProvider(), ftOverview_, client_->getClientBlockListManager(), client_->getVCardManager());  		rosterController_->onChangeStatusRequest.connect(boost::bind(&MainController::handleChangeStatusRequest, this, _1, _2)); @@ -413,2 +413,3 @@ void MainController::handleConnected() { +	rosterController_->setJID(boundJID_);  	rosterController_->setEnabled(true); diff --git a/Swift/Controllers/Roster/RosterController.cpp b/Swift/Controllers/Roster/RosterController.cpp index d2d024c..6bb5119 100644 --- a/Swift/Controllers/Roster/RosterController.cpp +++ b/Swift/Controllers/Roster/RosterController.cpp @@ -60,6 +60,5 @@ namespace Swift {  RosterController::RosterController(const JID& jid, XMPPRoster* xmppRoster, AvatarManager* avatarManager, MainWindowFactory* mainWindowFactory, NickManager* nickManager, NickResolver* nickResolver, PresenceOracle* presenceOracle, SubscriptionManager* subscriptionManager, EventController* eventController, UIEventStream* uiEventStream, IQRouter* iqRouter, SettingsProvider* settings, EntityCapsProvider* entityCapsManager, FileTransferOverview* fileTransferOverview, ClientBlockListManager* clientBlockListManager, VCardManager* vcardManager) -	: myJID_(jid), xmppRoster_(xmppRoster), mainWindowFactory_(mainWindowFactory), mainWindow_(mainWindowFactory_->createMainWindow(uiEventStream)), roster_(new Roster()), offlineFilter_(new OfflineRosterFilter()), nickManager_(nickManager), nickResolver_(nickResolver), uiEventStream_(uiEventStream), entityCapsManager_(entityCapsManager), ftOverview_(fileTransferOverview), clientBlockListManager_(clientBlockListManager) { +	: myJID_(jid), xmppRoster_(xmppRoster), mainWindowFactory_(mainWindowFactory), mainWindow_(mainWindowFactory_->createMainWindow(uiEventStream)), roster_(new Roster()), offlineFilter_(new OfflineRosterFilter()), vcardManager_(vcardManager), avatarManager_(avatarManager), nickManager_(nickManager), nickResolver_(nickResolver), presenceOracle_(presenceOracle), uiEventStream_(uiEventStream), entityCapsManager_(entityCapsManager), ftOverview_(fileTransferOverview), clientBlockListManager_(clientBlockListManager) {  	assert(fileTransferOverview);  	iqRouter_ = iqRouter; -	presenceOracle_ = presenceOracle;  	subscriptionManager_ = subscriptionManager; @@ -80,5 +79,7 @@ RosterController::RosterController(const JID& jid, XMPPRoster* xmppRoster, Avata  	uiEventConnection_ = uiEventStream->onUIEvent.connect(boost::bind(&RosterController::handleUIEvent, this, _1)); -	avatarManager_ = avatarManager; + +	vcardManager_->onOwnVCardChanged.connect(boost::bind(&RosterController::handleOwnVCardChanged, this, _1));  	avatarManager_->onAvatarChanged.connect(boost::bind(&RosterController::handleAvatarChanged, this, _1)); -	mainWindow_->setMyAvatarPath(pathToString(avatarManager_->getAvatarPath(myJID_))); +	presenceOracle_->onPresenceChange.connect(boost::bind(&RosterController::handlePresenceChanged, this, _1)); +	mainWindow_->setMyAvatarPath(pathToString(avatarManager_->getAvatarPath(myJID_.toBare()))); @@ -93,2 +94,7 @@ RosterController::RosterController(const JID& jid, XMPPRoster* xmppRoster, Avata  	handleShowOfflineToggled(settings_->getSetting(SettingConstants::SHOW_OFFLINE)); + +	ownContact_ = boost::make_shared<ContactRosterItem>(myJID_.toBare(), myJID_.toBare(), nickManager_->getOwnNick(), (GroupRosterItem*)0); +	ownContact_->setVCard(vcardManager_->getVCard(myJID_.toBare())); +	ownContact_->setAvatarPath(pathToString(avatarManager_->getAvatarPath(myJID_.toBare()))); +	mainWindow_->setMyContactRosterItem(ownContact_);  } @@ -338,2 +344,7 @@ void RosterController::handleSubscriptionRequestDeclined(SubscriptionRequestEven +void RosterController::handleOwnVCardChanged(VCard::ref vcard) { +	ownContact_->setVCard(vcard); +	mainWindow_->setMyContactRosterItem(ownContact_); +} +  void RosterController::handleAvatarChanged(const JID& jid) { @@ -341,5 +352,14 @@ void RosterController::handleAvatarChanged(const JID& jid) {  	roster_->applyOnItems(SetAvatar(jid, path)); -	if (jid.equals(myJID_, JID::WithoutResource)) { +	if (jid.equals(myJID_, JID::WithResource)) {  		mainWindow_->setMyAvatarPath(pathToString(path));  	} +	ownContact_->setAvatarPath(pathToString(path)); +	mainWindow_->setMyContactRosterItem(ownContact_); +} + +void RosterController::handlePresenceChanged(Presence::ref presence) { +	if (presence->getFrom().equals(myJID_, JID::WithResource)) { +		ownContact_->applyPresence(std::string(), presence); +		mainWindow_->setMyContactRosterItem(ownContact_); +	}  } diff --git a/Swift/Controllers/Roster/RosterController.h b/Swift/Controllers/Roster/RosterController.h index 5b26fc7..d0c7024 100644 --- a/Swift/Controllers/Roster/RosterController.h +++ b/Swift/Controllers/Roster/RosterController.h @@ -52,2 +52,3 @@ namespace Swift {  			void showRosterWindow(); +			void setJID(const JID& jid) { myJID_ = jid; }  			MainWindow* getWindow() {return mainWindow_;} @@ -55,3 +56,5 @@ namespace Swift {  			boost::signal<void ()> onSignOutRequest; +			void handleOwnVCardChanged(VCard::ref vcard);  			void handleAvatarChanged(const JID& jid); +			void handlePresenceChanged(Presence::ref presence);  			void setEnabled(bool enabled); @@ -95,2 +98,3 @@ namespace Swift {  			OfflineRosterFilter* offlineFilter_; +			VCardManager* vcardManager_;  			AvatarManager* avatarManager_; @@ -109,2 +113,3 @@ namespace Swift {  			RosterVCardProvider* rosterVCardProvider_; +			boost::shared_ptr<ContactRosterItem> ownContact_; diff --git a/Swift/Controllers/UIInterfaces/MainWindow.h b/Swift/Controllers/UIInterfaces/MainWindow.h index c85106f..82750bf 100644 --- a/Swift/Controllers/UIInterfaces/MainWindow.h +++ b/Swift/Controllers/UIInterfaces/MainWindow.h @@ -17,2 +17,3 @@  #include <Swiften/Base/boost_bsignals.h> +#include <Swift/Controllers/Roster/ContactRosterItem.h> @@ -35,2 +36,3 @@ namespace Swift {  			virtual void setMyStatusType(StatusShow::Type type) = 0; +			virtual void setMyContactRosterItem(boost::shared_ptr<ContactRosterItem> contact) = 0;  			/** Must be able to cope with NULL to clear the roster */ diff --git a/Swift/Controllers/UnitTest/MockMainWindow.h b/Swift/Controllers/UnitTest/MockMainWindow.h index ff3fa4d..b56f352 100644 --- a/Swift/Controllers/UnitTest/MockMainWindow.h +++ b/Swift/Controllers/UnitTest/MockMainWindow.h @@ -22,2 +22,3 @@ namespace Swift {  			virtual void setMyStatusType(StatusShow::Type /*type*/) {} +			virtual void setMyContactRosterItem(boost::shared_ptr<ContactRosterItem> /*contact*/) {}  			virtual void setAvailableAdHocCommands(const std::vector<DiscoItems::Item>& /*commands*/) {}  | 
 Swift