diff options
| author | Mike Antipov <mantipov@productengine.com> | 2010-01-25 12:53:02 +0200 | 
|---|---|---|
| committer | Mike Antipov <mantipov@productengine.com> | 2010-01-25 12:53:02 +0200 | 
| commit | 74b3c9e0e5cbcb2c34ae0f8dd2d0186826a227da (patch) | |
| tree | 4042b73d7938f19470e0f11928f6eb50557966d5 | |
| parent | 6ffc21e00d07a7c90d46009571556a9caec96e62 (diff) | |
Fixed normal bug EXT-3880 ( [BSI] functionality loss - online status in profile)
-- removed logic implemented for EXT-2022 (show "Online" status or nothing)
-- removed deprecated method LLPanelProfileView::togglePanel
-- implemented required bihavior (for friends):
--- Online when online and privacy settings allow to show
--- Offline when offline and privacy settings allow to show
--- Else: nothing
-- also implemented bihavior for non-friends to use global Preference: "Only Friends & Groups can see when I am online"
--- Online when online and was not set in Preferences/"Only Friends & Groups can see when I am online"
--- Else: Offline
--HG--
branch : product-engine
| -rw-r--r-- | indra/newview/llpanelprofileview.cpp | 54 | ||||
| -rw-r--r-- | indra/newview/llpanelprofileview.h | 20 | 
2 files changed, 41 insertions, 33 deletions
| diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp index 7832f63e6a..044036ea50 100644 --- a/indra/newview/llpanelprofileview.cpp +++ b/indra/newview/llpanelprofileview.cpp @@ -101,8 +101,6 @@ void LLPanelProfileView::onOpen(const LLSD& key)  		id = key["id"];  	} -	// subscribe observer to get online status. Request will be sent by LLPanelAvatarProfile itself -	mAvatarStatusObserver->subscribe();  	if(id.notNull() && getAvatarId() != id)  	{  		setAvatarId(id); @@ -111,12 +109,9 @@ void LLPanelProfileView::onOpen(const LLSD& key)  	// Update the avatar name.  	gCacheName->get(getAvatarId(), FALSE,  		boost::bind(&LLPanelProfileView::onAvatarNameCached, this, _1, _2, _3, _4)); -/* -// disable this part of code according to EXT-2022. See processOnlineStatus -	// status should only show if viewer has permission to view online/offline. EXT-453  -	mStatusText->setVisible(isGrantedToSeeOnlineStatus()); +  	updateOnlineStatus(); -*/ +  	LLPanelProfile::onOpen(key);  } @@ -164,27 +159,43 @@ bool LLPanelProfileView::isGrantedToSeeOnlineStatus()  	// *NOTE: GRANT_ONLINE_STATUS is always set to false while changing any other status.  	// When avatar disallow me to see her online status processOfflineNotification Message is received by the viewer  	// see comments for ChangeUserRights template message. EXT-453. -//	return relationship->isRightGrantedFrom(LLRelationship::GRANT_ONLINE_STATUS); -	return true; +	// If GRANT_ONLINE_STATUS flag is changed it will be applied when viewer restarts. EXT-3880 +	return relationship->isRightGrantedFrom(LLRelationship::GRANT_ONLINE_STATUS);  } +// method was disabled according to EXT-2022. Re-enabled & improved according to EXT-3880  void LLPanelProfileView::updateOnlineStatus()  { +	// set text box visible to show online status for non-friends who has not set in Preferences +	// "Only Friends & Groups can see when I am online" +	mStatusText->setVisible(TRUE); +  	const LLRelationship* relationship = LLAvatarTracker::instance().getBuddyInfo(getAvatarId());  	if (NULL == relationship) -		return; +	{ +		// this is non-friend avatar. Status will be updated from LLAvatarPropertiesProcessor. +		// in LLPanelProfileView::processOnlineStatus() -	bool online = relationship->isOnline(); +		// subscribe observer to get online status. Request will be sent by LLPanelAvatarProfile itself. +		// do not subscribe for friend avatar because online status can be wrong overridden +		// via LLAvatarData::flags if Preferences: "Only Friends & Groups can see when I am online" is set. +		mAvatarStatusObserver->subscribe(); +		return; +	} +	// For friend let check if he allowed me to see his status -	std::string status = getString(online ? "status_online" : "status_offline"); +	// status should only show if viewer has permission to view online/offline. EXT-453, EXT-3880 +	mStatusText->setVisible(isGrantedToSeeOnlineStatus()); -	mStatusText->setValue(status); +	bool online = relationship->isOnline(); +	processOnlineStatus(online);  }  void LLPanelProfileView::processOnlineStatus(bool online)  { -	mAvatarIsOnline = online; -	mStatusText->setVisible(online); +	std::string status = getString(online ? "status_online" : "status_offline"); + +	mStatusText->setValue(status);  }  void LLPanelProfileView::onAvatarNameCached(const LLUUID& id, const std::string& first_name, const std::string& last_name, BOOL is_group) @@ -193,17 +204,4 @@ void LLPanelProfileView::onAvatarNameCached(const LLUUID& id, const std::string&  	getChild<LLUICtrl>("user_name", FALSE)->setValue(first_name + " " + last_name);  } -void LLPanelProfileView::togglePanel(LLPanel* panel, const LLSD& key) -{ -	// *TODO: unused method? - -	LLPanelProfile::togglePanel(panel); -	if(FALSE == panel->getVisible()) -	{ -		// LLPanelProfile::togglePanel shows/hides all children, -		// we don't want to display online status for non friends, so re-hide it here -		mStatusText->setVisible(mAvatarIsOnline); -	} -} -  // EOF diff --git a/indra/newview/llpanelprofileview.h b/indra/newview/llpanelprofileview.h index 5dc617d4a0..9b87e146a8 100644 --- a/indra/newview/llpanelprofileview.h +++ b/indra/newview/llpanelprofileview.h @@ -64,8 +64,6 @@ public:  	/*virtual*/ BOOL postBuild(); -	/*virtual*/ void togglePanel(LLPanel* panel, const LLSD& key = LLSD()); -  	BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,  						   BOOL drop, EDragAndDropType cargo_type,  						   void *cargo_data, EAcceptance *accept, @@ -81,8 +79,21 @@ public:  protected:  	void onBackBtnClick(); -	bool isGrantedToSeeOnlineStatus(); // deprecated after EXT-2022 is implemented -	void updateOnlineStatus(); // deprecated after EXT-2022 is implemented +	bool isGrantedToSeeOnlineStatus(); + +	/** +	 * Displays avatar's online status if possible. +	 * +	 * Requirements from EXT-3880: +	 * For friends: +	 * - Online when online and privacy settings allow to show +	 * - Offline when offline and privacy settings allow to show +	 * - Else: nothing +	 * For other avatars: +	 *  - Online when online and was not set in Preferences/"Only Friends & Groups can see when I am online" +	 *  - Else: Offline +	 */ +	void updateOnlineStatus();  	void processOnlineStatus(bool online);  private: @@ -96,7 +107,6 @@ private:  	LLTextBox* mStatusText;  	AvatarStatusObserver* mAvatarStatusObserver; -	bool mAvatarIsOnline;  };  #endif //LL_LLPANELPROFILEVIEW_H | 
