ACME-348 : Completed : Facebook Connect refactored, LLPeoplePanel test list hooked correctly.

meow-7.2.2
Merov Linden 2013-05-10 18:25:45 -07:00
parent f90d93f75d
commit 7c4bfc8f55
4 changed files with 88 additions and 90 deletions

View File

@ -98,9 +98,9 @@ public:
{
LL_DEBUGS("FacebookConnect") << "Disconnect successful. content: " << content << LL_ENDL;
// Hide all the facebook stuff
// Clear all facebook stuff
LLFacebookConnect::instance().setConnected(false);
LLFacebookConnect::instance().hideFacebookFriends();
LLFacebookConnect::instance().clearContent();
}
else
{
@ -156,9 +156,7 @@ public:
if (isGoodStatus(status))
{
LL_DEBUGS("FacebookConnect") << "Getting Facebook friends successful. content: " << content << LL_ENDL;
// Display the list of friends
LLFacebookConnect::instance().showFacebookFriends(content);
LLFacebookConnect::instance().storeContent(content);
}
else
{
@ -171,18 +169,14 @@ public:
///////////////////////////////////////////////////////////////////////////////
//
LLFacebookConnect::LLFacebookConnect()
: mConnectedToFbc(false)
{
llinfos << "Merov : LLFacebookConnect::LLFacebookConnect" << llendl;
}
void LLFacebookConnect::init()
: mConnectedToFbc(false),
mContent(),
mGeneration(0)
{
}
std::string LLFacebookConnect::getFacebookConnectURL(const std::string& route)
{
llinfos << "Merov : LLFacebookConnect::getFacebookConnectURL. route = " << route << llendl;
//static std::string sFacebookConnectUrl = gAgent.getRegion()->getCapability("FacebookConnect");
static std::string sFacebookConnectUrl = "https://pdp15.lindenlab.com/fbc/agent/" + gAgentID.asString(); // TEMPORARY HACK FOR FB DEMO - Cho
std::string url = sFacebookConnectUrl + route;
@ -190,25 +184,8 @@ std::string LLFacebookConnect::getFacebookConnectURL(const std::string& route)
return url;
}
void LLFacebookConnect::loadFacebookFriends()
{
llinfos << "Merov : LLFacebookConnect::loadFacebookFriends" << llendl;
const bool follow_redirects=false;
const F32 timeout=HTTP_REQUEST_EXPIRY_SECS;
LLHTTPClient::get(getFacebookConnectURL("/friend"), new LLFacebookFriendsResponder(),
LLSD(), timeout, follow_redirects);
}
void LLFacebookConnect::hideFacebookFriends()
{
llinfos << "Merov : LLFacebookConnect::hideFacebookFriends" << llendl;
// That needs to be done in llpanelpeople...
//mFacebookFriends->clear();
}
void LLFacebookConnect::connectToFacebook(const std::string& auth_code)
{
llinfos << "Merov : LLFacebookConnect::connectToFacebook" << llendl;
LLSD body;
if (!auth_code.empty())
body["code"] = auth_code;
@ -218,13 +195,11 @@ void LLFacebookConnect::connectToFacebook(const std::string& auth_code)
void LLFacebookConnect::disconnectFromFacebook()
{
llinfos << "Merov : LLFacebookConnect::disconnectFromFacebook" << llendl;
LLHTTPClient::del(getFacebookConnectURL("/connection"), new LLFacebookDisconnectResponder());
}
void LLFacebookConnect::tryToReconnectToFacebook()
{
llinfos << "Merov : LLFacebookConnect::tryToReconnectToFacebook" << llendl;
if (!mConnectedToFbc)
{
const bool follow_redirects=false;
@ -236,54 +211,35 @@ void LLFacebookConnect::tryToReconnectToFacebook()
void LLFacebookConnect::getConnectionToFacebook()
{
llinfos << "Merov : LLFacebookConnect::getConnectionToFacebook" << llendl;
const bool follow_redirects=false;
const F32 timeout=HTTP_REQUEST_EXPIRY_SECS;
LLHTTPClient::get(getFacebookConnectURL("/connection"), new LLFacebookConnectedResponder(true),
LLSD(), timeout, follow_redirects);
}
void LLFacebookConnect::showFacebookFriends(const LLSD& friends)
void LLFacebookConnect::loadFacebookFriends()
{
/* All that needs to be rewritten a different way */
// FOR TESTING ONLY!! Print out the data in the log
//mFacebookFriends->clear();
//LLPersonTabModel::tab_type tab_type;
LLAvatarTracker& avatar_tracker = LLAvatarTracker::instance();
llinfos << "Merov : LLFacebookConnect::showFacebookFriends" << llendl;
for (LLSD::map_const_iterator i = friends.beginMap(); i != friends.endMap(); ++i)
{
std::string name = i->second["name"].asString();
LLUUID agent_id = i->second.has("agent_id") ? i->second["agent_id"].asUUID() : LLUUID(NULL);
//add to avatar list
//mFacebookFriends->addNewItem(agent_id, name, false);
//FB+SL but not SL friend
bool is_SL_friend = false;
if(agent_id.notNull() && !avatar_tracker.isBuddy(agent_id))
{
//tab_type = LLPersonTabModel::FB_SL_NON_SL_FRIEND;
is_SL_friend = true;
}
//FB only friend
else
{
//tab_type = LLPersonTabModel::FB_ONLY_FRIEND;
is_SL_friend = false;
}
llinfos << "Merov : LLFacebookConnect : agent_id = " << agent_id << ", name = " << name << ", SL friend = " << is_SL_friend << llendl;
//Add to person tab model
/*
LLPersonTabModel * person_tab_model = dynamic_cast<LLPersonTabModel *>(mPersonFolderView->getPersonTabModelByIndex(tab_type));
if(person_tab_model)
{
addParticipantToModel(person_tab_model, agent_id, name);
}
*/
}
const bool follow_redirects=false;
const F32 timeout=HTTP_REQUEST_EXPIRY_SECS;
LLHTTPClient::get(getFacebookConnectURL("/friend"), new LLFacebookFriendsResponder(),
LLSD(), timeout, follow_redirects);
}
void LLFacebookConnect::storeContent(const LLSD& content)
{
mGeneration++;
mContent = content;
}
const LLSD& LLFacebookConnect::getContent() const
{
return mContent;
}
void LLFacebookConnect::clearContent()
{
mGeneration++;
mContent = LLSD();
}

View File

@ -40,24 +40,21 @@ class LLFacebookConnect : public LLSingleton<LLFacebookConnect>
{
LOG_CLASS(LLFacebookConnect);
public:
/*
* Performs initial setup, by requesting config data from the web service if
* it has not already been received.
*/
void init();
void loadFacebookFriends();
void hideFacebookFriends();
void connectToFacebook(const std::string& auth_code = "");
void disconnectFromFacebook();
void tryToReconnectToFacebook();
void getConnectionToFacebook();
void showFacebookFriends(const LLSD& friends);
void loadFacebookFriends();
void clearContent();
void storeContent(const LLSD& content);
const LLSD& getContent() const;
void setConnected(bool connected) { mConnectedToFbc = connected; }
bool getConnected() { return mConnectedToFbc; }
S32 generation() { return mGeneration; }
private:
friend class LLSingleton<LLFacebookConnect>;
@ -67,6 +64,8 @@ private:
std::string getFacebookConnectURL(const std::string& route = "");
bool mConnectedToFbc;
LLSD mContent;
S32 mGeneration;
};
#endif // LL_LLFACEBOOKCONNECT_H

View File

@ -555,12 +555,13 @@ LLPanelPeople::LLPanelPeople()
mNearbyList(NULL),
mRecentList(NULL),
mGroupList(NULL),
mMiniMap(NULL)
mMiniMap(NULL),
mFacebookListGeneration(0)
{
mFriendListUpdater = new LLFriendListUpdater(boost::bind(&LLPanelPeople::updateFriendList, this));
mNearbyListUpdater = new LLNearbyListUpdater(boost::bind(&LLPanelPeople::updateNearbyList, this));
mRecentListUpdater = new LLRecentListUpdater(boost::bind(&LLPanelPeople::updateRecentList, this));
mFbcTestListUpdater = new LLFbcTestListUpdater(boost::bind(&LLPanelPeople::updateFbcTestList, this));
mFacebookListUpdater = new LLFbcTestListUpdater(boost::bind(&LLPanelPeople::updateFacebookList, this));
mButtonsUpdater = new LLButtonsUpdater(boost::bind(&LLPanelPeople::updateButtons, this));
mCommitCallbackRegistrar.add("People.loginFBC", boost::bind(&LLPanelPeople::onLoginFbcButtonClicked, this));
@ -595,7 +596,7 @@ LLPanelPeople::~LLPanelPeople()
delete mNearbyListUpdater;
delete mFriendListUpdater;
delete mRecentListUpdater;
delete mFbcTestListUpdater;
delete mFacebookListUpdater;
if(LLVoiceClient::instanceExists())
{
@ -683,13 +684,17 @@ BOOL LLPanelPeople::postBuild()
mAllFriendList->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu);
mOnlineFriendList->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu);
//===Temporary ========================================================================
LLPanel * social_tab = getChild<LLPanel>(FBCTEST_TAB_NAME);
mFacebookFriends = social_tab->getChild<LLSocialList>("facebook_friends");
social_tab->setVisibleCallback(boost::bind(&Updater::setActive, mFbcTestListUpdater, _2));
// Note: we use the same updater for both test lists (brute force but OK since it's temporary)
social_tab->setVisibleCallback(boost::bind(&Updater::setActive, mFacebookListUpdater, _2));
//===Test START========================================================================
LLPanel * socialtwo_tab = getChild<LLPanel>(FBCTESTTWO_TAB_NAME);
socialtwo_tab->setVisibleCallback(boost::bind(&Updater::setActive, mFacebookListUpdater, _2));
//Create folder view
LLPersonModelCommon* base_item = new LLPersonModelCommon(mPersonFolderViewModel);
@ -911,7 +916,7 @@ void LLPanelPeople::updateRecentList()
mRecentList->setDirty();
}
void LLPanelPeople::updateFbcTestList()
void LLPanelPeople::updateFacebookList()
{
if (mTryToConnectToFbc)
{
@ -922,8 +927,45 @@ void LLPanelPeople::updateFbcTestList()
mTryToConnectToFbc = false;
// stop updating
mFbcTestListUpdater->setActive(false);
mFacebookListUpdater->setActive(false);
}
if (LLFacebookConnect::instance().generation() != mFacebookListGeneration)
{
mFacebookListGeneration = LLFacebookConnect::instance().generation();
LLSD friends = LLFacebookConnect::instance().getContent();
mFacebookFriends->clear();
LLPersonTabModel::tab_type tab_type;
LLAvatarTracker& avatar_tracker = LLAvatarTracker::instance();
for (LLSD::map_const_iterator i = friends.beginMap(); i != friends.endMap(); ++i)
{
std::string name = i->second["name"].asString();
LLUUID agent_id = i->second.has("agent_id") ? i->second["agent_id"].asUUID() : LLUUID(NULL);
//add to avatar list
mFacebookFriends->addNewItem(agent_id, name, false);
//FB+SL but not SL friend
if (agent_id.notNull() && !avatar_tracker.isBuddy(agent_id))
{
tab_type = LLPersonTabModel::FB_SL_NON_SL_FRIEND;
}
//FB only friend
else
{
tab_type = LLPersonTabModel::FB_ONLY_FRIEND;
}
//Add to person tab model
LLPersonTabModel * person_tab_model = dynamic_cast<LLPersonTabModel *>(mPersonFolderView->getPersonTabModelByIndex(tab_type));
if (person_tab_model)
{
addParticipantToModel(person_tab_model, agent_id, name);
}
}
}
}
void LLPanelPeople::updateButtons()

View File

@ -88,7 +88,7 @@ private:
void updateFriendList();
void updateNearbyList();
void updateRecentList();
void updateFbcTestList();
void updateFacebookList();
bool isItemsFreeOfFriends(const uuid_vec_t& uuids);
@ -152,6 +152,7 @@ private:
LLAvatarList* mRecentList;
LLGroupList* mGroupList;
LLSocialList* mFacebookFriends;
S32 mFacebookListGeneration;
LLNetMap* mMiniMap;
std::vector<std::string> mSavedOriginalFilters;
@ -162,7 +163,7 @@ private:
Updater* mFriendListUpdater;
Updater* mNearbyListUpdater;
Updater* mRecentListUpdater;
Updater* mFbcTestListUpdater;
Updater* mFacebookListUpdater;
Updater* mButtonsUpdater;
LLMenuButton* mFBCGearButton;
LLHandle< LLFloater > mPicker;