summaryrefslogtreecommitdiff
path: root/indra/newview/llavataractions.cpp
diff options
context:
space:
mode:
authorRick Pasetto <rick@lindenlab.com>2009-11-12 09:23:57 -0800
committerRick Pasetto <rick@lindenlab.com>2009-11-12 09:23:57 -0800
commit3dd79ad226bc8e0aec18dba87223a3f50ecf360b (patch)
tree2af4f4e5d50d35065dda3101b60b40a3c1c21aee /indra/newview/llavataractions.cpp
parent72af8dc3f0a249f69869bc6f52dd7a887702a964 (diff)
parent7a45dec2d540581ef080386e4a967befd22b6adb (diff)
merge
Diffstat (limited to 'indra/newview/llavataractions.cpp')
-rw-r--r--indra/newview/llavataractions.cpp90
1 files changed, 89 insertions, 1 deletions
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 67ffe54b7e..f631978565 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -54,11 +54,15 @@
#include "llmutelist.h"
#include "llrecentpeople.h"
#include "llsidetray.h"
+#include "lltrans.h"
#include "llviewerobjectlist.h"
#include "llviewermessage.h" // for handle_lure
#include "llviewerregion.h"
#include "llimfloater.h"
+#include "lltrans.h"
+// callback connection to auto-call when the IM floater initializes
+boost::signals2::connection gAdhocAutoCall;
// static
void LLAvatarActions::requestFriendshipDialog(const LLUUID& id, const std::string& name)
@@ -178,11 +182,79 @@ void LLAvatarActions::startIM(const LLUUID& id)
std::string name;
gCacheName->getFullName(id, name);
LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
+ if (session_id != LLUUID::null)
+ {
+ LLIMFloater::show(session_id);
+ }
+ make_ui_sound("UISndStartIM");
+}
+
+// static
+void LLAvatarActions::startCall(const LLUUID& id)
+{
+ if (id.isNull() || isCalling(id))
+ {
+ return;
+ }
+
+ std::string name;
+ gCacheName->getFullName(id, name);
+ LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
+ if (session_id != LLUUID::null)
+ {
+ // always open IM window when connecting to voice
+ LLIMFloater::show(session_id);
+ gIMMgr->startCall(session_id);
+ }
+ make_ui_sound("UISndStartIM");
+}
+
+// static
+void LLAvatarActions::startAdhocCall(const std::vector<LLUUID>& ids)
+{
+ if (ids.size() == 0)
+ {
+ return;
+ }
+
+ // convert vector into LLDynamicArray for addSession
+ LLDynamicArray<LLUUID> id_array;
+ for (std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); ++it)
+ {
+ id_array.push_back(*it);
+ }
+
+ // create the new ad hoc voice session
+ const std::string title = LLTrans::getString("conference-title");
+ LLUUID session_id = gIMMgr->addSession(title, IM_SESSION_CONFERENCE_START,
+ ids[0], id_array);
+ if (session_id == LLUUID::null)
+ {
+ return;
+ }
+
+ // always open IM window when connecting to voice
LLIMFloater::show(session_id);
+
+ // start the call once the floater has fully initialized
+ gAdhocAutoCall = LLIMModel::getInstance()->addSessionInitializedCallback(callbackAutoStartCall);
+
make_ui_sound("UISndStartIM");
}
// static
+bool LLAvatarActions::isCalling(const LLUUID &id)
+{
+ if (id.isNull())
+ {
+ return false;
+ }
+
+ LLUUID session_id = gIMMgr->computeSessionID(IM_NOTHING_SPECIAL, id);
+ return (LLIMModel::getInstance()->findIMSession(session_id) != NULL);
+}
+
+// static
void LLAvatarActions::startConference(const std::vector<LLUUID>& ids)
{
// *HACK: Copy into dynamic array
@@ -191,7 +263,12 @@ void LLAvatarActions::startConference(const std::vector<LLUUID>& ids)
{
id_array.push_back(*it);
}
- gIMMgr->addSession("Friends Conference", IM_SESSION_CONFERENCE_START, ids[0], id_array);
+ const std::string title = LLTrans::getString("conference-title");
+ LLUUID session_id = gIMMgr->addSession(title, IM_SESSION_CONFERENCE_START, ids[0], id_array);
+ if (session_id != LLUUID::null)
+ {
+ LLIMFloater::show(session_id);
+ }
make_ui_sound("UISndStartIM");
}
@@ -355,6 +432,17 @@ bool LLAvatarActions::callbackAddFriend(const LLSD& notification, const LLSD& re
}
// static
+void LLAvatarActions::callbackAutoStartCall(const LLSD& data)
+{
+ // start the adhoc voice call now the IM panel has initialized
+ LLUUID session_id = data["session_id"].asUUID();
+ gIMMgr->startCall(session_id);
+
+ // and deschedule this callback as its work is done now
+ gAdhocAutoCall.disconnect();
+}
+
+// static
void LLAvatarActions::requestFriendship(const LLUUID& target_id, const std::string& target_name, const std::string& message)
{
const LLUUID calling_card_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);