From 0b566e6a7826a7c67a03530c1f445e87ace79b3b Mon Sep 17 00:00:00 2001 From: hristoterezov Date: Fri, 20 Dec 2013 13:42:00 +0200 Subject: [PATCH] Changes the behavior of chat room windows to be opened only on important events. --- .../conference/ConferenceChatManager.java | 28 +++++++++++++++---- .../protocol/jabber/ChatRoomJabberImpl.java | 7 +++++ .../event/ChatRoomMessageReceivedEvent.java | 23 +++++++++++++++ 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/conference/ConferenceChatManager.java b/src/net/java/sip/communicator/impl/gui/main/chat/conference/ConferenceChatManager.java index 744d97861..ae0f2af4f 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/conference/ConferenceChatManager.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/conference/ConferenceChatManager.java @@ -44,7 +44,7 @@ public class ConferenceChatManager AdHocChatRoomInvitationRejectionListener, LocalUserChatRoomPresenceListener, LocalUserAdHocChatRoomPresenceListener, - ServiceListener + ServiceListener, ChatRoomLocalUserRoleListener { /** * The object used for logging. @@ -277,10 +277,10 @@ else if(o instanceof ChatRoomMessageReceivedEvent) message.getMessageUID(), null); - chatWindowManager.openChat(chatPanel, false); + if(evt.isImportantMessage()) + chatWindowManager.openChat(chatPanel, true); } - - + /** * Implements the ChatRoomMessageListener.messageDeliveryFailed * method. @@ -489,8 +489,8 @@ public void run() if(chatPanel.isShown()) ((ConferenceChatSession) chatPanel.getChatSession()) .loadChatRoom(sourceChatRoom); - else - chatWindowManager.openChat(chatPanel, true); +// else +// chatWindowManager.openChat(chatPanel, true); } if (sourceChatRoom.isSystem()) @@ -504,6 +504,7 @@ public void run() } sourceChatRoom.addMessageListener(this); + sourceChatRoom.addLocalUserRoleListener(this); } else if (LocalUserChatRoomPresenceChangeEvent .LOCAL_USER_JOIN_FAILED.equals(eventType)) @@ -536,6 +537,7 @@ else if (LocalUserChatRoomPresenceChangeEvent } sourceChatRoom.removeMessageListener(this); + sourceChatRoom.removelocalUserRoleListener(this); } } @@ -1259,5 +1261,19 @@ public void messageReceived(AdHocChatRoomMessageReceivedEvent evt) } public void invitationRejected(AdHocChatRoomInvitationRejectedEvent evt) {} + + @Override + public void localUserRoleChanged(ChatRoomLocalUserRoleChangeEvent evt) + { + ChatRoom sourceChatRoom = evt.getSourceChatRoom(); + ChatRoomWrapper chatRoomWrapper + = GuiActivator.getMUCService().findChatRoomWrapperFromChatRoom( + sourceChatRoom); + ChatWindowManager chatWindowManager + = GuiActivator.getUIService().getChatWindowManager(); + ChatPanel chatPanel + = chatWindowManager.getMultiChat(chatRoomWrapper, true); + chatWindowManager.openChat(chatPanel, true); + } } diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/ChatRoomJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/ChatRoomJabberImpl.java index 1152c9ede..bdef78ec6 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/ChatRoomJabberImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/ChatRoomJabberImpl.java @@ -2008,6 +2008,13 @@ public void processPacket(Packet packet) if(delay != null) msgReceivedEvt.setHistoryMessage(true); + if(messageReceivedEventType + == ChatRoomMessageReceivedEvent.CONVERSATION_MESSAGE_RECEIVED + && newMessage.getContent().contains(getUserNickname() + ":")) + { + msgReceivedEvt.setImportantMessage(true); + } + fireMessageEvent(msgReceivedEvt); } } diff --git a/src/net/java/sip/communicator/service/protocol/event/ChatRoomMessageReceivedEvent.java b/src/net/java/sip/communicator/service/protocol/event/ChatRoomMessageReceivedEvent.java index 701e22d39..c448aa280 100644 --- a/src/net/java/sip/communicator/service/protocol/event/ChatRoomMessageReceivedEvent.java +++ b/src/net/java/sip/communicator/service/protocol/event/ChatRoomMessageReceivedEvent.java @@ -72,6 +72,11 @@ public class ChatRoomMessageReceivedEvent * Some services can fill our room with message history. */ private boolean historyMessage = false; + + /** + * Indicates whether the message is important or not. + */ + private boolean isImportantMessage = false; /** * Creates a MessageReceivedEvent representing reception of the @@ -167,4 +172,22 @@ public void setHistoryMessage(boolean historyMessage) { this.historyMessage = historyMessage; } + + /** + * Sets the the important message flag of the event. + * @param isImportant the value to be set. + */ + public void setImportantMessage(boolean isImportant) + { + isImportantMessage = isImportant; + } + + /** + * Returns true if message is important and false if not. + * @return true if message is important and false if not. + */ + public boolean isImportantMessage() + { + return isImportantMessage; + } }