X-Grid Protocol resolution support
This commit is contained in:
@@ -1133,6 +1133,15 @@ std::string LLUrlEntryPlace::getLabel(const std::string &url, const LLUrlLabelCa
|
|||||||
std::string y = path_array[1];
|
std::string y = path_array[1];
|
||||||
return location + " (" + x + "," + y + ")";
|
return location + " (" + x + "," + y + ")";
|
||||||
}
|
}
|
||||||
|
else if (path_parts > 3) // xgrid, show as grid: place(x, y, z)
|
||||||
|
{
|
||||||
|
auto place = unescapeUrl(path_array[1].asStringRef());
|
||||||
|
const auto& x = path_array[2].asStringRef();
|
||||||
|
const auto& y = path_array[3].asStringRef();
|
||||||
|
location += ": " + place + " (" + x + ',' + y;
|
||||||
|
if (path_parts == 5) location += ',' + path_array[4].asStringRef();
|
||||||
|
return location + ')';
|
||||||
|
}
|
||||||
|
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
@@ -1140,6 +1149,12 @@ std::string LLUrlEntryPlace::getLabel(const std::string &url, const LLUrlLabelCa
|
|||||||
std::string LLUrlEntryPlace::getLocation(const std::string &url) const
|
std::string LLUrlEntryPlace::getLocation(const std::string &url) const
|
||||||
{
|
{
|
||||||
// return the part of the Url after secondlife:// part
|
// return the part of the Url after secondlife:// part
|
||||||
|
const auto uri = LLURI(url);
|
||||||
|
bool xgrid = boost::algorithm::starts_with(uri.scheme(), "x-grid");
|
||||||
|
if (xgrid)
|
||||||
|
{
|
||||||
|
return ::getStringAfterToken(url, "region/");
|
||||||
|
}
|
||||||
return ::getStringAfterToken(url, "://");
|
return ::getStringAfterToken(url, "://");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1149,7 +1164,7 @@ std::string LLUrlEntryPlace::getLocation(const std::string &url) const
|
|||||||
//
|
//
|
||||||
LLUrlEntryRegion::LLUrlEntryRegion()
|
LLUrlEntryRegion::LLUrlEntryRegion()
|
||||||
{
|
{
|
||||||
mPattern = boost::regex("secondlife:///app/region/[^/\\s]+(/\\d+)?(/\\d+)?(/\\d+)?/?",
|
mPattern = boost::regex(X_GRID_OR_SECONDLIFE_HEADER_REGEX"//app/region/[^/\\s]+(/\\d+)?(/\\d+)?(/\\d+)?/?",
|
||||||
boost::regex::perl|boost::regex::icase);
|
boost::regex::perl|boost::regex::icase);
|
||||||
mMenuName = "menu_url_slurl.xml";
|
mMenuName = "menu_url_slurl.xml";
|
||||||
mTooltip = LLTrans::getString("TooltipSLURL");
|
mTooltip = LLTrans::getString("TooltipSLURL");
|
||||||
@@ -1165,30 +1180,37 @@ std::string LLUrlEntryRegion::getLabel(const std::string &url, const LLUrlLabelC
|
|||||||
// - secondlife:///app/region/Place
|
// - secondlife:///app/region/Place
|
||||||
//
|
//
|
||||||
|
|
||||||
LLSD path_array = LLURI(url).pathArray();
|
const auto uri = LLURI(url);
|
||||||
|
LLSD path_array = uri.pathArray();
|
||||||
S32 path_parts = path_array.size();
|
S32 path_parts = path_array.size();
|
||||||
|
|
||||||
if (path_parts < 3) // no region name
|
bool xgrid = boost::algorithm::starts_with(uri.scheme(), "x-grid");
|
||||||
|
auto i = xgrid ? 3 : 2;
|
||||||
|
|
||||||
|
if (path_parts < i+1) // no region name
|
||||||
{
|
{
|
||||||
LL_WARNS() << "Failed to parse url [" << url << "]" << LL_ENDL;
|
LL_WARNS() << "Failed to parse url [" << url << "]" << LL_ENDL;
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string label = unescapeUrl(path_array[2]); // region name
|
std::string label =
|
||||||
|
xgrid ? unescapeUrl(path_array[0].asStringRef()) + ": " + unescapeUrl(path_array[i].asStringRef()) : // grid and region name
|
||||||
|
unescapeUrl(path_array[i].asStringRef()); // region name
|
||||||
|
|
||||||
if (path_parts > 3) // secondlife:///app/region/Place/X
|
++i;
|
||||||
|
if (path_parts > i+1) // secondlife:///app/region/Place/X
|
||||||
{
|
{
|
||||||
std::string x = path_array[3];
|
std::string x = path_array[i++];
|
||||||
label += " (" + x;
|
label += " (" + x;
|
||||||
|
|
||||||
if (path_parts > 4) // secondlife:///app/region/Place/X/Y
|
if (path_parts > i+1) // secondlife:///app/region/Place/X/Y
|
||||||
{
|
{
|
||||||
std::string y = path_array[4];
|
std::string y = path_array[i++];
|
||||||
label += "," + y;
|
label += "," + y;
|
||||||
|
|
||||||
if (path_parts > 5) // secondlife:///app/region/Place/X/Y/Z
|
if (path_parts > i+1) // secondlife:///app/region/Place/X/Y/Z
|
||||||
{
|
{
|
||||||
std::string z = path_array[5];
|
std::string z = path_array[i];
|
||||||
label = label + "," + z;
|
label = label + "," + z;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1201,8 +1223,10 @@ std::string LLUrlEntryRegion::getLabel(const std::string &url, const LLUrlLabelC
|
|||||||
|
|
||||||
std::string LLUrlEntryRegion::getLocation(const std::string &url) const
|
std::string LLUrlEntryRegion::getLocation(const std::string &url) const
|
||||||
{
|
{
|
||||||
LLSD path_array = LLURI(url).pathArray();
|
const auto uri = LLURI(url);
|
||||||
std::string region_name = unescapeUrl(path_array[2]);
|
LLSD path_array = uri.pathArray();
|
||||||
|
bool xgrid = boost::algorithm::starts_with(uri.scheme(), "x-grid");
|
||||||
|
std::string region_name = unescapeUrl(path_array[xgrid ? 3 : 2]);
|
||||||
return region_name;
|
return region_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user