From aa31156460fe714c8dd38450994402df824d2a89 Mon Sep 17 00:00:00 2001 From: Damian Minkov Date: Tue, 27 Aug 2013 17:59:16 +0300 Subject: [PATCH] Uses server responses when sending messages to generate delivery reports for those messages. --- .../protocol/jabber/ChatRoomJabberImpl.java | 35 +++++++++++-------- .../event/ChatRoomMessageDeliveredEvent.java | 24 +++++++++++++ 2 files changed, 45 insertions(+), 14 deletions(-) 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 cb043e9a4..402c35181 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/ChatRoomJabberImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/ChatRoomJabberImpl.java @@ -822,16 +822,6 @@ public void sendMessage(Message message) // We send only the content because it doesn't work if we send the // Message object. multiUserChat.sendMessage(message.getContent()); - - ChatRoomMessageDeliveredEvent msgDeliveredEvt - = new ChatRoomMessageDeliveredEvent( - this, - new Date(), - message, - ChatRoomMessageDeliveredEvent - .CONVERSATION_MESSAGE_DELIVERED); - - fireMessageEvent(msgDeliveredEvt); } catch (XMPPException ex) { @@ -1749,10 +1739,6 @@ public void processPacket(Packet packet) String fromUserName = StringUtils.parseResource(msgFrom); - // skip our own messages - if(getUserNickname().equals(fromUserName)) - return; - // when the message comes from the room itself its a system message if(msgFrom.equals(getName())) { @@ -1786,6 +1772,27 @@ public void processPacket(Packet packet) Message newMessage = createMessage(msgBody); + // if we are sending this message, this either a delivery report + // or if there is a delay extension this is a history coming from + // the chat room + if(getUserNickname().equals(fromUserName)) + { + // message delivered + ChatRoomMessageDeliveredEvent msgDeliveredEvt + = new ChatRoomMessageDeliveredEvent( + ChatRoomJabberImpl.this, + timeStamp, + newMessage, + ChatRoomMessageDeliveredEvent + .CONVERSATION_MESSAGE_DELIVERED); + + if(delay != null) + msgDeliveredEvt.setHistoryMessage(true); + + fireMessageEvent(msgDeliveredEvt); + return; + } + if(msg.getType() == org.jivesoftware.smack.packet.Message.Type.error) { if (logger.isInfoEnabled()) diff --git a/src/net/java/sip/communicator/service/protocol/event/ChatRoomMessageDeliveredEvent.java b/src/net/java/sip/communicator/service/protocol/event/ChatRoomMessageDeliveredEvent.java index 715df3676..fe3d1e8a1 100644 --- a/src/net/java/sip/communicator/service/protocol/event/ChatRoomMessageDeliveredEvent.java +++ b/src/net/java/sip/communicator/service/protocol/event/ChatRoomMessageDeliveredEvent.java @@ -56,6 +56,11 @@ public class ChatRoomMessageDeliveredEvent */ private int eventType = -1; + /** + * Some services can fill our room with message history. + */ + private boolean historyMessage = false; + /** * Creates a MessageDeliveredEvent representing delivery of the * source message to the specified to contact. @@ -117,4 +122,23 @@ public int getEventType() { return eventType; } + + /** + * Is current event for history message. + * @return is current event for history message. + */ + public boolean isHistoryMessage() + { + return historyMessage; + } + + /** + * Changes property, whether this event is for a history message. + * + * @param historyMessage whether its event for history message. + */ + public void setHistoryMessage(boolean historyMessage) + { + this.historyMessage = historyMessage; + } }