summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authormaxim@mnikolenko <maxim@mnikolenko>2014-03-14 12:21:25 +0200
committermaxim@mnikolenko <maxim@mnikolenko>2014-03-14 12:21:25 +0200
commit09d1c27d4f78c78d949b6a3d896d6f58df2dfc06 (patch)
tree2366f6ff31289a27092bef9e9fb2db272f17eb60 /indra
parentcb91708332b8b8ddfe27808602ec5f43f11c24c2 (diff)
MAINT-3822 FIXED Show busy mode message only once for each im session.
Diffstat (limited to 'indra')
-rwxr-xr-xindra/newview/llagent.cpp1
-rwxr-xr-xindra/newview/llimview.cpp33
-rwxr-xr-xindra/newview/llimview.h8
-rwxr-xr-xindra/newview/llviewermessage.cpp13
4 files changed, 51 insertions, 4 deletions
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index f150ceda67..7a93a95ebf 100755
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -1466,6 +1466,7 @@ void LLAgent::setDoNotDisturb(bool pIsDoNotDisturb)
{
LLDoNotDisturbNotificationStorage::getInstance()->updateNotifications();
}
+ gIMMgr->updateDNDMessageStatus();
}
//-----------------------------------------------------------------------------
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 70ffdc14ff..d55922af93 100755
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -409,6 +409,7 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&
mOtherParticipantIsAvatar(true),
mStartCallOnInitialize(false),
mStartedAsIMCall(voice),
+ mIsDNDsend(false),
mAvatarNameCacheConnection()
{
// set P2P type by default
@@ -3306,6 +3307,38 @@ bool LLIMMgr::isVoiceCall(const LLUUID& session_id)
return im_session->mStartedAsIMCall;
}
+void LLIMMgr::updateDNDMessageStatus()
+{
+ if (LLIMModel::getInstance()->mId2SessionMap.empty()) return;
+
+ std::map<LLUUID, LLIMModel::LLIMSession*>::const_iterator it = LLIMModel::getInstance()->mId2SessionMap.begin();
+ for (; it != LLIMModel::getInstance()->mId2SessionMap.end(); ++it)
+ {
+ LLIMModel::LLIMSession* session = (*it).second;
+
+ if (session->isP2P())
+ {
+ setDNDMessageSent(session->mSessionID,false);
+ }
+ }
+}
+
+bool LLIMMgr::isDNDMessageSend(const LLUUID& session_id)
+{
+ LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(session_id);
+ if (!im_session) return false;
+
+ return im_session->mIsDNDsend;
+}
+
+void LLIMMgr::setDNDMessageSent(const LLUUID& session_id, bool is_send)
+{
+ LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(session_id);
+ if (!im_session) return;
+
+ im_session->mIsDNDsend = is_send;
+}
+
void LLIMMgr::addNotifiedNonFriendSessionID(const LLUUID& session_id)
{
mNotifiedNonFriendSessions.insert(session_id);
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index da6039a3ae..4270304de9 100755
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -140,6 +140,8 @@ public:
bool mHasOfflineMessage;
+ bool mIsDNDsend;
+
private:
void onAdHocNameCache(const LLAvatarName& av_name);
@@ -443,6 +445,12 @@ public:
bool isVoiceCall(const LLUUID& session_id);
+ void updateDNDMessageStatus();
+
+ bool isDNDMessageSend(const LLUUID& session_id);
+
+ void setDNDMessageSent(const LLUUID& session_id, bool is_send);
+
void addNotifiedNonFriendSessionID(const LLUUID& session_id);
bool isNonFriendSessionNotified(const LLUUID& session_id);
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index df5c7d5c2e..160f924f3f 100755
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2409,10 +2409,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
&& from_id.notNull() //not a system message
&& to_id.notNull()) //not global message
{
- // return a standard "do not disturb" message, but only do it to online IM
- // (i.e. not other auto responses and not store-and-forward IM)
-
- send_do_not_disturb_message(msg, from_id, session_id);
// now store incoming IM in chat history
@@ -2433,6 +2429,15 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
region_id,
position,
true);
+
+ if (!gIMMgr->isDNDMessageSend(session_id))
+ {
+ // return a standard "do not disturb" message, but only do it to online IM
+ // (i.e. not other auto responses and not store-and-forward IM)
+ send_do_not_disturb_message(msg, from_id, session_id);
+ gIMMgr->setDNDMessageSent(session_id, true);
+ }
+
}
else if (from_id.isNull())
{