Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
Alchemy Viewer
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Deploy
Releases
Package registry
Operate
Terraform modules
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Silent mode is enabled
All outbound communications are blocked.
Learn more
.
Show more breadcrumbs
Alchemy Viewer
Alchemy Viewer
Commits
c2f630cf
Commit
c2f630cf
authored
12 years ago
by
AlexanderP ProductEngine
Browse files
Options
Downloads
Patches
Plain Diff
CHUI-486 FIXED Update Preferences -> Chat XUI: implemented new bthavior; deleted spaghetti code
parent
f86be5c8
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
indra/newview/llimview.cpp
+104
-117
104 additions, 117 deletions
indra/newview/llimview.cpp
with
104 additions
and
117 deletions
indra/newview/llimview.cpp
+
104
−
117
View file @
c2f630cf
...
@@ -160,163 +160,150 @@ static void on_avatar_name_cache_toast(const LLUUID& agent_id,
...
@@ -160,163 +160,150 @@ static void on_avatar_name_cache_toast(const LLUUID& agent_id,
void
on_new_message
(
const
LLSD
&
msg
)
void
on_new_message
(
const
LLSD
&
msg
)
{
{
std
::
string
action
;
std
::
string
user_preferences
;
LLUUID
participant_id
=
msg
[
"from_id"
].
asUUID
();
LLUUID
participant_id
=
msg
[
"from_id"
].
asUUID
();
LLUUID
session_id
=
msg
[
"session_id"
].
asUUID
();
LLUUID
session_id
=
msg
[
"session_id"
].
asUUID
();
LLIMModel
::
LLIMSession
*
session
=
LLIMModel
::
instance
().
findIMSession
(
session_id
);
LLIMModel
::
LLIMSession
*
session
=
LLIMModel
::
instance
().
findIMSession
(
session_id
);
// determine action for this session
// do not show notification which goes from agent
if
(
gAgent
.
getID
()
==
participant_id
)
{
return
;
}
// determine state of conversations floater
enum
{
CLOSED
,
NOT_ON_TOP
,
ON_TOP
,
ON_TOP_AND_ITEM_IS_SELECTED
}
conversations_floater_status
;
LLFloaterIMContainer
*
im_box
=
LLFloaterReg
::
getTypedInstance
<
LLFloaterIMContainer
>
(
"im_container"
);
LLFloaterIMSessionTab
*
session_floater
=
LLFloaterIMSessionTab
::
getConversation
(
session_id
);
if
(
!
LLFloater
::
isVisible
(
im_box
)
||
im_box
->
isMinimized
())
{
conversations_floater_status
=
CLOSED
;
}
else
if
(
!
im_box
->
isFrontmost
()
&&
(
!
session_floater
||
!
LLFloater
::
isVisible
(
session_floater
)
||
session_floater
->
isMinimized
()
||
!
session_floater
->
isFrontmost
()))
{
conversations_floater_status
=
NOT_ON_TOP
;
}
else
if
(
im_box
->
getSelectedSession
()
!=
session_id
)
{
conversations_floater_status
=
ON_TOP
;
}
else
{
conversations_floater_status
=
ON_TOP_AND_ITEM_IS_SELECTED
;
}
// determine user prefs for this session
if
(
session_id
.
isNull
())
if
(
session_id
.
isNull
())
{
{
action
=
gSavedSettings
.
getString
(
"NotificationNearbyChatOptions"
);
user_preferences
=
gSavedSettings
.
getString
(
"NotificationNearbyChatOptions"
);
}
}
else
if
(
session
->
isP2PSessionType
())
else
if
(
session
->
isP2PSessionType
())
{
{
if
(
LLAvatarTracker
::
instance
().
isBuddy
(
participant_id
))
if
(
LLAvatarTracker
::
instance
().
isBuddy
(
participant_id
))
{
{
action
=
gSavedSettings
.
getString
(
"NotificationFriendIMOptions"
);
user_preferences
=
gSavedSettings
.
getString
(
"NotificationFriendIMOptions"
);
}
}
else
else
{
{
action
=
gSavedSettings
.
getString
(
"NotificationNonFriendIMOptions"
);
user_preferences
=
gSavedSettings
.
getString
(
"NotificationNonFriendIMOptions"
);
}
}
}
}
else
if
(
session
->
isAdHocSessionType
())
else
if
(
session
->
isAdHocSessionType
())
{
{
action
=
gSavedSettings
.
getString
(
"NotificationConferenceIMOptions"
);
user_preferences
=
gSavedSettings
.
getString
(
"NotificationConferenceIMOptions"
);
}
}
else
if
(
session
->
isGroupSessionType
())
else
if
(
session
->
isGroupSessionType
())
{
{
action
=
gSavedSettings
.
getString
(
"NotificationGroupChatOptions"
);
user_preferences
=
gSavedSettings
.
getString
(
"NotificationGroupChatOptions"
);
}
}
// do not show notification which goes from agent
// actions:
if
(
gAgent
.
getID
()
==
participant_id
)
{
return
;
}
// execution of the action
LLFloaterIMContainer
*
im_box
=
LLFloaterReg
::
getTypedInstance
<
LLFloaterIMContainer
>
(
"im_container"
);
LLFloaterIMSessionTab
*
session_floater
=
LLFloaterIMSessionTab
::
getConversation
(
session_id
);
if
(
im_box
->
isFrontmost
()
&&
im_box
->
getSelectedSession
()
==
session_id
&&
!
(
session_floater
->
getHost
()
?
im_box
->
isMinimized
()
:
session_floater
->
isMinimized
()))
{
return
;
}
//session floater not focused (visible or not)
bool
session_floater_not_focused
=
session_floater
&&
!
session_floater
->
hasFocus
();
//conv. floater is closed
bool
conversation_floater_is_closed
=
!
(
im_box
&&
im_box
->
isInVisibleChain
()
&&
!
im_box
->
isMinimized
());
//conversation floater not focused (visible or not)
bool
conversation_floater_not_focused
=
conversation_floater_is_closed
||
!
im_box
->
hasFocus
();
// sess. floater is open
bool
session_floater_is_open
=
session_floater
&&
session_floater
->
isInVisibleChain
()
&&
!
session_floater
->
isMinimized
()
&&
!
(
session_floater
->
getHost
()
&&
session_floater
->
getHost
()
->
isMinimized
());
bool
conversation_floater_collapsed
=
!
session_floater
->
isMessagePaneExpanded
();
if
((
"toast"
==
action
&&
!
session_floater_is_open
)
||
conversation_floater_collapsed
)
{
//User is not focused on conversation containing the message
if
(
session_floater_not_focused
||
conversation_floater_collapsed
)
{
if
(
!
LLMuteList
::
getInstance
()
->
isMuted
(
participant_id
))
{
im_box
->
flashConversationItemWidget
(
session_id
,
true
);
}
//The conversation floater isn't focused/open
if
(
conversation_floater_not_focused
||
conversation_floater_collapsed
)
{
if
(
!
LLMuteList
::
getInstance
()
->
isMuted
(
participant_id
)
&&
!
gAgent
.
isDoNotDisturb
())
{
gToolBarView
->
flashCommand
(
LLCommandId
(
"chat"
),
true
);
}
//Show IM toasts (upper right toasts)
// Skip toasting for system messages and for nearby chat
if
(
session_id
.
notNull
()
&&
participant_id
.
notNull
())
{
LLAvatarNameCache
::
get
(
participant_id
,
boost
::
bind
(
&
on_avatar_name_cache_toast
,
_1
,
_2
,
msg
));
}
}
}
}
else
if
(
"flash"
==
action
)
// 0. nothing - exit
if
(
"none"
==
user_preferences
||
ON_TOP_AND_ITEM_IS_SELECTED
==
conversations_floater_status
)
{
{
if
(
!
gAgent
.
isDoNotDisturb
())
return
;
{
im_box
->
flashConversationItemWidget
(
session_id
,
true
);
if
(
conversation_floater_not_focused
)
{
//User is not focused on conversation containing the message
gToolBarView
->
flashCommand
(
LLCommandId
(
"chat"
),
true
);
}
}
else
if
(
session_id
.
notNull
()
&&
participant_id
.
notNull
())
{
//If a DND message, allow notification to be stored so upon DND exit
//useMostItrusiveIMNotification will be called to notify user a message exists
LLAvatarNameCache
::
get
(
participant_id
,
boost
::
bind
(
&
on_avatar_name_cache_toast
,
_1
,
_2
,
msg
));
}
}
}
else
if
(
"openconversations"
==
action
)
// 1. open floater and [optional] surface it
if
(
"openconversations"
==
user_preferences
&&
(
CLOSED
==
conversations_floater_status
||
NOT_ON_TOP
==
conversations_floater_status
))
{
{
//User is not focused on conversation containing the message
if
(
!
gAgent
.
isDoNotDisturb
())
if
(
session_floater_not_focused
)
{
{
//Flash line item
// Open conversations floater
im_box
->
flashConversationItemWidget
(
session_id
,
true
);
LLFloaterReg
::
showInstance
(
"im_container"
);
im_box
->
collapseMessagesPane
(
false
);
if
(
!
gAgent
.
isDoNotDisturb
())
if
(
session_floater
)
{
{
//Surface conversations floater
if
(
session_floater
->
getHost
())
LLFloaterReg
::
showInstance
(
"im_container"
);
im_box
->
collapseMessagesPane
(
false
);
if
(
session_floater
)
{
{
if
(
session_floater
->
getHost
())
if
(
NULL
!=
im_box
&&
im_box
->
isMinimized
())
{
{
if
(
NULL
!=
im_box
&&
im_box
->
isMinimized
())
LLFloater
::
onClickMinimize
(
im_box
);
{
LLFloater
::
onClickMinimize
(
im_box
);
}
}
}
else
}
else
{
if
(
session_floater
->
isMinimized
())
{
{
if
(
session_floater
->
isMinimized
())
LLFloater
::
onClickMinimize
(
session_floater
);
{
LLFloater
::
onClickMinimize
(
session_floater
);
}
}
}
}
}
}
}
}
//If in DND mode, allow notification to be stored so upon DND exit
else
{
//If in DND mode, allow notification to be stored so upon DND exit
//useMostItrusiveIMNotification will be called to notify user a message exists
//useMostItrusiveIMNotification will be called to notify user a message exists
if
(
session_id
.
notNull
()
if
(
session_id
.
notNull
()
&&
participant_id
.
notNull
()
&&
participant_id
.
notNull
()
&&
gAgent
.
isDoNotDisturb
()
&&
!
session_floater
->
isShown
())
&&
!
session_floater_is_open
)
{
{
LLAvatarNameCache
::
get
(
participant_id
,
boost
::
bind
(
&
on_avatar_name_cache_toast
,
_1
,
_2
,
msg
));
LLAvatarNameCache
::
get
(
participant_id
,
boost
::
bind
(
&
on_avatar_name_cache_toast
,
_1
,
_2
,
msg
));
}
}
}
}
}
// 2. Flash line item
if
(
"openconversations"
==
user_preferences
||
NOT_ON_TOP
==
conversations_floater_status
)
{
if
(
!
LLMuteList
::
getInstance
()
->
isMuted
(
participant_id
))
{
im_box
->
flashConversationItemWidget
(
session_id
,
true
);
}
}
// 3. Flash FUI button
if
(
"flash"
==
user_preferences
&&
(
CLOSED
==
conversations_floater_status
||
NOT_ON_TOP
==
conversations_floater_status
))
{
if
(
!
LLMuteList
::
getInstance
()
->
isMuted
(
participant_id
)
&&
!
gAgent
.
isDoNotDisturb
())
{
gToolBarView
->
flashCommand
(
LLCommandId
(
"chat"
),
true
);
}
}
// 4. Toast
if
(
"toast"
==
user_preferences
&&
(
CLOSED
==
conversations_floater_status
||
NOT_ON_TOP
==
conversations_floater_status
))
{
//Show IM toasts (upper right toasts)
// Skip toasting for system messages and for nearby chat
if
(
session_id
.
notNull
()
&&
participant_id
.
notNull
())
{
LLAvatarNameCache
::
get
(
participant_id
,
boost
::
bind
(
&
on_avatar_name_cache_toast
,
_1
,
_2
,
msg
));
}
}
}
}
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment