void slurlTestObject::test<2>() { LLSLURL slurl = LLSLURL("mygrid.com", "my region"); ensure_equals("grid/region - type", slurl.getType(), LLSLURL::LOCATION); ensure_equals("grid/region", slurl.getSLURLString(), "https://mygrid.com/region/my%20region/128/128/0"); slurl = LLSLURL("mygrid.com", "my region", LLVector3(1,2,3)); ensure_equals("grid/region/vector - type", slurl.getType(), LLSLURL::LOCATION); ensure_equals(" grid/region/vector", slurl.getSLURLString(), "https://mygrid.com/region/my%20region/1/2/3"); LLGridManager::getInstance()->setGridChoice("foo.bar.com.bar"); slurl = LLSLURL("my region", LLVector3(1,2,3)); ensure_equals("grid/region/vector - type", slurl.getType(), LLSLURL::LOCATION); ensure_equals(" grid/region/vector", slurl.getSLURLString(), "https://foo.bar.com.bar/region/my%20region/1/2/3"); LLGridManager::getInstance()->setGridChoice("util.agni.lindenlab.com"); slurl = LLSLURL("my region", LLVector3(1,2,3)); ensure_equals("default grid/region/vector - type", slurl.getType(), LLSLURL::LOCATION); ensure_equals(" default grid/region/vector", slurl.getSLURLString(), "http://maps.secondlife.com/secondlife/my%20region/1/2/3"); }
// static void LLPanelLogin::updateStartSLURL() { if (!sInstance) return; LLComboBox* combo = sInstance->getChild<LLComboBox>("start_location_combo"); S32 index = combo->getCurrentIndex(); switch (index) { case 0: { LLStartUp::setStartSLURL(LLSLURL(LLSLURL::SIM_LOCATION_LAST)); break; } case 1: { LLStartUp::setStartSLURL(LLSLURL(LLSLURL::SIM_LOCATION_HOME)); break; } default: { LLSLURL slurl = LLSLURL(combo->getValue().asString()); if(slurl.getType() == LLSLURL::LOCATION) { // we've changed the grid, so update the grid selection LLStartUp::setStartSLURL(slurl); } break; } } }
void LLLoginHandler::parse(const LLSD& queryMap) { if (queryMap.has("grid")) { LLGridManager::getInstance()->setGridChoice(queryMap["grid"].asString()); } std::string startLocation = queryMap["location"].asString(); if (startLocation == "specify") { LLStartUp::setStartSLURL(LLSLURL(LLGridManager::getInstance()->getGridLoginID(), queryMap["region"].asString())); } else if (startLocation == "home") { LLStartUp::setStartSLURL(LLSLURL(LLSLURL::SIM_LOCATION_HOME)); } else if (startLocation == "last") { LLStartUp::setStartSLURL(LLSLURL(LLSLURL::SIM_LOCATION_LAST)); } }
void slurlTestObject::test<2>() { llofstream gridfile(TEST_FILENAME); gridfile << gSampleGridFile; gridfile.close(); LLGridManager::getInstance()->initialize(TEST_FILENAME); LLSLURL slurl = LLSLURL("my.grid.com", "my region"); ensure_equals("grid/region - type", slurl.getType(), LLSLURL::LOCATION); ensure_equals("grid/region", slurl.getSLURLString(), "https://my.grid.com/region/my%20region/128/128/0"); slurl = LLSLURL("my.grid.com", "my region", LLVector3(1,2,3)); ensure_equals("grid/region/vector - type", slurl.getType(), LLSLURL::LOCATION); ensure_equals(" grid/region/vector", slurl.getSLURLString(), "https://my.grid.com/region/my%20region/1/2/3"); LLGridManager::getInstance()->setGridChoice("util.agni.lindenlab.com"); slurl = LLSLURL("my region", LLVector3(1,2,3)); ensure_equals("default grid/region/vector - type", slurl.getType(), LLSLURL::LOCATION); ensure_equals(" default grid/region/vector", slurl.getSLURLString(), "http://maps.secondlife.com/secondlife/my%20region/1/2/3"); LLGridManager::getInstance()->setGridChoice("MyGrid"); slurl = LLSLURL("my region", LLVector3(1,2,3)); ensure_equals("default grid/region/vector - type", slurl.getType(), LLSLURL::LOCATION); ensure_equals(" default grid/region/vector", slurl.getSLURLString(), "https://my.grid.com/region/my%20region/1/2/3"); }
// static LLUUID LLGroupActions::startIM(const LLUUID& group_id) { if (group_id.isNull()) return LLUUID::null; // [RLVa:KB] - Checked: 2013-05-09 (RLVa-1.4.9) if ( (!RlvActions::canStartIM(group_id)) && (!RlvActions::hasOpenGroupSession(group_id)) ) { make_ui_sound("UISndInvalidOp"); RlvUtil::notifyBlocked(RLV_STRING_BLOCKED_STARTIM, LLSD().with("RECIPIENT", LLSLURL("group", group_id, "about").getSLURLString())); return LLUUID::null; } // [/RLVa:KB] // [RLVa:KB] - Checked: 2013-05-09 (RLVa-1.4.9) if ( (!RlvActions::canStartIM(group_id)) && (!RlvActions::hasOpenGroupSession(group_id)) ) { make_ui_sound("UISndInvalidOp"); RlvUtil::notifyBlocked(RLV_STRING_BLOCKED_STARTIM, LLSD().with("RECIPIENT", LLSLURL("group", group_id, "about").getSLURLString())); return LLUUID::null; } // [/RLVa:KB] LLGroupData group_data; if (gAgent.getGroupData(group_id, group_data)) { // <exodus> // Unmute the group if the user tries to start a session with it. exoGroupMuteList::instance().remove(group_id); // </exodus> LLUUID session_id = gIMMgr->addSession( group_data.mName, IM_SESSION_GROUP_START, group_id); if (session_id != LLUUID::null) { // <FS:Ansariel> [FS communication UI] //LLFloaterIMContainer::getInstance()->showConversation(session_id); FSFloaterIM::show(session_id); // </FS:Ansariel> [FS communication UI] } make_ui_sound("UISndStartIM"); return session_id; } else { // this should never happen, as starting a group IM session // relies on you belonging to the group and hence having the group data make_ui_sound("UISndInvalidOp"); return LLUUID::null; } }
// Multiple calls to showInstance("inspect_avatar", foo) will provide different // LLSD for foo, which we will catch here. //virtual void LLInspectAvatar::onOpen(const LLSD& data) { // Start open animation LLInspect::onOpen(data); // Extract appropriate avatar id mAvatarID = data["avatar_id"]; // Position the inspector relative to the mouse cursor // Similar to how tooltips are positioned // See LLToolTipMgr::createToolTip if (data.has("pos")) { LLUI::positionViewNearMouse(this, data["pos"]["x"].asInteger(), data["pos"]["y"].asInteger()); } else { LLUI::positionViewNearMouse(this); } // Generate link to avatar profile. getChild<LLUICtrl>("avatar_profile_link")->setTextArg("[LINK]", LLSLURL("agent", mAvatarID, "about").getSLURLString()); // can't call from constructor as widgets are not built yet requestUpdate(); updateVolumeSlider(); }
bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web) { // construct a "normal" SLURL, resolve the region to // a global position, and teleport to it if (tokens.size() < 1) return false; LLVector3 coords(128, 128, 0); if (tokens.size() <= 4) { coords = LLVector3(tokens[1].asReal(), tokens[2].asReal(), tokens[3].asReal()); } LLSD args; args["LOCATION"] = tokens[0]; // Region names may be %20 escaped. std::string region_name = LLURI::unescape(tokens[0]); LLSD payload; payload["region_name"] = region_name; payload["callback_url"] = LLSLURL(region_name, coords).getSLURLString(); LLNotificationsUtil::add("TeleportViaSLAPP", args, payload); return true; }
// static void LLGroupActions::startCall(const LLUUID& group_id) { // create a new group voice session LLGroupData gdata; if (!gAgent.getGroupData(group_id, gdata)) { LL_WARNS() << "Error getting group data" << LL_ENDL; return; } // [RLVa:KB] - Checked: 2013-05-09 (RLVa-1.4.9) if ( (!RlvActions::canStartIM(group_id)) && (!RlvActions::hasOpenGroupSession(group_id)) ) { make_ui_sound("UISndInvalidOp"); RlvUtil::notifyBlocked(RLV_STRING_BLOCKED_STARTIM, LLSD().with("RECIPIENT", LLSLURL("group", group_id, "about").getSLURLString())); return; } // [/RLVa:KB] LLUUID session_id = gIMMgr->addSession(gdata.mName, IM_SESSION_GROUP_START, group_id, true); if (session_id == LLUUID::null) { LL_WARNS() << "Error adding session" << LL_ENDL; return; } // start the call gIMMgr->autoStartCallOnStartup(session_id); make_ui_sound("UISndStartIM"); }
// static void LLPanelLogin::onSelectServer(LLUICtrl*, void*) { // *NOTE: The paramters for this method are ignored. // LLPanelLogin::onServerComboLostFocus(LLFocusableElement* fe, void*) // calls this method. LL_INFOS("AppInit") << "onSelectServer" << LL_ENDL; // The user twiddled with the grid choice ui. // apply the selection to the grid setting. LLPointer<LLCredential> credential; LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo"); LLSD combo_val = combo->getSelectedValue(); if (combo_val.isUndefined()) { combo_val = combo->getValue(); } combo = sInstance->getChild<LLComboBox>("start_location_combo"); combo->setCurrentByIndex(1); LLStartUp::setStartSLURL(LLSLURL(gSavedSettings.getString("LoginLocation"))); LLGridManager::getInstance()->setGridChoice(combo_val.asString()); // This new selection will override preset uris // from the command line. updateServer(); updateLocationCombo(false); updateLoginPanelLinks(); }
void LLFloaterBuyLandUI::updateNames() { LLParcel* parcelp = mParcel->getParcel(); if (!parcelp) { mParcelSellerName = LLStringUtil::null; return; } if (mIsClaim) { mParcelSellerName = "Linden Lab"; } else if (parcelp->getIsGroupOwned()) { gCacheName->getGroup(parcelp->getGroupID(), boost::bind(&LLFloaterBuyLandUI::updateGroupName, this, _1, _2, _3)); } else { mParcelSellerName = LLSLURL("agent", parcelp->getOwnerID(), "completename").getSLURLString(); } }
void LLPanelPlacesTab::onRegionResponse(const LLVector3d& landmark_global_pos, U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport) { std::string sim_name; bool gotSimName = LLWorldMap::getInstance()->simNameFromPosGlobal( landmark_global_pos, sim_name ); std::string sl_url; if ( gotSimName ) { sl_url = LLSLURL(sim_name, landmark_global_pos).getSLURLString(); } else { sl_url = ""; } LLView::getWindow()->copyTextToClipboard(utf8str_to_wstring(sl_url)); LLSD args; args["SLURL"] = sl_url; LLNotificationsUtil::add("CopySLURL", args); }
void add_timestamped_line(LLViewerTextEditor* edit, LLChat chat, const LLColor4& color) { std::string line = chat.mText; bool prepend_newline = true; if (gSavedSettings.getBOOL("ChatShowTimestamps")) { edit->appendTime(prepend_newline); prepend_newline = false; } // If the msg is from an agent (not yourself though), // extract out the sender name and replace it with the hotlinked name. if (chat.mSourceType == CHAT_SOURCE_AGENT && chat.mFromID != LLUUID::null) { chat.mURL = LLSLURL("agent", chat.mFromID, "inspect").getSLURLString(); } // If the chat line has an associated url, link it up to the name. if (!chat.mURL.empty() && (line.length() > chat.mFromName.length() && line.find(chat.mFromName,0) == 0)) { std::string start_line = line.substr(0, chat.mFromName.length() + 1); line = line.substr(chat.mFromName.length() + 1); edit->appendText(start_line, prepend_newline, LLStyleMap::instance().lookup(chat.mFromID,chat.mURL)); edit->blockUndo(); prepend_newline = false; } edit->appendText(line, prepend_newline, LLStyle::Params().color(color)); edit->blockUndo(); }
bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web) { // construct a "normal" SLURL, resolve the region to // a global position, and teleport to it if (tokens.size() < 1) return false; LLVector3 coords(128, 128, 0); if (tokens.size() <= 4) { coords = LLVector3(tokens[1].asReal(), tokens[2].asReal(), tokens[3].asReal()); } // Region names may be %20 escaped. std::string region_name = LLURI::unescape(tokens[0]); LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name, LLURLDispatcherImpl::regionHandleCallback, LLSLURL(region_name, coords).getSLURLString(), true); // teleport return true; }
// static bool LLURLDispatcher::dispatch(const std::string& slurl, const std::string& nav_type, LLMediaCtrl* web, bool trusted_browser) { return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), nav_type, web, trusted_browser); }
void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos) { if (!mSaveToLocationHistory) return; LLLocationHistory* lh = LLLocationHistory::getInstance(); //TODO*: do we need convert slurl into readable format? std::string location; /*NOTE: * We can't use gAgent.getPositionAgent() in case of local teleport to build location. * At this moment gAgent.getPositionAgent() contains previous coordinates. * according to EXT-65 agent position is being reseted on each frame. */ LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_NO_MATURITY, gAgent.getPosAgentFromGlobal(global_agent_pos)); std::string tooltip (LLSLURL(gAgent.getRegion()->getName(), global_agent_pos).getSLURLString()); LLLocationHistoryItem item (location, global_agent_pos, tooltip,TYPED_REGION_SLURL);// we can add into history only TYPED location //Touch it, if it is at list already, add new location otherwise if ( !lh->touchItem(item) ) { lh->addItem(item); } lh->save(); mSaveToLocationHistory = false; }
// static void LLGroupActions::startCall(const LLUUID& group_id) { // create a new group voice session LLGroupData gdata; if (!gAgent.getGroupData(group_id, gdata)) { llwarns << "Error getting group data" << llendl; return; } // [RLVa:KB] - Checked: 2011-04-11 (RLVa-1.3.0h) | Added: RLVa-1.3.0h if ( (rlv_handler_t::isEnabled()) && (!gRlvHandler.canStartIM(group_id)) && (!gIMMgr->hasSession(group_id)) ) { make_ui_sound("UISndInvalidOp"); RlvUtil::notifyBlocked(RLV_STRING_BLOCKED_STARTIM, LLSD().with("RECIPIENT", LLSLURL("group", group_id, "about").getSLURLString())); return; } // [/RLVa:KB] LLUUID session_id = gIMMgr->addSession(gdata.mName, IM_SESSION_GROUP_START, group_id, true); if (session_id == LLUUID::null) { llwarns << "Error adding session" << llendl; return; } // start the call gIMMgr->autoStartCallOnStartup(session_id); make_ui_sound("UISndStartIM"); }
void LLFloaterReporter::setFromAvatarID(const LLUUID& avatar_id) { mAbuserID = mObjectID = avatar_id; std::string avatar_link = LLSLURL("agent", mObjectID, "inspect").getSLURLString(); getChild<LLUICtrl>("owner_name")->setValue(avatar_link); LLAvatarNameCache::get(avatar_id, boost::bind(&LLFloaterReporter::onAvatarNameCache, this, _1, _2)); }
void LLFloaterWorldMap::onClearBtn() { mTrackedStatus = LLTracker::TRACKING_NOTHING; LLTracker::stopTracking((void *)(intptr_t)TRUE); LLWorldMap::getInstance()->cancelTracking(); mSLURL = LLSLURL(); // Clear the SLURL since it's invalid mSetToUserPosition = TRUE; // Revert back to the current user position }
void LLInspectObject::updateCreator(LLSelectNode* nodep) { // final information for display LLStringUtil::format_map_t args; std::string text; // Leave text blank until data loaded if (nodep->mValid) { // Utilize automatic translation of SLURL into name to display // a clickable link // Objects cannot be created by a group, so use agent URL format LLUUID creator_id = nodep->mPermissions->getCreator(); std::string creator_url = LLSLURL("agent", creator_id, "about").getSLURLString(); args["[CREATOR]"] = creator_url; // created by one user but owned by another std::string owner_url; LLUUID owner_id; bool group_owned = nodep->mPermissions->isGroupOwned(); if (group_owned) { owner_id = nodep->mPermissions->getGroup(); owner_url = LLSLURL("group", owner_id, "about").getSLURLString(); } else { owner_id = nodep->mPermissions->getOwner(); owner_url = LLSLURL("agent", owner_id, "about").getSLURLString(); } args["[OWNER]"] = owner_url; if (creator_id == owner_id) { // common case, created and owned by one user text = getString("Creator", args); } else { text = getString("CreatorAndOwner", args); } } getChild<LLUICtrl>("object_creator")->setValue(text); }
// create a slurl from a global position LLSLURL::LLSLURL(const std::string& grid, const std::string& region, const LLVector3d& global_position) { *this = LLSLURL(grid, region, LLVector3(global_position.mdV[VX], global_position.mdV[VY], global_position.mdV[VZ])); }
FloaterHop::FloaterHop( const Params& params ) : LLFloater( params ), LLInstanceTracker<FloaterHop, std::string>(params.id()), mWebBrowser(NULL), mUUID(params.id()), mShowPageTitle(params.show_page_title) { mSLURL = LLSLURL(params.url); }
// create a slurl from a global position LLSLURL::LLSLURL(const std::string& grid, const std::string& region, const LLVector3d& global_position) { *this = LLSLURL(LLGridManager::getInstance()->getGridId(grid), region, LLVector3(global_position.mdV[VX], global_position.mdV[VY], global_position.mdV[VZ])); }
void LLFloaterReporter::setPickedObjectProperties(const std::string& object_name, const std::string& owner_name, const LLUUID owner_id) { getChild<LLUICtrl>("object_name")->setValue(object_name); std::string owner_link = LLSLURL("agent", owner_id, "inspect").getSLURLString(); getChild<LLUICtrl>("owner_name")->setValue(owner_link); getChild<LLUICtrl>("abuser_name_edit")->setValue(owner_name); mAbuserID = owner_id; mOwnerName = owner_name; }
//static void LLAgentUI::buildSLURL(LLSLURL& slurl, const bool escaped /*= true*/) { LLSLURL return_slurl; LLViewerRegion *regionp = gAgent.getRegion(); if (regionp) { return_slurl = LLSLURL(regionp->getName(), gAgent.getPositionGlobal()); } slurl = return_slurl; }
void LLPanelLogin::onCurGridChange(HippoGridInfo* new_grid, HippoGridInfo* old_grid) { refreshLoginPage(); if(old_grid != new_grid) //Changed grid? Reset the location combobox { std::string defaultStartLocation = gSavedSettings.getString("LoginLocation"); LLSLURL defaultStart(defaultStartLocation); LLStartUp::setStartSLURL(defaultStart.isSpatial() ? defaultStart : LLSLURL(LLSLURL::SIM_LOCATION_HOME)); // calls onUpdateStartSLURL } }
void slurlTestObject::test<3>() { LLSLURL slurl = LLSLURL("https://my.grid.com/region/my%20region/1/2/3"); ensure_equals("login string", slurl.getLoginString(), "uri:my region&1&2&3"); ensure_equals("location string", slurl.getLocationString(), "my region/1/2/3"); ensure_equals("grid", slurl.getGrid(), "my.grid.com"); ensure_equals("region", slurl.getRegion(), "my region"); ensure_equals("position", slurl.getPosition(), LLVector3(1, 2, 3)); }
void LLFloaterReporter::setPickedObjectProperties(const std::string& object_name, const std::string& owner_name, const LLUUID owner_id) { childSetText("object_name", object_name); std::string owner_link = LLSLURL("agent", owner_id, "inspect").getSLURLString(); childSetText("owner_name", owner_link); childSetText("abuser_name_edit", owner_name); mAbuserID = owner_id; mOwnerName = owner_name; }
void LLFloaterReporter::setFromAvatar(const LLUUID& avatar_id, const std::string& avatar_name) { mAbuserID = mObjectID = avatar_id; mOwnerName = avatar_name; std::string avatar_link = LLSLURL("agent", mObjectID, "inspect").getSLURLString(); getChild<LLUICtrl>("owner_name")->setValue(avatar_link); getChild<LLUICtrl>("object_name")->setValue(avatar_name); getChild<LLUICtrl>("abuser_name_edit")->setValue(avatar_name); }
//static void LLAgentUI::buildSLURL(LLSLURL& slurl, const bool escaped /*= true*/) { LLSLURL return_slurl; LLViewerRegion *regionp = gAgent.getRegion(); if (regionp) { // Singu Note: Not Global, get correct SLURL for Variable Regions return_slurl = LLSLURL(regionp->getName(), gAgent.getPositionAgent()); } slurl = return_slurl; }
// static bool LLURLDispatcher::dispatchFromTextEditor(const std::string& slurl) { // *NOTE: Text editors are considered sources of trusted URLs // in order to make avatar profile links in chat history work. // While a malicious resident could chat an app SLURL, the // receiving resident will see it and must affirmatively // click on it. // *TODO: Make this trust model more refined. JC const bool trusted_browser = true; LLMediaCtrl* web = NULL; return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), "clicked", web, trusted_browser); }