Make the login screen destinations work
Syncs "location_login" from upstream LL viewer
This commit is contained in:
@@ -132,22 +132,87 @@ static std::string getDisplayString(const LLSavedLoginEntry& entry)
|
|||||||
return getDisplayString(entry.getFirstName(), entry.getLastName(), entry.getGrid(), entry.isSecondLife());
|
return getDisplayString(entry.getFirstName(), entry.getLastName(), entry.getGrid(), entry.isSecondLife());
|
||||||
}
|
}
|
||||||
|
|
||||||
class LLLoginRefreshHandler : public LLCommandHandler
|
|
||||||
|
class LLLoginLocationAutoHandler : public LLCommandHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// don't allow from external browsers
|
// don't allow from external browsers
|
||||||
LLLoginRefreshHandler() : LLCommandHandler("login_refresh", UNTRUSTED_BLOCK) { }
|
LLLoginLocationAutoHandler() : LLCommandHandler("location_login", UNTRUSTED_BLOCK) { }
|
||||||
bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web)
|
bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web)
|
||||||
{
|
{
|
||||||
if (LLStartUp::getStartupState() < STATE_LOGIN_CLEANUP)
|
if (LLStartUp::getStartupState() < STATE_LOGIN_CLEANUP)
|
||||||
{
|
{
|
||||||
LLPanelLogin::loadLoginPage();
|
if ( tokens.size() == 0 || tokens.size() > 4 )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// unescape is important - uris with spaces are escaped in this code path
|
||||||
|
// (e.g. space -> %20) and the code to log into a region doesn't support that.
|
||||||
|
const std::string region = LLURI::unescape( tokens[0].asString() );
|
||||||
|
|
||||||
|
// just region name as payload
|
||||||
|
if ( tokens.size() == 1 )
|
||||||
|
{
|
||||||
|
// region name only - slurl will end up as center of region
|
||||||
|
LLSLURL slurl(region);
|
||||||
|
LLPanelLogin::autologinToLocation(slurl);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
// region name and x coord as payload
|
||||||
|
if ( tokens.size() == 2 )
|
||||||
|
{
|
||||||
|
// invalid to only specify region and x coordinate
|
||||||
|
// slurl code will revert to same as region only, so do this anyway
|
||||||
|
LLSLURL slurl(region);
|
||||||
|
LLPanelLogin::autologinToLocation(slurl);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
// region name and x/y coord as payload
|
||||||
|
if ( tokens.size() == 3 )
|
||||||
|
{
|
||||||
|
// region and x/y specified - default z to 0
|
||||||
|
F32 xpos;
|
||||||
|
std::istringstream codec(tokens[1].asString());
|
||||||
|
codec >> xpos;
|
||||||
|
|
||||||
|
F32 ypos;
|
||||||
|
codec.clear();
|
||||||
|
codec.str(tokens[2].asString());
|
||||||
|
codec >> ypos;
|
||||||
|
|
||||||
|
const LLVector3 location(xpos, ypos, 0.0f);
|
||||||
|
LLSLURL slurl(region, location);
|
||||||
|
|
||||||
|
LLPanelLogin::autologinToLocation(slurl);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
// region name and x/y/z coord as payload
|
||||||
|
if ( tokens.size() == 4 )
|
||||||
|
{
|
||||||
|
// region and x/y/z specified - ok
|
||||||
|
F32 xpos;
|
||||||
|
std::istringstream codec(tokens[1].asString());
|
||||||
|
codec >> xpos;
|
||||||
|
|
||||||
|
F32 ypos;
|
||||||
|
codec.clear();
|
||||||
|
codec.str(tokens[2].asString());
|
||||||
|
codec >> ypos;
|
||||||
|
|
||||||
|
F32 zpos;
|
||||||
|
codec.clear();
|
||||||
|
codec.str(tokens[3].asString());
|
||||||
|
codec >> zpos;
|
||||||
|
|
||||||
|
const LLVector3 location(xpos, ypos, zpos);
|
||||||
|
LLSLURL slurl(region, location);
|
||||||
|
|
||||||
|
LLPanelLogin::autologinToLocation(slurl);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
LLLoginLocationAutoHandler gLoginLocationAutoHandler;
|
||||||
LLLoginRefreshHandler gLoginRefreshHandler;
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
// Public methods
|
// Public methods
|
||||||
@@ -653,6 +718,18 @@ void LLPanelLogin::setLocation(const LLSLURL& slurl)
|
|||||||
LLStartUp::setStartSLURL(slurl); // calls onUpdateStartSLURL, above
|
LLStartUp::setStartSLURL(slurl); // calls onUpdateStartSLURL, above
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LLPanelLogin::autologinToLocation(const LLSLURL& slurl)
|
||||||
|
{
|
||||||
|
LL_DEBUGS("AppInit")<<"automatically logging into Location "<<slurl.asString()<<LL_ENDL;
|
||||||
|
LLStartUp::setStartSLURL(slurl); // calls onUpdateStartSLURL, above
|
||||||
|
|
||||||
|
if ( LLPanelLogin::sInstance != NULL )
|
||||||
|
{
|
||||||
|
LLPanelLogin::sInstance->onClickConnect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// static
|
// static
|
||||||
void LLPanelLogin::close()
|
void LLPanelLogin::close()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ public:
|
|||||||
static void getFields(std::string& firstname, std::string& lastname, std::string& password);
|
static void getFields(std::string& firstname, std::string& lastname, std::string& password);
|
||||||
|
|
||||||
static void setLocation(const LLSLURL& slurl);
|
static void setLocation(const LLSLURL& slurl);
|
||||||
|
static void autologinToLocation(const LLSLURL& slurl);
|
||||||
|
|
||||||
/// Call when preferences that control visibility may have changed
|
/// Call when preferences that control visibility may have changed
|
||||||
static void updateLocationSelectorsVisibility();
|
static void updateLocationSelectorsVisibility();
|
||||||
|
|||||||
Reference in New Issue
Block a user