diff options
| -rwxr-xr-x | indra/llui/lltextbase.cpp | 3 | ||||
| -rwxr-xr-x | indra/llui/llurlaction.cpp | 34 | ||||
| -rwxr-xr-x | indra/llui/llurlaction.h | 3 | ||||
| -rwxr-xr-x | indra/newview/llpanelprofile.cpp | 14 | ||||
| -rwxr-xr-x | indra/newview/skins/default/xui/en/menu_url_objectim.xml | 7 | 
5 files changed, 60 insertions, 1 deletions
| diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index e2a39d89e4..0276ade3e1 100755 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -1941,6 +1941,7 @@ void LLTextBase::createUrlContextMenu(S32 x, S32 y, const std::string &in_url)  	registrar.add("Url.OpenInternal", boost::bind(&LLUrlAction::openURLInternal, url));  	registrar.add("Url.OpenExternal", boost::bind(&LLUrlAction::openURLExternal, url));  	registrar.add("Url.Execute", boost::bind(&LLUrlAction::executeSLURL, url)); +	registrar.add("Url.Block", boost::bind(&LLUrlAction::blockObject, url));  	registrar.add("Url.Teleport", boost::bind(&LLUrlAction::teleportToLocation, url));  	registrar.add("Url.ShowProfile", boost::bind(&LLUrlAction::showProfile, url));  	registrar.add("Url.AddFriend", boost::bind(&LLUrlAction::addFriend, url)); @@ -1956,7 +1957,7 @@ void LLTextBase::createUrlContextMenu(S32 x, S32 y, const std::string &in_url)  																		 LLMenuHolderGL::child_registry_t::instance());	  	if (mIsFriendSignal)  	{ -		bool isFriend = (*mIsFriendSignal)(LLUUID(LLUrlAction::getUserID(url))); +		bool isFriend = *(*mIsFriendSignal)(LLUUID(LLUrlAction::getUserID(url)));  		LLView* addFriendButton = mPopupMenu->getChild<LLView>("add_friend");  		LLView* removeFriendButton = mPopupMenu->getChild<LLView>("remove_friend"); diff --git a/indra/llui/llurlaction.cpp b/indra/llui/llurlaction.cpp index cf707d87dc..d006209284 100755 --- a/indra/llui/llurlaction.cpp +++ b/indra/llui/llurlaction.cpp @@ -170,6 +170,30 @@ std::string LLUrlAction::getUserID(std::string url)  	return id_str;  } +std::string LLUrlAction::getObjectId(std::string url) +{ +	LLURI uri(url); +	LLSD path_array = uri.pathArray(); +	std::string id_str; +	if (path_array.size() >= 3) +	{ +		id_str = path_array.get(2).asString(); +	} +	return id_str; +} + +std::string LLUrlAction::getObjectName(std::string url) +{ +	LLURI uri(url); +	LLSD query_map = uri.queryMap(); +	std::string name; +	if (query_map.has("name")) +	{ +		name = query_map["name"]; +	} +	return name; +} +  void LLUrlAction::sendIM(std::string url)  {  	std::string id_str = getUserID(url); @@ -196,3 +220,13 @@ void LLUrlAction::removeFriend(std::string url)  		executeSLURL("secondlife:///app/agent/" + id_str + "/removefriend");  	}  } + +void LLUrlAction::blockObject(std::string url) +{ +	std::string object_id = getObjectId(url); +	std::string object_name = getObjectName(url); +	if (LLUUID::validate(object_id)) +	{ +		executeSLURL("secondlife:///app/agent/" + object_id + "/block/" + object_name); +	} +} diff --git a/indra/llui/llurlaction.h b/indra/llui/llurlaction.h index 1984ec63e9..e731376b95 100755 --- a/indra/llui/llurlaction.h +++ b/indra/llui/llurlaction.h @@ -77,9 +77,12 @@ public:  	/// if the Url specifies an SL command in the form like 'app/{cmd}/{id}/*', show its profile  	static void showProfile(std::string url);  	static std::string getUserID(std::string url); +	static std::string getObjectName(std::string url); +	static std::string getObjectId(std::string url);  	static void sendIM(std::string url);  	static void addFriend(std::string url);  	static void removeFriend(std::string url); +	static void blockObject(std::string url);  	/// specify the callbacks to enable this class's functionality  	typedef boost::function<void (const std::string&)> url_callback_t; diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp index 3b95b46476..5acc98904b 100755 --- a/indra/newview/llpanelprofile.cpp +++ b/indra/newview/llpanelprofile.cpp @@ -36,6 +36,8 @@  #include "lltabcontainer.h"  #include "llviewercontrol.h"  #include "llviewernetwork.h" +#include "llmutelist.h" +#include "llpanelblockedlist.h"  static const std::string PANEL_PICKS = "panel_picks"; @@ -161,6 +163,18 @@ public:  			return true;  		} +		if (verb == "block") +		{ +			if (params.size() > 2) +			{ +				const std::string object_name = params[2].asString(); +				LLMute mute(avatar_id, object_name, LLMute::OBJECT); +				LLMuteList::getInstance()->add(mute); +				LLPanelBlockedList::showPanelAndSelect(mute.mID); +			} +			return true; +		} +  		return false;  	}  }; diff --git a/indra/newview/skins/default/xui/en/menu_url_objectim.xml b/indra/newview/skins/default/xui/en/menu_url_objectim.xml index 87ab58e622..b9d003b841 100755 --- a/indra/newview/skins/default/xui/en/menu_url_objectim.xml +++ b/indra/newview/skins/default/xui/en/menu_url_objectim.xml @@ -9,6 +9,13 @@          <menu_item_call.on_click           function="Url.Execute" />      </menu_item_call> +    <menu_item_call +     label="Block..." +     layout="topleft" +     name="block_object"> +        <menu_item_call.on_click +         function="Url.Block" /> +    </menu_item_call>      <menu_item_separator       layout="topleft" />      <menu_item_call | 
