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 /indra | |
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
Diffstat (limited to 'indra')
-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 |