diff options
| author | Gilbert Gonzales <gilbert@lindenlab.com> | 2013-08-09 18:31:10 -0700 | 
|---|---|---|
| committer | Gilbert Gonzales <gilbert@lindenlab.com> | 2013-08-09 18:31:10 -0700 | 
| commit | 481abb13812214d7d5f1124f8eb80f1cc1b08c19 (patch) | |
| tree | b461c3658a5962485f3ddf3de720d0a1be7aeba2 | |
| parent | 63687148068991008a18d9b500740108afcba932 (diff) | |
ACME 824: Suggested Friends do not repopulate if you disconnect and reconnect to Facebook API in same viewer session
| -rw-r--r-- | indra/newview/llfacebookconnect.cpp | 47 | ||||
| -rw-r--r-- | indra/newview/llfacebookconnect.h | 6 | ||||
| -rwxr-xr-x | indra/newview/llpanelpeople.cpp | 34 | 
3 files changed, 58 insertions, 29 deletions
| diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index bdc17773d7..5551acff0d 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -197,9 +197,11 @@ public:  		{  			LL_DEBUGS("FacebookConnect") << "Disconnect successful. content: " << content << LL_ENDL; -			// Clear all facebook stuff -            LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_NOT_CONNECTED); +			// Clear data +			LLFacebookConnect::instance().clearInfo();  			LLFacebookConnect::instance().clearContent(); +			//Notify state change +            LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_NOT_CONNECTED);  		}  		else  		{ @@ -320,7 +322,9 @@ LLFacebookConnect::LLFacebookConnect()  :	mConnectionState(FB_NOT_CONNECTED),  	mConnected(false),  	mInfo(), -    mContent() +    mContent(), +	mRefreshInfo(false), +	mRefreshContent(false)  {  } @@ -388,18 +392,24 @@ void LLFacebookConnect::checkConnectionToFacebook(bool auto_connect)  void LLFacebookConnect::loadFacebookInfo()  { -	const bool follow_redirects = false; -	const F32 timeout = HTTP_REQUEST_EXPIRY_SECS; -	LLHTTPClient::get(getFacebookConnectURL("/info"), new LLFacebookInfoResponder(), -		LLSD(), timeout, follow_redirects); +	if(mRefreshInfo) +	{ +		const bool follow_redirects = false; +		const F32 timeout = HTTP_REQUEST_EXPIRY_SECS; +		LLHTTPClient::get(getFacebookConnectURL("/info"), new LLFacebookInfoResponder(), +			LLSD(), timeout, follow_redirects); +	}  }  void LLFacebookConnect::loadFacebookFriends()  { -	const bool follow_redirects = false; -	const F32 timeout = HTTP_REQUEST_EXPIRY_SECS; -	LLHTTPClient::get(getFacebookConnectURL("/friends"), new LLFacebookFriendsResponder(), -					  LLSD(), timeout, follow_redirects); +	if(mRefreshContent) +	{ +		const bool follow_redirects = false; +		const F32 timeout = HTTP_REQUEST_EXPIRY_SECS; +		LLHTTPClient::get(getFacebookConnectURL("/friends"), new LLFacebookFriendsResponder(), +			LLSD(), timeout, follow_redirects); +	}  }  void LLFacebookConnect::postCheckin(const std::string& location, const std::string& name, const std::string& description, const std::string& image, const std::string& message) @@ -495,6 +505,8 @@ void LLFacebookConnect::updateStatus(const std::string& message)  void LLFacebookConnect::storeInfo(const LLSD& info)  {  	mInfo = info; +	mRefreshInfo = false; +  	sInfoWatcher->post(info);  } @@ -503,9 +515,15 @@ const LLSD& LLFacebookConnect::getInfo() const  	return mInfo;  } +void LLFacebookConnect::clearInfo() +{ +	mInfo = LLSD(); +} +  void LLFacebookConnect::storeContent(const LLSD& content)  {      mContent = content; +	mRefreshContent = false;  	sContentWatcher->post(content);  } @@ -520,11 +538,18 @@ void LLFacebookConnect::clearContent()      mContent = LLSD();  } +void LLFacebookConnect::setDataDirty() +{ +	mRefreshInfo = true; +	mRefreshContent = true; +} +  void LLFacebookConnect::setConnectionState(LLFacebookConnect::EConnectionState connection_state)  {  	if(connection_state == FB_CONNECTED)  	{  		setConnected(true); +		setDataDirty();  	}  	else if(connection_state == FB_NOT_CONNECTED)  	{ diff --git a/indra/newview/llfacebookconnect.h b/indra/newview/llfacebookconnect.h index 0f005cbe24..77c26842de 100644 --- a/indra/newview/llfacebookconnect.h +++ b/indra/newview/llfacebookconnect.h @@ -69,9 +69,11 @@ public:  	void storeInfo(const LLSD& info);  	const LLSD& getInfo() const; -    void clearContent(); +	void clearInfo();  	void storeContent(const LLSD& content);      const LLSD& getContent() const; +	void clearContent(); +	void setDataDirty();      void setConnectionState(EConnectionState connection_state);  	void setConnected(bool connected); @@ -92,6 +94,8 @@ private:  	BOOL mConnected;  	LLSD mInfo;      LLSD mContent; +	bool mRefreshInfo; +	bool mRefreshContent;  	static boost::scoped_ptr<LLEventPump> sStateWatcher;  	static boost::scoped_ptr<LLEventPump> sInfoWatcher; diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 1786f73a8b..72953ec6d3 100755 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -835,12 +835,16 @@ void LLPanelPeople::updateRecentList()  bool LLPanelPeople::onConnectedToFacebook(const LLSD& data)  { -	if (data.get("enum").asInteger() == LLFacebookConnect::FB_CONNECTED) -	{ -		LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLPanelPeople"); +	LLSD::Integer connection_state = data.get("enum").asInteger(); +	if (connection_state == LLFacebookConnect::FB_CONNECTED) +	{  		LLFacebookConnect::instance().loadFacebookFriends();  	} +	else if(connection_state == LLFacebookConnect::FB_NOT_CONNECTED) +	{ +		updateSuggestedFriendList(); +	};  	return false;  } @@ -852,21 +856,16 @@ void LLPanelPeople::updateFacebookList(bool visible)  		LLEventPumps::instance().obtain("FacebookConnectContent").stopListening("LLPanelPeople"); // just in case it is already listening  		LLEventPumps::instance().obtain("FacebookConnectContent").listen("LLPanelPeople", boost::bind(&LLPanelPeople::updateSuggestedFriendList, this)); -		if (mTryToConnectToFbc) -		{ -			// try to reconnect to facebook! -			if (LLFacebookConnect::instance().isConnected()) -			{ -				LLFacebookConnect::instance().loadFacebookFriends(); -			} -			else -			{ -				LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLPanelPeople"); // just in case it is already listening -				LLEventPumps::instance().obtain("FacebookConnectState").listen("LLPanelPeople", boost::bind(&LLPanelPeople::onConnectedToFacebook, this, _1)); -				LLFacebookConnect::instance().checkConnectionToFacebook(); -			} +		LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLPanelPeople"); // just in case it is already listening +		LLEventPumps::instance().obtain("FacebookConnectState").listen("LLPanelPeople", boost::bind(&LLPanelPeople::onConnectedToFacebook, this, _1)); -			// don't try again +		if (LLFacebookConnect::instance().isConnected()) +		{ +			LLFacebookConnect::instance().loadFacebookFriends(); +		} +		else if(mTryToConnectToFbc) +		{ +			LLFacebookConnect::instance().checkConnectionToFacebook();  			mTryToConnectToFbc = false;  		} @@ -874,6 +873,7 @@ void LLPanelPeople::updateFacebookList(bool visible)  	}  	else  	{ +		LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLPanelPeople");  		LLEventPumps::instance().obtain("FacebookConnectContent").stopListening("LLPanelPeople");  	}  } | 
