From 96f5a8e19cf36a59cd3b5afe413ec8e2d5fc33ce Mon Sep 17 00:00:00 2001
From: "Andrew A. de Laix" <alain@lindenlab.com>
Date: Thu, 14 Apr 2011 15:23:09 -0700
Subject: [PATCH] add testing hook to send a group chat IM.

---
 indra/newview/groupchatlistener.cpp | 27 +++++++++++++++++++++++++--
 indra/newview/llgroupactions.cpp    |  7 ++++---
 indra/newview/llgroupactions.h      |  2 +-
 3 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/indra/newview/groupchatlistener.cpp b/indra/newview/groupchatlistener.cpp
index 9b463c9a3f4..d9c705adf02 100644
--- a/indra/newview/groupchatlistener.cpp
+++ b/indra/newview/groupchatlistener.cpp
@@ -18,6 +18,22 @@
 // external library headers
 // other Linden headers
 #include "llgroupactions.h"
+#include "llimview.h"
+
+
+namespace {
+	void startIm_wrapper(LLSD const & event)
+	{
+		LLUUID session_id = LLGroupActions::startIM(event["id"].asUUID());
+		sendReply(LLSDMap("session_id", LLSD(session_id)), event);
+	}
+
+	void send_message_wrapper(const std::string& text, const LLUUID& session_id, const LLUUID& group_id)
+	{
+		LLIMModel::sendMessage(text, session_id, group_id, IM_SESSION_GROUP_START);
+	}
+}
+
 
 GroupChatListener::GroupChatListener():
     LLEventAPI("GroupChat",
@@ -26,11 +42,18 @@ GroupChatListener::GroupChatListener():
     add("startIM",
         "Enter a group chat in group with UUID [\"id\"]\n"
         "Assumes the logged-in agent is already a member of this group.",
-        &LLGroupActions::startIM,
-        LLSDArray("id"));
+        &startIm_wrapper);
     add("endIM",
         "Leave a group chat in group with UUID [\"id\"]\n"
         "Assumes a prior successful startIM request.",
         &LLGroupActions::endIM,
         LLSDArray("id"));
+	add("sendIM",
+		"send a groupchat IM",
+		&send_message_wrapper,
+        LLSDArray("text")("session_id")("group_id"));
 }
+/*
+	static void sendMessage(const std::string& utf8_text, const LLUUID& im_session_id,
+								const LLUUID& other_participant_id, EInstantMessage dialog);
+*/
\ No newline at end of file
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index 92fd84ff5b3..97fa5514417 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -322,10 +322,9 @@ void LLGroupActions::closeGroup(const LLUUID& group_id)
 
 
 // static
-void LLGroupActions::startIM(const LLUUID& group_id)
+LLUUID LLGroupActions::startIM(const LLUUID& group_id)
 {
-	if (group_id.isNull())
-		return;
+	if (group_id.isNull()) return LLUUID::null;
 
 	LLGroupData group_data;
 	if (gAgent.getGroupData(group_id, group_data))
@@ -339,12 +338,14 @@ void LLGroupActions::startIM(const LLUUID& group_id)
 			LLIMFloater::show(session_id);
 		}
 		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;
 	}
 }
 
diff --git a/indra/newview/llgroupactions.h b/indra/newview/llgroupactions.h
index c52a25818b7..3f9852f1945 100644
--- a/indra/newview/llgroupactions.h
+++ b/indra/newview/llgroupactions.h
@@ -87,7 +87,7 @@ class LLGroupActions
 	/**
 	 * Start group instant messaging session.
 	 */
-	static void startIM(const LLUUID& group_id);
+	static LLUUID startIM(const LLUUID& group_id);
 
 	/**
 	 * End group instant messaging session.
-- 
GitLab