summaryrefslogtreecommitdiff
path: root/indra/newview/llimprocessing.cpp
diff options
context:
space:
mode:
authorJonathan "Geenz" Goodman <geenz@geenzo.com>2026-10-13 14:34:41 -0400
committerJonathan "Geenz" Goodman <geenz@geenzo.com>2026-10-13 14:34:41 -0400
commit181fd93f799e15a6ff924362c4a05be8db3639af (patch)
treef3a3a530b80b1b17e71c7b6d7fa8b981b52c61f9 /indra/newview/llimprocessing.cpp
parent8ba5d1a8adc47c21b23d9482e72de9517f9a98fc (diff)
parent083db782e29434ab17963fcac76b0ec3cd93b9d0 (diff)
Merge remote-tracking branch 'origin/release/26.5' into geenz/main-26.5
Diffstat (limited to 'indra/newview/llimprocessing.cpp')
-rw-r--r--indra/newview/llimprocessing.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/indra/newview/llimprocessing.cpp b/indra/newview/llimprocessing.cpp
index 9ba939d35b..409e213e0e 100644
--- a/indra/newview/llimprocessing.cpp
+++ b/indra/newview/llimprocessing.cpp
@@ -519,6 +519,10 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
break;
case IM_NOTHING_SPECIAL: // p2p IM
+ // Record delivery metadata so live transport can be distinguished from history retrieval.
+ LL_INFOS("ChatServiceHistory") << "Direct IM received: sender_id=" << from_id
+ << ", offline=" << (offline == IM_OFFLINE)
+ << ", timestamp=" << timestamp << ", bytes=" << message.size() << LL_ENDL;
// Don't show dialog, just do IM
if (!gAgent.isGodlike()
&& gAgent.inPrelude()
@@ -622,6 +626,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
real_name = SYSTEM_FROM;
}
+ // Keep the undecorated body for matching against service history.
gIMMgr->addMessage(session_id,
from_id,
name,
@@ -635,7 +640,8 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
region_message,
timestamp,
LLUUID::null,
- real_name);
+ real_name,
+ notice_name.empty() ? LLSD(message) : LLSD());
}
else
{
@@ -1453,7 +1459,13 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
for (auto& panel : LLToastNotifyPanel::instance_snapshot())
{
const std::string& notification_name = panel.getNotificationName();
- if (notification_name == "OfferFriendship" && panel.isControlPanelEnabled())
+ LLNotificationPtr panel_notification = LLNotificationsUtil::find(panel.getID());
+ // Only a live actionable offer from this sender makes the packet a duplicate.
+ if (!panel.isDead()
+ && notification_name == "OfferFriendship"
+ && panel_notification
+ && panel_notification->getPayload()["from_id"].asUUID() == from_id
+ && panel.isControlPanelEnabled())
{
add_notification = false;
break;