summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMerov Linden <merov@lindenlab.com>2014-02-28 13:54:22 -0800
committerMerov Linden <merov@lindenlab.com>2014-02-28 13:54:22 -0800
commit209ed601dd6cf9af66eb44d71ab0d28ec94fb81e (patch)
tree16905d6a119e563567d586bf1ffbbe6ca000915f
parent261e728327ce72bc582f41cbb231035f0ee1f9b1 (diff)
ACME-1332 : Update the friends lists in the FB Friends panel when friend status (add/remove) changes
-rw-r--r--indra/newview/llfloaterfacebook.cpp48
-rw-r--r--indra/newview/llfloaterfacebook.h5
2 files changed, 28 insertions, 25 deletions
diff --git a/indra/newview/llfloaterfacebook.cpp b/indra/newview/llfloaterfacebook.cpp
index 4e6dd002ed..5acc5260d2 100644
--- a/indra/newview/llfloaterfacebook.cpp
+++ b/indra/newview/llfloaterfacebook.cpp
@@ -757,6 +757,11 @@ mSuggestedFriends(NULL)
{
}
+LLFacebookFriendsPanel::~LLFacebookFriendsPanel()
+{
+ LLAvatarTracker::instance().removeObserver(this);
+}
+
BOOL LLFacebookFriendsPanel::postBuild()
{
mSecondLifeFriends = getChild<LLAvatarList>("second_life_friends");
@@ -767,6 +772,8 @@ BOOL LLFacebookFriendsPanel::postBuild()
setVisibleCallback(boost::bind(&LLFacebookFriendsPanel::updateFacebookList, this, _2));
+ LLAvatarTracker::instance().addObserver(this);
+
return LLPanel::postBuild();
}
@@ -815,42 +822,35 @@ void LLFacebookFriendsPanel::showFriendsAccordionsIfNeeded()
// Rearrange accordions
LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("friends_accordion");
accordion->arrange();
+}
- // *TODO: new no_matched_tabs_text attribute was implemented in accordion (EXT-7368).
- // this code should be refactored to use it
- // keep help text in a synchronization with accordions visibility.
- //updateFriendListHelpText();
+void LLFacebookFriendsPanel::changed(U32 mask)
+{
+ if (mask & (LLFriendObserver::ADD | LLFriendObserver::REMOVE))
+ {
+ updateFacebookList(true);
+ }
}
+
void LLFacebookFriendsPanel::updateFacebookList(bool visible)
{
if (visible)
{
- LLEventPumps::instance().obtain("FacebookConnectContent").stopListening("LLPanelPeople"); // just in case it is already listening
- LLEventPumps::instance().obtain("FacebookConnectContent").listen("LLPanelPeople", boost::bind(&LLFacebookFriendsPanel::updateSuggestedFriendList, this));
-
- LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLPanelPeople"); // just in case it is already listening
- LLEventPumps::instance().obtain("FacebookConnectState").listen("LLPanelPeople", boost::bind(&LLFacebookFriendsPanel::onConnectedToFacebook, this, _1));
-
- //Connected
- if (LLFacebookConnect::instance().isConnected())
- {
- LLFacebookConnect::instance().loadFacebookFriends();
- }
- //Check if connected
+ // Try to connect to Facebook
if ((LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_NOT_CONNECTED) ||
(LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_CONNECTION_FAILED))
{
LLFacebookConnect::instance().checkConnectionToFacebook();
}
-
+ // Loads FB friends
+ if (LLFacebookConnect::instance().isConnected())
+ {
+ LLFacebookConnect::instance().loadFacebookFriends();
+ }
+ // Sort the FB friends and update the lists
updateSuggestedFriendList();
}
- else
- {
- LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLPanelPeople");
- LLEventPumps::instance().obtain("FacebookConnectContent").stopListening("LLPanelPeople");
- }
}
bool LLFacebookFriendsPanel::onConnectedToFacebook(const LLSD& data)
@@ -861,10 +861,10 @@ bool LLFacebookFriendsPanel::onConnectedToFacebook(const LLSD& data)
{
LLFacebookConnect::instance().loadFacebookFriends();
}
- else if(connection_state == LLFacebookConnect::FB_NOT_CONNECTED)
+ else if (connection_state == LLFacebookConnect::FB_NOT_CONNECTED)
{
updateSuggestedFriendList();
- };
+ }
return false;
}
diff --git a/indra/newview/llfloaterfacebook.h b/indra/newview/llfloaterfacebook.h
index 16c9e97ff0..39264c8bff 100644
--- a/indra/newview/llfloaterfacebook.h
+++ b/indra/newview/llfloaterfacebook.h
@@ -27,6 +27,7 @@
#ifndef LL_LLFLOATERFACEBOOK_H
#define LL_LLFLOATERFACEBOOK_H
+#include "llcallingcard.h"
#include "llfloater.h"
#include "lltextbox.h"
#include "llviewertexture.h"
@@ -128,11 +129,13 @@ private:
bool mReloadingMapTexture;
};
-class LLFacebookFriendsPanel : public LLPanel
+class LLFacebookFriendsPanel : public LLPanel, public LLFriendObserver
{
public:
LLFacebookFriendsPanel();
+ ~LLFacebookFriendsPanel();
BOOL postBuild();
+ virtual void changed(U32 mask);
private:
bool updateSuggestedFriendList();