summaryrefslogtreecommitdiff
path: root/indra/newview/llgroupactions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llgroupactions.cpp')
-rw-r--r--indra/newview/llgroupactions.cpp91
1 files changed, 75 insertions, 16 deletions
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index c46eedbef2..00e2365ffd 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -35,14 +35,17 @@
#include "llgroupactions.h"
-// Viewer includes
+#include "message.h"
+
#include "llagent.h"
#include "llcommandhandler.h"
#include "llfloaterreg.h"
#include "llgroupmgr.h"
#include "llimview.h" // for gIMMgr
+#include "llnotificationsutil.h"
#include "llsidetray.h"
#include "llstatusbar.h" // can_afford_transaction()
+#include "llimfloater.h"
//
// Globals
@@ -72,11 +75,12 @@ public:
return false;
}
+ //*TODO by what to replace showing groups floater?
if (tokens[0].asString() == "list")
{
if (tokens[1].asString() == "show")
{
- LLFloaterReg::showInstance("contacts", "groups");
+ //LLFloaterReg::showInstance("contacts", "groups");
return true;
}
return false;
@@ -99,9 +103,9 @@ public:
}
if (tokens[1].asString() == "inspect")
{
- LLSD key;
- key["group_id"] = group_id;
- LLFloaterReg::showInstance("inspect_group", key);
+ if (group_id.isNull())
+ return true;
+ LLGroupActions::show(group_id);
return true;
}
return false;
@@ -112,12 +116,43 @@ LLGroupHandler gGroupHandler;
// static
void LLGroupActions::search()
{
- LLFloaterReg::showInstance("search", LLSD().insert("category", "groups"));
+ LLFloaterReg::showInstance("search", LLSD().with("category", "groups"));
+}
+
+// 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;
+ }
+
+ 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");
}
// static
void LLGroupActions::join(const LLUUID& group_id)
{
+ if (!gAgent.canJoinGroups())
+ {
+ LLNotificationsUtil::add("JoinedTooManyGroups");
+ return;
+ }
+
LLGroupMgrGroupData* gdatap =
LLGroupMgr::getInstance()->getGroupData(group_id);
@@ -126,16 +161,21 @@ void LLGroupActions::join(const LLUUID& group_id)
S32 cost = gdatap->mMembershipFee;
LLSD args;
args["COST"] = llformat("%d", cost);
+ args["NAME"] = gdatap->mName;
LLSD payload;
payload["group_id"] = group_id;
if (can_afford_transaction(cost))
{
- LLNotifications::instance().add("JoinGroupCanAfford", args, payload, onJoinGroup);
+ if(cost > 0)
+ LLNotificationsUtil::add("JoinGroupCanAfford", args, payload, onJoinGroup);
+ else
+ LLNotificationsUtil::add("JoinGroupNoCost", args, payload, onJoinGroup);
+
}
else
{
- LLNotifications::instance().add("JoinGroupCannotAfford", args, payload);
+ LLNotificationsUtil::add("JoinGroupCannotAfford", args, payload);
}
}
else
@@ -148,7 +188,7 @@ void LLGroupActions::join(const LLUUID& group_id)
// static
bool LLGroupActions::onJoinGroup(const LLSD& notification, const LLSD& response)
{
- S32 option = LLNotification::getSelectedOption(notification, response);
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
if (option == 1)
{
@@ -180,7 +220,7 @@ void LLGroupActions::leave(const LLUUID& group_id)
args["GROUP"] = gAgent.mGroups.get(i).mName;
LLSD payload;
payload["group_id"] = group_id;
- LLNotifications::instance().add("GroupLeaveConfirmMember", args, payload, onLeaveGroup);
+ LLNotificationsUtil::add("GroupLeaveConfirmMember", args, payload, onLeaveGroup);
}
}
@@ -196,12 +236,14 @@ void LLGroupActions::activate(const LLUUID& group_id)
gAgent.sendReliableMessage();
}
-bool isGroupUIVisible()
+static bool isGroupUIVisible()
{
- LLPanel* panel = LLSideTray::getInstance()->findChild<LLPanel>("panel_group_info_sidetray");
+ static LLPanel* panel = 0;
+ if(!panel)
+ panel = LLSideTray::getInstance()->findChild<LLPanel>("panel_group_info_sidetray");
if(!panel)
return false;
- return panel->getVisible();
+ return panel->isInVisibleChain();
}
// static
@@ -271,7 +313,7 @@ void LLGroupActions::closeGroup(const LLUUID& group_id)
// static
-void LLGroupActions::startChat(const LLUUID& group_id)
+void LLGroupActions::startIM(const LLUUID& group_id)
{
if (group_id.isNull())
return;
@@ -279,10 +321,14 @@ void LLGroupActions::startChat(const LLUUID& group_id)
LLGroupData group_data;
if (gAgent.getGroupData(group_id, group_data))
{
- gIMMgr->addSession(
+ LLUUID session_id = gIMMgr->addSession(
group_data.mName,
IM_SESSION_GROUP_START,
group_id);
+ if (session_id != LLUUID::null)
+ {
+ LLIMFloater::show(session_id);
+ }
make_ui_sound("UISndStartIM");
}
else
@@ -294,6 +340,19 @@ void LLGroupActions::startChat(const LLUUID& group_id)
}
// static
+void LLGroupActions::endIM(const LLUUID& group_id)
+{
+ if (group_id.isNull())
+ return;
+
+ LLUUID session_id = gIMMgr->computeSessionID(IM_SESSION_GROUP_START, group_id);
+ if (session_id != LLUUID::null)
+ {
+ gIMMgr->leaveSession(session_id);
+ }
+}
+
+// static
bool LLGroupActions::isInGroup(const LLUUID& group_id)
{
// *TODO: Move all the LLAgent group stuff into another class, such as
@@ -328,7 +387,7 @@ bool LLGroupActions::isAvatarMemberOfGroup(const LLUUID& group_id, const LLUUID&
// static
bool LLGroupActions::onLeaveGroup(const LLSD& notification, const LLSD& response)
{
- S32 option = LLNotification::getSelectedOption(notification, response);
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
LLUUID group_id = notification["payload"]["group_id"].asUUID();
if(option == 0)
{