Pull merge from lindenlab/viewer-fbc
commit
8494e04a75
|
|
@ -41,6 +41,7 @@
|
|||
#include "llevents.h"
|
||||
|
||||
boost::scoped_ptr<LLEventPump> LLFacebookConnect::sStateWatcher(new LLEventStream("FacebookConnectState"));
|
||||
boost::scoped_ptr<LLEventPump> LLFacebookConnect::sContentWatcher(new LLEventStream("FacebookConnectContent"));
|
||||
|
||||
// Local functions
|
||||
void log_facebook_connect_error(const std::string& request, U32 status, const std::string& reason, const std::string& code, const std::string& description)
|
||||
|
|
@ -133,11 +134,6 @@ public:
|
|||
LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_POSTING);
|
||||
}
|
||||
|
||||
LLFacebookShareResponder(LLFacebookConnect::share_callback_t cb) : mShareCallback(cb)
|
||||
{
|
||||
LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_POSTING);
|
||||
}
|
||||
|
||||
virtual void completed(U32 status, const std::string& reason, const LLSD& content)
|
||||
{
|
||||
if (isGoodStatus(status))
|
||||
|
|
@ -145,18 +141,17 @@ public:
|
|||
toast_user_for_success();
|
||||
LL_DEBUGS("FacebookConnect") << "Post successful. content: " << content << LL_ENDL;
|
||||
|
||||
LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_CONNECTED);
|
||||
LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_POSTED);
|
||||
}
|
||||
else if (status == 404)
|
||||
{
|
||||
LLFacebookConnect::instance().connectToFacebook();
|
||||
}
|
||||
else
|
||||
{
|
||||
LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_POST_FAILED);
|
||||
log_facebook_connect_error("Share", status, reason, content.get("error_code"), content.get("error_description"));
|
||||
}
|
||||
|
||||
if (mShareCallback)
|
||||
{
|
||||
mShareCallback(isGoodStatus(status));
|
||||
}
|
||||
}
|
||||
|
||||
void completedHeader(U32 status, const std::string& reason, const LLSD& content)
|
||||
|
|
@ -166,9 +161,6 @@ public:
|
|||
LLFacebookConnect::instance().openFacebookWeb(content["location"]);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
LLFacebookConnect::share_callback_t mShareCallback;
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -342,7 +334,7 @@ void LLFacebookConnect::postCheckin(const std::string& location, const std::stri
|
|||
body["message"] = message;
|
||||
|
||||
// Note: we can use that route for different publish action. We should be able to use the same responder.
|
||||
LLHTTPClient::post(getFacebookConnectURL("/share/checkin"), body, new LLFacebookShareResponder(mPostCheckinCallback));
|
||||
LLHTTPClient::post(getFacebookConnectURL("/share/checkin"), body, new LLFacebookShareResponder());
|
||||
}
|
||||
|
||||
void LLFacebookConnect::sharePhoto(const std::string& image_url, const std::string& caption)
|
||||
|
|
@ -405,7 +397,7 @@ void LLFacebookConnect::sharePhoto(LLPointer<LLImageFormatted> image, const std:
|
|||
memcpy(data, body.str().data(), size);
|
||||
|
||||
// Note: we can use that route for different publish action. We should be able to use the same responder.
|
||||
LLHTTPClient::postRaw(getFacebookConnectURL("/share/photo"), data, size, new LLFacebookShareResponder(mSharePhotoCallback), headers);
|
||||
LLHTTPClient::postRaw(getFacebookConnectURL("/share/photo"), data, size, new LLFacebookShareResponder(), headers);
|
||||
}
|
||||
|
||||
void LLFacebookConnect::updateStatus(const std::string& message)
|
||||
|
|
@ -414,7 +406,7 @@ void LLFacebookConnect::updateStatus(const std::string& message)
|
|||
body["message"] = message;
|
||||
|
||||
// Note: we can use that route for different publish action. We should be able to use the same responder.
|
||||
LLHTTPClient::post(getFacebookConnectURL("/share/wall"), body, new LLFacebookShareResponder(mUpdateStatusCallback));
|
||||
LLHTTPClient::post(getFacebookConnectURL("/share/wall"), body, new LLFacebookShareResponder());
|
||||
}
|
||||
|
||||
void LLFacebookConnect::storeContent(const LLSD& content)
|
||||
|
|
@ -422,10 +414,7 @@ void LLFacebookConnect::storeContent(const LLSD& content)
|
|||
mGeneration++;
|
||||
mContent = content;
|
||||
|
||||
if(mContentUpdatedCallback)
|
||||
{
|
||||
mContentUpdatedCallback();
|
||||
}
|
||||
sContentWatcher->post(content);
|
||||
}
|
||||
|
||||
const LLSD& LLFacebookConnect::getContent() const
|
||||
|
|
@ -450,12 +439,3 @@ void LLFacebookConnect::setConnectionState(LLFacebookConnect::EConnectionState c
|
|||
|
||||
mConnectionState = connection_state;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -50,12 +50,10 @@ public:
|
|||
FB_CONNECTED = 2,
|
||||
FB_CONNECTION_FAILED = 3,
|
||||
FB_POSTING = 4,
|
||||
FB_POST_FAILED = 5
|
||||
FB_POSTED = 5,
|
||||
FB_POST_FAILED = 6
|
||||
};
|
||||
|
||||
typedef boost::function<void(bool ok)> share_callback_t;
|
||||
typedef boost::function<void()> content_updated_callback_t;
|
||||
|
||||
void connectToFacebook(const std::string& auth_code = ""); // Initiate the complete FB connection. Please use checkConnectionToFacebook() in normal use.
|
||||
void disconnectFromFacebook(); // Disconnect from the FBC service.
|
||||
void checkConnectionToFacebook(bool auto_connect = false); // Check if an access token is available on the FBC service. If not, call connectToFacebook().
|
||||
|
|
@ -66,17 +64,12 @@ public:
|
|||
void sharePhoto(LLPointer<LLImageFormatted> image, const std::string& caption);
|
||||
void updateStatus(const std::string& message);
|
||||
|
||||
void setPostCheckinCallback(share_callback_t cb) { mPostCheckinCallback = cb; }
|
||||
void setSharePhotoCallback(share_callback_t cb) { mSharePhotoCallback = cb; }
|
||||
void setUpdateStatusCallback(share_callback_t cb) { mUpdateStatusCallback = cb; }
|
||||
void setContentUpdatedCallback(content_updated_callback_t cb) { mContentUpdatedCallback = cb;}
|
||||
|
||||
void clearContent();
|
||||
void storeContent(const LLSD& content);
|
||||
const LLSD& getContent() const;
|
||||
|
||||
void setConnectionState(EConnectionState connection_state);
|
||||
bool isConnected() { return ((mConnectionState == FB_CONNECTED) || (mConnectionState == FB_POSTING)); }
|
||||
bool isConnected() { return ((mConnectionState == FB_CONNECTED) || (mConnectionState == FB_POSTING) || (mConnectionState == FB_POSTED)); }
|
||||
EConnectionState getConnectionState() { return mConnectionState; }
|
||||
S32 generation() { return mGeneration; }
|
||||
|
||||
|
|
@ -93,12 +86,8 @@ private:
|
|||
LLSD mContent;
|
||||
S32 mGeneration;
|
||||
|
||||
share_callback_t mPostCheckinCallback;
|
||||
share_callback_t mSharePhotoCallback;
|
||||
share_callback_t mUpdateStatusCallback;
|
||||
content_updated_callback_t mContentUpdatedCallback;
|
||||
|
||||
static boost::scoped_ptr<LLEventPump> sStateWatcher;
|
||||
static boost::scoped_ptr<LLEventPump> sContentWatcher;
|
||||
};
|
||||
|
||||
#endif // LL_LLFACEBOOKCONNECT_H
|
||||
|
|
|
|||
|
|
@ -96,37 +96,57 @@ void LLSocialStatusPanel::draw()
|
|||
|
||||
void LLSocialStatusPanel::onSend()
|
||||
{
|
||||
if (mMessageTextEditor)
|
||||
LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialStatusPanel"); // just in case it is already listening
|
||||
LLEventPumps::instance().obtain("FacebookConnectState").listen("LLSocialStatusPanel", boost::bind(&LLSocialStatusPanel::onFacebookConnectStateChange, this, _1));
|
||||
|
||||
// Connect to Facebook if necessary and then post
|
||||
if (LLFacebookConnect::instance().isConnected())
|
||||
{
|
||||
std::string message = mMessageTextEditor->getValue().asString();
|
||||
if (!message.empty())
|
||||
{
|
||||
// Connect to Facebook if necessary and then post
|
||||
if (LLFacebookConnect::instance().isConnected())
|
||||
{
|
||||
LLFacebookConnect::instance().updateStatus(message);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLEventPumps::instance().obtain("FacebookConnectState").listen("LLSocialStatusPanel", boost::bind(&LLSocialStatusPanel::onConnectedToFacebook, this, _1, message));
|
||||
LLFacebookConnect::instance().checkConnectionToFacebook(true);
|
||||
}
|
||||
}
|
||||
sendStatus();
|
||||
}
|
||||
else
|
||||
{
|
||||
LLFacebookConnect::instance().checkConnectionToFacebook(true);
|
||||
}
|
||||
}
|
||||
|
||||
bool LLSocialStatusPanel::onConnectedToFacebook(const LLSD& data, const std::string& message)
|
||||
bool LLSocialStatusPanel::onFacebookConnectStateChange(const LLSD& data)
|
||||
{
|
||||
if (data.get("enum").asInteger() == LLFacebookConnect::FB_CONNECTED)
|
||||
switch (data.get("enum").asInteger())
|
||||
{
|
||||
LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialStatusPanel");
|
||||
|
||||
LLFacebookConnect::instance().updateStatus(message);
|
||||
case LLFacebookConnect::FB_CONNECTED:
|
||||
sendStatus();
|
||||
break;
|
||||
|
||||
case LLFacebookConnect::FB_POSTED:
|
||||
LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialStatusPanel");
|
||||
clearAndClose();
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLSocialStatusPanel::sendStatus()
|
||||
{
|
||||
std::string message = mMessageTextEditor->getValue().asString();
|
||||
if (!message.empty())
|
||||
{
|
||||
LLFacebookConnect::instance().updateStatus(message);
|
||||
}
|
||||
}
|
||||
|
||||
void LLSocialStatusPanel::clearAndClose()
|
||||
{
|
||||
mMessageTextEditor->setValue("");
|
||||
|
||||
LLFloater* floater = getParentByType<LLFloater>();
|
||||
if (floater)
|
||||
{
|
||||
floater->closeFloater();
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////
|
||||
//LLSocialPhotoPanel///////
|
||||
///////////////////////////
|
||||
|
|
@ -258,9 +278,44 @@ void LLSocialPhotoPanel::onClickNewSnapshot()
|
|||
|
||||
void LLSocialPhotoPanel::onSend()
|
||||
{
|
||||
std::string caption = mCaptionTextBox->getValue().asString();
|
||||
bool add_location = mLocationCheckbox->getValue().asBoolean();
|
||||
LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialPhotoPanel"); // just in case it is already listening
|
||||
LLEventPumps::instance().obtain("FacebookConnectState").listen("LLSocialPhotoPanel", boost::bind(&LLSocialPhotoPanel::onFacebookConnectStateChange, this, _1));
|
||||
|
||||
// Connect to Facebook if necessary and then post
|
||||
if (LLFacebookConnect::instance().isConnected())
|
||||
{
|
||||
sendPhoto();
|
||||
}
|
||||
else
|
||||
{
|
||||
LLFacebookConnect::instance().checkConnectionToFacebook(true);
|
||||
}
|
||||
}
|
||||
|
||||
bool LLSocialPhotoPanel::onFacebookConnectStateChange(const LLSD& data)
|
||||
{
|
||||
switch (data.get("enum").asInteger())
|
||||
{
|
||||
case LLFacebookConnect::FB_CONNECTED:
|
||||
sendPhoto();
|
||||
break;
|
||||
|
||||
case LLFacebookConnect::FB_POSTED:
|
||||
LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialPhotoPanel");
|
||||
clearAndClose();
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLSocialPhotoPanel::sendPhoto()
|
||||
{
|
||||
// Get the caption
|
||||
std::string caption = mCaptionTextBox->getValue().asString();
|
||||
|
||||
// Add the location if required
|
||||
bool add_location = mLocationCheckbox->getValue().asBoolean();
|
||||
if (add_location)
|
||||
{
|
||||
LLSLURL slurl;
|
||||
|
|
@ -271,32 +326,24 @@ void LLSocialPhotoPanel::onSend()
|
|||
caption = caption + " " + slurl.getSLURLString();
|
||||
}
|
||||
|
||||
// Get the image
|
||||
LLSnapshotLivePreview* previewp = getPreviewView();
|
||||
|
||||
// Connect to Facebook if necessary and then post
|
||||
if (LLFacebookConnect::instance().isConnected())
|
||||
{
|
||||
LLFacebookConnect::instance().sharePhoto(previewp->getFormattedImage(), caption);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLEventPumps::instance().obtain("FacebookConnectState").listen("LLSocialPhotoPanel", boost::bind(&LLSocialPhotoPanel::onConnectedToFacebook, this, _1, previewp->getFormattedImage(), caption));
|
||||
LLFacebookConnect::instance().checkConnectionToFacebook(true);
|
||||
}
|
||||
// Post to Facebook
|
||||
LLFacebookConnect::instance().sharePhoto(previewp->getFormattedImage(), caption);
|
||||
|
||||
updateControls();
|
||||
}
|
||||
|
||||
bool LLSocialPhotoPanel::onConnectedToFacebook(const LLSD& data, LLPointer<LLImageFormatted> image, const std::string& caption)
|
||||
void LLSocialPhotoPanel::clearAndClose()
|
||||
{
|
||||
if (data.get("enum").asInteger() == LLFacebookConnect::FB_CONNECTED)
|
||||
{
|
||||
LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialPhotoPanel");
|
||||
|
||||
LLFacebookConnect::instance().sharePhoto(image, caption);
|
||||
}
|
||||
mCaptionTextBox->setValue("");
|
||||
|
||||
return false;
|
||||
LLFloater* floater = getParentByType<LLFloater>();
|
||||
if (floater)
|
||||
{
|
||||
floater->closeFloater();
|
||||
}
|
||||
}
|
||||
|
||||
void LLSocialPhotoPanel::updateControls()
|
||||
|
|
@ -473,6 +520,39 @@ void LLSocialCheckinPanel::draw()
|
|||
}
|
||||
|
||||
void LLSocialCheckinPanel::onSend()
|
||||
{
|
||||
LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialCheckinPanel"); // just in case it is already listening
|
||||
LLEventPumps::instance().obtain("FacebookConnectState").listen("LLSocialCheckinPanel", boost::bind(&LLSocialCheckinPanel::onFacebookConnectStateChange, this, _1));
|
||||
|
||||
// Connect to Facebook if necessary and then post
|
||||
if (LLFacebookConnect::instance().isConnected())
|
||||
{
|
||||
sendCheckin();
|
||||
}
|
||||
else
|
||||
{
|
||||
LLFacebookConnect::instance().checkConnectionToFacebook(true);
|
||||
}
|
||||
}
|
||||
|
||||
bool LLSocialCheckinPanel::onFacebookConnectStateChange(const LLSD& data)
|
||||
{
|
||||
switch (data.get("enum").asInteger())
|
||||
{
|
||||
case LLFacebookConnect::FB_CONNECTED:
|
||||
sendCheckin();
|
||||
break;
|
||||
|
||||
case LLFacebookConnect::FB_POSTED:
|
||||
LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialCheckinPanel");
|
||||
clearAndClose();
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLSocialCheckinPanel::sendCheckin()
|
||||
{
|
||||
// Get the location SLURL
|
||||
LLSLURL slurl;
|
||||
|
|
@ -493,28 +573,19 @@ void LLSocialCheckinPanel::onSend()
|
|||
// Get the caption
|
||||
std::string caption = getChild<LLUICtrl>("place_caption")->getValue().asString();
|
||||
|
||||
// Connect to Facebook if necessary and then post
|
||||
if (LLFacebookConnect::instance().isConnected())
|
||||
{
|
||||
LLFacebookConnect::instance().postCheckin(slurl_string, region_name, description, map_url, caption);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLEventPumps::instance().obtain("FacebookConnectState").listen("LLSocialCheckinPanel", boost::bind(&LLSocialCheckinPanel::onConnectedToFacebook, this, _1, slurl_string, region_name, description, map_url, caption));
|
||||
LLFacebookConnect::instance().checkConnectionToFacebook(true);
|
||||
}
|
||||
// Post to Facebook
|
||||
LLFacebookConnect::instance().postCheckin(slurl_string, region_name, description, map_url, caption);
|
||||
}
|
||||
|
||||
bool LLSocialCheckinPanel::onConnectedToFacebook(const LLSD& data, const std::string& location, const std::string& name, const std::string& description, const std::string& picture, const std::string& message)
|
||||
void LLSocialCheckinPanel::clearAndClose()
|
||||
{
|
||||
if (data.get("enum").asInteger() == LLFacebookConnect::FB_CONNECTED)
|
||||
{
|
||||
LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialCheckinPanel");
|
||||
|
||||
LLFacebookConnect::instance().postCheckin(location, name, description, picture, message);
|
||||
}
|
||||
getChild<LLUICtrl>("place_caption")->setValue("");
|
||||
|
||||
return false;
|
||||
LLFloater* floater = getParentByType<LLFloater>();
|
||||
if (floater)
|
||||
{
|
||||
floater->closeFloater();
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////
|
||||
|
|
@ -602,6 +673,8 @@ void LLFloaterSocial::draw()
|
|||
mStatusLoadingIndicator->setVisible(true);
|
||||
break;
|
||||
case LLFacebookConnect::FB_CONNECTED:
|
||||
break;
|
||||
case LLFacebookConnect::FB_POSTED:
|
||||
break;
|
||||
case LLFacebookConnect::FB_CONNECTION_FAILED:
|
||||
case LLFacebookConnect::FB_POST_FAILED:
|
||||
|
|
|
|||
|
|
@ -42,7 +42,10 @@ public:
|
|||
BOOL postBuild();
|
||||
void draw();
|
||||
void onSend();
|
||||
bool onConnectedToFacebook(const LLSD& data, const std::string& message);
|
||||
bool onFacebookConnectStateChange(const LLSD& data);
|
||||
|
||||
void sendStatus();
|
||||
void clearAndClose();
|
||||
|
||||
private:
|
||||
LLUICtrl* mMessageTextEditor;
|
||||
|
|
@ -62,7 +65,10 @@ public:
|
|||
void onVisibilityChange(const LLSD& new_visibility);
|
||||
void onClickNewSnapshot();
|
||||
void onSend();
|
||||
bool onConnectedToFacebook(const LLSD& data, LLPointer<LLImageFormatted> image, const std::string& caption);
|
||||
bool onFacebookConnectStateChange(const LLSD& data);
|
||||
|
||||
void sendPhoto();
|
||||
void clearAndClose();
|
||||
|
||||
void updateControls();
|
||||
void updateResolution(BOOL do_update);
|
||||
|
|
@ -94,7 +100,10 @@ public:
|
|||
BOOL postBuild();
|
||||
void draw();
|
||||
void onSend();
|
||||
bool onConnectedToFacebook(const LLSD& data, const std::string& location, const std::string& name, const std::string& description, const std::string& picture, const std::string& message);
|
||||
bool onFacebookConnectStateChange(const LLSD& data);
|
||||
|
||||
void sendCheckin();
|
||||
void clearAndClose();
|
||||
|
||||
private:
|
||||
std::string mMapUrl;
|
||||
|
|
|
|||
|
|
@ -781,7 +781,7 @@ void LLPanelPeople::updateFriendList()
|
|||
showFriendsAccordionsIfNeeded();
|
||||
}
|
||||
|
||||
void LLPanelPeople::updateSuggestedFriendList()
|
||||
bool LLPanelPeople::updateSuggestedFriendList()
|
||||
{
|
||||
if (LLFacebookConnect::instance().generation() != mFacebookListGeneration)
|
||||
{
|
||||
|
|
@ -814,6 +814,8 @@ void LLPanelPeople::updateSuggestedFriendList()
|
|||
mSuggestedFriends->setDirty(true, !mSuggestedFriends->filterHasMatches());
|
||||
showFriendsAccordionsIfNeeded();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLPanelPeople::updateNearbyList()
|
||||
|
|
@ -855,7 +857,8 @@ void LLPanelPeople::updateFacebookList(bool visible)
|
|||
{
|
||||
if (visible)
|
||||
{
|
||||
LLFacebookConnect::instance().setContentUpdatedCallback(boost::bind(&LLPanelPeople::updateSuggestedFriendList, this));
|
||||
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)
|
||||
{
|
||||
|
|
@ -866,6 +869,7 @@ void LLPanelPeople::updateFacebookList(bool visible)
|
|||
}
|
||||
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();
|
||||
}
|
||||
|
|
@ -878,7 +882,7 @@ void LLPanelPeople::updateFacebookList(bool visible)
|
|||
}
|
||||
else
|
||||
{
|
||||
LLFacebookConnect::instance().setContentUpdatedCallback(NULL);
|
||||
LLEventPumps::instance().obtain("FacebookConnectContent").stopListening("LLPanelPeople");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ private:
|
|||
// methods indirectly called by the updaters
|
||||
void updateFriendListHelpText();
|
||||
void updateFriendList();
|
||||
void updateSuggestedFriendList();
|
||||
bool updateSuggestedFriendList();
|
||||
void updateNearbyList();
|
||||
void updateRecentList();
|
||||
void updateFacebookList(bool visible);
|
||||
|
|
|
|||
Loading…
Reference in New Issue