diff --git a/src/net/java/sip/communicator/impl/msghistory/MessageHistoryServiceImpl.java b/src/net/java/sip/communicator/impl/msghistory/MessageHistoryServiceImpl.java index 82791dc14..3a7c34c4c 100644 --- a/src/net/java/sip/communicator/impl/msghistory/MessageHistoryServiceImpl.java +++ b/src/net/java/sip/communicator/impl/msghistory/MessageHistoryServiceImpl.java @@ -869,6 +869,43 @@ public void messageReceived(ChatRoomMessageReceivedEvent evt) History history = this.getHistoryForMultiChat( evt.getSourceChatRoom()); + // if this is chat room message history on every room enter + // we can receive the same latest history messages and this + // will just fill the history on every join + if(evt.isHistoryMessage()) + { + Collection c = + findFirstMessagesAfter(evt.getSourceChatRoom(), + evt.getTimestamp(), + 10); + + Iterator iter = c.iterator(); + boolean isPresent = false; + while(iter.hasNext()) + { + EventObject e = iter.next(); + + if(e instanceof ChatRoomMessageReceivedEvent) + { + ChatRoomMessageReceivedEvent cev = + (ChatRoomMessageReceivedEvent)e; + + if( evt.getSourceChatRoomMember().getContactAddress() + .equals(cev.getSourceChatRoomMember() + .getContactAddress()) + && evt.getTimestamp() != null + && evt.getTimestamp().equals(cev.getTimestamp())) + { + isPresent = true; + break; + } + } + } + + if (isPresent) + return; + } + writeMessage(history, "in", evt.getSourceChatRoomMember(), evt.getMessage(), evt.getTimestamp()); } catch (IOException e) @@ -885,6 +922,39 @@ public void messageDelivered(ChatRoomMessageDeliveredEvent evt) getHistoryForMultiChat( evt.getSourceChatRoom()); + // if this is chat room message history on every room enter + // we can receive the same latest history messages and this + // will just fill the history on every join + if(evt.isHistoryMessage()) + { + Collection c = + findFirstMessagesAfter(evt.getSourceChatRoom(), + evt.getTimestamp(), + 10); + + Iterator iter = c.iterator(); + boolean isPresent = false; + while(iter.hasNext()) + { + EventObject e = iter.next(); + if(e instanceof ChatRoomMessageDeliveredEvent) + { + ChatRoomMessageDeliveredEvent cev = + (ChatRoomMessageDeliveredEvent)e; + + if(evt.getTimestamp() != null + && evt.getTimestamp().equals(cev.getTimestamp())) + { + isPresent = true; + break; + } + } + } + + if (isPresent) + return; + } + writeMessage(history, "out", evt.getMessage(), evt.getTimestamp()); } catch (IOException e) {