summaryrefslogtreecommitdiff
path: root/indra/newview/llviewermessage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llviewermessage.cpp')
-rw-r--r--indra/newview/llviewermessage.cpp178
1 files changed, 96 insertions, 82 deletions
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index c929e81ea4..e525561b7d 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -54,7 +54,6 @@
//#include "llfirstuse.h"
#include "llfloaterbuycurrency.h"
#include "llfloaterbuyland.h"
-#include "llfloaterchat.h"
#include "llfloaterland.h"
#include "llfloaterregioninfo.h"
#include "llfloaterlandholdings.h"
@@ -79,6 +78,7 @@
#include "llstatenums.h"
#include "llstatusbar.h"
#include "llimview.h"
+#include "llspeakers.h"
#include "lltrans.h"
#include "llviewerfoldertype.h"
#include "lluri.h"
@@ -630,7 +630,6 @@ bool join_group_response(const LLSD& notification, const LLSD& response)
delete_context_data = FALSE;
LLSD args;
args["NAME"] = name;
- args["INVITE"] = message;
LLNotificationsUtil::add("JoinedTooManyGroupsMember", args, notification["payload"]);
}
}
@@ -835,9 +834,13 @@ bool check_offer_throttle(const std::string& from_name, bool check_only)
}
message << ", automatic preview disabled for "
<< OFFER_THROTTLE_TIME << " seconds.";
- chat.mText = message.str();
+
//this is kinda important, so actually put it on screen
- LLFloaterChat::addChat(chat, FALSE, FALSE);
+ std::string log_msg = message.str();
+ LLSD args;
+ args["MESSAGE"] = log_msg;
+ LLNotificationsUtil::add("SystemMessage", args);
+
throttle_logged=true;
}
return false;
@@ -857,29 +860,12 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f
++item_iter)
{
const LLUUID& item_id = (*item_iter);
- LLInventoryItem* item = gInventory.getItem(item_id);
- if(!item)
+ if(!highlight_offered_item(item_id))
{
- LL_WARNS("Messaging") << "Unable to show inventory item: " << item_id << LL_ENDL;
continue;
}
- ////////////////////////////////////////////////////////////////////////////////
- // Don't highlight if it's in certain "quiet" folders which don't need UI
- // notification (e.g. trash, cof, lost-and-found).
- const BOOL user_is_away = gAwayTimer.getStarted();
- if(!user_is_away)
- {
- const LLViewerInventoryCategory *parent = gInventory.getFirstNondefaultParent(item_id);
- if (parent)
- {
- const LLFolderType::EType parent_type = parent->getPreferredType();
- if (LLViewerFolderType::lookupIsQuietType(parent_type))
- {
- continue;
- }
- }
- }
+ LLInventoryItem* item = gInventory.getItem(item_id);
////////////////////////////////////////////////////////////////////////////////
// Special handling for various types.
@@ -902,9 +888,17 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f
if ("inventory_handler" == from_name)
{
//we have to filter inventory_handler messages to avoid notification displaying
- LLSideTray::getInstance()->showPanel("panel_places",
+ LLSideTray::getInstance()->showPanel("panel_places",
LLSD().with("type", "landmark").with("id", item->getUUID()));
}
+ else if("group_offer" == from_name)
+ {
+ // do not open inventory when we open group notice attachment because
+ // we already opened landmark info panel
+ // "group_offer" is passed by LLOpenTaskGroupOffer
+
+ continue;
+ }
else if(from_name.empty())
{
// we receive a message from LLOpenTaskOffer, it mean that new landmark has been added.
@@ -913,14 +907,16 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f
args["FOLDER_NAME"] = std::string(parent_folder ? parent_folder->getName() : "unknown");
LLNotificationsUtil::add("LandmarkCreated", args);
// Created landmark is passed to Places panel to allow its editing. In fact panel should be already displayed.
+ // If the panel is closed we don't reopen it until created landmark is loaded.
//TODO*:: dserduk(7/12/09) remove LLPanelPlaces dependency from here
- LLPanelPlaces *places_panel = dynamic_cast<LLPanelPlaces*>(LLSideTray::getInstance()->showPanel("panel_places", LLSD()));
+ LLPanelPlaces *places_panel = dynamic_cast<LLPanelPlaces*>(LLSideTray::getInstance()->getPanel("panel_places"));
if (places_panel)
{
- // we are creating a landmark
+ // Landmark creation handling is moved to LLPanelPlaces::showAddedLandmarkInfo()
+ // TODO* LLPanelPlaces dependency is going to be removed. See EXT-4347.
if("create_landmark" == places_panel->getPlaceInfoType() && !places_panel->getItem())
{
- places_panel->setItem(item);
+ //places_panel->setItem(item);
}
// we are opening a group notice attachment
else
@@ -970,6 +966,34 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f
}
}
+bool highlight_offered_item(const LLUUID& item_id)
+{
+ LLInventoryItem* item = gInventory.getItem(item_id);
+ if(!item)
+ {
+ LL_WARNS("Messaging") << "Unable to show inventory item: " << item_id << LL_ENDL;
+ return false;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // Don't highlight if it's in certain "quiet" folders which don't need UI
+ // notification (e.g. trash, cof, lost-and-found).
+ if(!gAgent.getAFK())
+ {
+ const LLViewerInventoryCategory *parent = gInventory.getFirstNondefaultParent(item_id);
+ if (parent)
+ {
+ const LLFolderType::EType parent_type = parent->getPreferredType();
+ if (LLViewerFolderType::lookupIsQuietType(parent_type))
+ {
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
void inventory_offer_mute_callback(const LLUUID& blocked_id,
const std::string& first_name,
const std::string& last_name,
@@ -1178,8 +1202,9 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
if (check_offer_throttle(mFromName, true))
{
log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + mDesc + LLTrans::getString(".");
- chat.mText = log_message;
- LLFloaterChat::addChatHistory(chat);
+ LLSD args;
+ args["MESSAGE"] = log_message;
+ LLNotificationsUtil::add("SystemMessage", args);
}
break;
@@ -1352,8 +1377,9 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
if (check_offer_throttle(mFromName, true))
{
log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + mDesc + LLTrans::getString(".");
- chat.mText = log_message;
- LLFloaterChat::addChatHistory(chat);
+ LLSD args;
+ args["MESSAGE"] = log_message;
+ LLNotificationsUtil::add("SystemMessage", args);
}
// we will want to open this item when it comes back.
@@ -1396,12 +1422,9 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
msg->sendReliable(mHost);
log_message = LLTrans::getString("InvOfferYouDecline") + " " + mDesc + " " + LLTrans::getString("InvOfferFrom") + " " + mFromName +".";
- chat.mText = log_message;
- if( LLMuteList::getInstance()->isMuted(mFromID ) && ! LLMuteList::getInstance()->isLinden(mFromName) ) // muting for SL-42269
- {
- chat.mMuted = TRUE;
- }
- LLFloaterChat::addChatHistory(chat);
+ LLSD args;
+ args["MESSAGE"] = log_message;
+ LLNotificationsUtil::add("SystemMessage", args);
if (busy && (!mFromGroup && !mFromObject))
{
@@ -1459,7 +1482,7 @@ void inventory_offer_handler(LLOfferInfo* info)
{
LLStringUtil::truncate(msg, indx);
}
-
+
LLSD args;
args["[OBJECTNAME]"] = msg;
@@ -1763,10 +1786,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
region_id,
position,
true);
-
- // pretend this is chat generated by self, so it does not show up on screen
- chat.mText = std::string("IM: ") + name + separator_string + message;
- LLFloaterChat::addChat( chat, TRUE, TRUE );
}
else if (from_id.isNull())
{
@@ -1822,19 +1841,16 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
region_id,
position,
true);
- chat.mText = std::string("IM: ") + name + separator_string + saved + message;
-
- BOOL local_agent = FALSE;
- LLFloaterChat::addChat( chat, TRUE, local_agent );
}
else
{
// muted user, so don't start an IM session, just record line in chat
// history. Pretend the chat is from a local agent,
// so it will go into the history but not be shown on screen.
- chat.mText = buffer;
- BOOL local_agent = TRUE;
- LLFloaterChat::addChat( chat, TRUE, local_agent );
+
+ LLSD args;
+ args["MESSAGE"] = buffer;
+ LLNotificationsUtil::add("SystemMessageTip", args);
}
}
break;
@@ -1898,7 +1914,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
if (has_inventory)
{
- info = new LLOfferInfo;
+ info = new LLOfferInfo();
info->mIM = IM_GROUP_NOTICE;
info->mFromID = from_id;
@@ -1952,6 +1968,10 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
LLPanelGroup::showNotice(subj,mes,group_id,has_inventory,item_name,info);
}
+ else
+ {
+ delete info;
+ }
}
break;
case IM_GROUP_INVITATION:
@@ -2001,7 +2021,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
// Someone has offered us some inventory.
{
LLOfferInfo* info = new LLOfferInfo;
- bool mute_im = false;
if (IM_INVENTORY_OFFERED == dialog)
{
struct offer_agent_bucket_t
@@ -2013,22 +2032,19 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
if (sizeof(offer_agent_bucket_t) != binary_bucket_size)
{
LL_WARNS("Messaging") << "Malformed inventory offer from agent" << LL_ENDL;
+ delete info;
break;
}
bucketp = (struct offer_agent_bucket_t*) &binary_bucket[0];
info->mType = (LLAssetType::EType) bucketp->asset_type;
info->mObjectID = bucketp->object_id;
-
- if(accept_im_from_only_friend&&!is_friend)
- {
- mute_im = true;
- }
}
else
{
if (sizeof(S8) != binary_bucket_size)
{
LL_WARNS("Messaging") << "Malformed inventory offer from object" << LL_ENDL;
+ delete info;
break;
}
info->mType = (LLAssetType::EType) binary_bucket[0];
@@ -2053,7 +2069,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
info->mDesc = message;
info->mHost = msg->getSender();
//if (((is_busy && !is_owned_by_me) || is_muted))
- if ( is_muted || mute_im)
+ if (is_muted)
{
// Prefetch the offered item so that it can be discarded by the appropriate observer. (EXT-4331)
LLInventoryFetchObserver::item_ref_t items;
@@ -2138,9 +2154,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
region_id,
position,
true);
-
- chat.mText = std::string("IM: ") + name + separator_string + saved + message;
- LLFloaterChat::addChat(chat, TRUE, is_this_agent);
}
break;
@@ -2168,6 +2181,12 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
chat.mFromID = from_id ^ gAgent.getSessionID();
}
+ if(SYSTEM_FROM == name)
+ {
+ // System's UUID is NULL (fixes EXT-4766)
+ chat.mFromID = from_id = LLUUID::null;
+ }
+
LLSD query_string;
query_string["owner"] = from_id;
query_string["slurl"] = location;
@@ -2189,7 +2208,10 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD());
if(nearby_chat)
{
- nearby_chat->addMessage(chat);
+ LLSD args;
+ args["owner_id"] = from_id;
+ args["slurl"] = location;
+ nearby_chat->addMessage(chat, true, args);
}
@@ -2211,7 +2233,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
payload["SESSION_NAME"] = session_name;
if (from_group)
{
- payload["groupowned"] = "true";
+ payload["group_owned"] = "true";
}
LLNotificationsUtil::add("ServerObjectMessage", substitutions, payload);
}
@@ -2513,7 +2535,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
// Object owner for objects
msg->getUUID("ChatData", "OwnerID", owner_id);
-
+
msg->getU8Fast(_PREHASH_ChatData, _PREHASH_SourceType, source_temp);
chat.mSourceType = (EChatSourceType)source_temp;
@@ -2542,7 +2564,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
if (chatter)
{
chat.mPosAgent = chatter->getPositionAgent();
-
+
// Make swirly things only for talking objects. (not script debug messages, though)
if (chat.mSourceType == CHAT_SOURCE_OBJECT
&& chat.mChatType != CHAT_TYPE_DEBUG_MSG)
@@ -2687,22 +2709,13 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
chat.mMuted = is_muted && !is_linden;
- if (!visible_in_chat_bubble
- && (is_linden || !is_busy || is_owned_by_me))
- {
- // show on screen and add to history
- LLNotificationsUI::LLNotificationManager::instance().onChat(
- chat, LLNotificationsUI::NT_NEARBYCHAT);
+ // pass owner_id to chat so that we can display the remote
+ // object inspect for an object that is chatting with you
+ LLSD args;
+ args["type"] = LLNotificationsUI::NT_NEARBYCHAT;
+ args["owner_id"] = owner_id;
- LLFloaterChat::addChat(chat, FALSE, FALSE);
- }
- else
- {
- LLNotificationsUI::LLNotificationManager::instance().onChat(
- chat, LLNotificationsUI::NT_NEARBYCHAT);
- // adding temporarily
- LLFloaterChat::addChatHistory(chat);
- }
+ LLNotificationsUI::LLNotificationManager::instance().onChat(chat, args);
}
}
@@ -3087,9 +3100,10 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
if (avatarp)
{
// Chat the "back" SLURL. (DEV-4907)
- LLChat chat("Teleport completed from " + gAgent.getTeleportSourceSLURL());
- chat.mSourceType = CHAT_SOURCE_SYSTEM;
- LLFloaterChat::addChatHistory(chat);
+
+ LLSD args;
+ args["MESSAGE"] = "Teleport completed from " + gAgent.getTeleportSourceSLURL();
+ LLNotificationsUtil::add("SystemMessageTip", args);
// Set the new position
avatarp->setPositionAgent(agent_pos);