|
|
|
|
@ -6,8 +6,12 @@
|
|
|
|
|
*/
|
|
|
|
|
package net.java.sip.communicator.impl.msghistory;
|
|
|
|
|
|
|
|
|
|
import static
|
|
|
|
|
net.java.sip.communicator.service.history.HistoryService.DATE_FORMAT;
|
|
|
|
|
|
|
|
|
|
import java.beans.*;
|
|
|
|
|
import java.io.*;
|
|
|
|
|
import java.text.*;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
|
|
import net.java.sip.communicator.service.contactlist.*;
|
|
|
|
|
@ -387,13 +391,13 @@ public Collection<EventObject> findFirstMessagesAfter( MetaContact contact,
|
|
|
|
|
if(object instanceof MessageDeliveredEvent)
|
|
|
|
|
{
|
|
|
|
|
isRecordOK =
|
|
|
|
|
(((MessageDeliveredEvent)object).getTimestamp()
|
|
|
|
|
(((MessageDeliveredEvent)object).getTimestamp().getTime()
|
|
|
|
|
> date.getTime());
|
|
|
|
|
}
|
|
|
|
|
else if(object instanceof MessageReceivedEvent)
|
|
|
|
|
{
|
|
|
|
|
isRecordOK =
|
|
|
|
|
(((MessageReceivedEvent)object).getTimestamp()
|
|
|
|
|
(((MessageReceivedEvent)object).getTimestamp().getTime()
|
|
|
|
|
> date.getTime());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -630,18 +634,19 @@ private EventObject convertHistoryRecordToMessageEvent( HistoryRecord hr,
|
|
|
|
|
Contact contact)
|
|
|
|
|
{
|
|
|
|
|
MessageImpl msg = createMessageFromHistoryRecord(hr);
|
|
|
|
|
long timestamp;
|
|
|
|
|
Date timestamp;
|
|
|
|
|
|
|
|
|
|
// if there is value for date of receiving the message
|
|
|
|
|
// this is the event timestamp (this is the date that had came
|
|
|
|
|
// from protocol)
|
|
|
|
|
// the HistoryRecord timestamp is the timestamp when the record
|
|
|
|
|
// was written
|
|
|
|
|
long messageReceivedDate = msg.getMessageReceivedDate();
|
|
|
|
|
long hrTimestamp = hr.getTimestamp();
|
|
|
|
|
if (messageReceivedDate != 0)
|
|
|
|
|
Date messageReceivedDate = msg.getMessageReceivedDate();
|
|
|
|
|
Date hrTimestamp = hr.getTimestamp();
|
|
|
|
|
if (messageReceivedDate.getTime() != 0)
|
|
|
|
|
{
|
|
|
|
|
if(messageReceivedDate - hrTimestamp > 86400000) // 24*60*60*1000
|
|
|
|
|
// 24*60*60*1000
|
|
|
|
|
if(messageReceivedDate.getTime() - hrTimestamp.getTime() > 86400000)
|
|
|
|
|
timestamp = hrTimestamp;
|
|
|
|
|
else
|
|
|
|
|
timestamp = msg.getMessageReceivedDate();
|
|
|
|
|
@ -676,18 +681,19 @@ private EventObject convertHistoryRecordToMessageEvent(
|
|
|
|
|
HistoryRecord hr, ChatRoom room)
|
|
|
|
|
{
|
|
|
|
|
MessageImpl msg = createMessageFromHistoryRecord(hr);
|
|
|
|
|
long timestamp;
|
|
|
|
|
Date timestamp;
|
|
|
|
|
|
|
|
|
|
// if there is value for date of receiving the message
|
|
|
|
|
// this is the event timestamp (this is the date that had came
|
|
|
|
|
// from protocol)
|
|
|
|
|
// the HistoryRecord timestamp is the timestamp when the record
|
|
|
|
|
// was written
|
|
|
|
|
long messageReceivedDate = msg.getMessageReceivedDate();
|
|
|
|
|
long hrTimestamp = hr.getTimestamp();
|
|
|
|
|
if(messageReceivedDate != 0)
|
|
|
|
|
Date messageReceivedDate = msg.getMessageReceivedDate();
|
|
|
|
|
Date hrTimestamp = hr.getTimestamp();
|
|
|
|
|
if(messageReceivedDate.getTime() != 0)
|
|
|
|
|
{
|
|
|
|
|
if(messageReceivedDate - hrTimestamp > 86400000) // 24*60*60*1000
|
|
|
|
|
// 24*60*60*1000
|
|
|
|
|
if(messageReceivedDate.getTime() - hrTimestamp.getTime() > 86400000)
|
|
|
|
|
timestamp = hrTimestamp;
|
|
|
|
|
else
|
|
|
|
|
timestamp = msg.getMessageReceivedDate();
|
|
|
|
|
@ -735,7 +741,8 @@ private MessageImpl createMessageFromHistoryRecord(HistoryRecord hr)
|
|
|
|
|
String messageUID = null;
|
|
|
|
|
String subject = null;
|
|
|
|
|
boolean isOutgoing = false;
|
|
|
|
|
long messageReceivedDate = 0;
|
|
|
|
|
Date messageReceivedDate = new Date(0);
|
|
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
|
|
|
|
|
for (int i = 0; i < hr.getPropertyNames().length; i++)
|
|
|
|
|
{
|
|
|
|
|
String propName = hr.getPropertyNames()[i];
|
|
|
|
|
@ -759,8 +766,15 @@ else if (hr.getPropertyValues()[i].equals("out"))
|
|
|
|
|
}
|
|
|
|
|
else if (propName.equals(STRUCTURE_NAMES[6]))
|
|
|
|
|
{
|
|
|
|
|
messageReceivedDate =
|
|
|
|
|
Long.parseLong(hr.getPropertyValues()[i]);
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
messageReceivedDate = sdf.parse(hr.getPropertyValues()[i]);
|
|
|
|
|
}
|
|
|
|
|
catch (ParseException e)
|
|
|
|
|
{
|
|
|
|
|
messageReceivedDate =
|
|
|
|
|
new Date(Long.parseLong(hr.getPropertyValues()[i]));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return new MessageImpl(textContent, contentType, contentEncoding,
|
|
|
|
|
@ -892,7 +906,7 @@ public void messageDeliveryFailed(ChatRoomMessageDeliveryFailedEvent evt)
|
|
|
|
|
* that came from the protocol provider
|
|
|
|
|
*/
|
|
|
|
|
private void writeMessage(String direction, Contact source,
|
|
|
|
|
Contact destination, Message message, long messageTimestamp)
|
|
|
|
|
Contact destination, Message message, Date messageTimestamp)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
History history = this.getHistory(source, destination);
|
|
|
|
|
@ -913,14 +927,16 @@ private void writeMessage(String direction, Contact source,
|
|
|
|
|
* that came from the protocol provider
|
|
|
|
|
*/
|
|
|
|
|
private void writeMessage(History history, String direction,
|
|
|
|
|
Message message, long messageTimestamp)
|
|
|
|
|
Message message, Date messageTimestamp)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
HistoryWriter historyWriter = history.getWriter();
|
|
|
|
|
SimpleDateFormat sdf
|
|
|
|
|
= new SimpleDateFormat(HistoryService.DATE_FORMAT);
|
|
|
|
|
historyWriter.addRecord(new String[] { direction,
|
|
|
|
|
message.getContent(), message.getContentType(),
|
|
|
|
|
message.getEncoding(), message.getMessageUID(),
|
|
|
|
|
message.getSubject(), String.valueOf(messageTimestamp) },
|
|
|
|
|
message.getSubject(), sdf.format(messageTimestamp) },
|
|
|
|
|
new Date()); // this date is when the history record is written
|
|
|
|
|
} catch (IOException e)
|
|
|
|
|
{
|
|
|
|
|
@ -939,7 +955,7 @@ private void writeMessage(History history, String direction,
|
|
|
|
|
*/
|
|
|
|
|
private void writeMessage(History history, String direction,
|
|
|
|
|
ChatRoomMember from,
|
|
|
|
|
Message message, long messageTimestamp)
|
|
|
|
|
Message message, Date messageTimestamp)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
// mising from, strange messages, most probably a history
|
|
|
|
|
@ -948,11 +964,13 @@ private void writeMessage(History history, String direction,
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
HistoryWriter historyWriter = history.getWriter();
|
|
|
|
|
SimpleDateFormat sdf
|
|
|
|
|
= new SimpleDateFormat(HistoryService.DATE_FORMAT);
|
|
|
|
|
historyWriter.addRecord(new String[] { direction,
|
|
|
|
|
message.getContent(), message.getContentType(),
|
|
|
|
|
message.getEncoding(), message.getMessageUID(),
|
|
|
|
|
from.getContactAddress(),
|
|
|
|
|
String.valueOf(messageTimestamp) },
|
|
|
|
|
sdf.format(messageTimestamp) },
|
|
|
|
|
new Date()); // this date is when the history record is written
|
|
|
|
|
} catch (IOException e)
|
|
|
|
|
{
|
|
|
|
|
@ -971,16 +989,18 @@ private void writeMessage(History history, String direction,
|
|
|
|
|
*/
|
|
|
|
|
private void writeMessage(History history, String direction,
|
|
|
|
|
Contact from,
|
|
|
|
|
Message message, long messageTimestamp)
|
|
|
|
|
Message message, Date messageTimestamp)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
HistoryWriter historyWriter = history.getWriter();
|
|
|
|
|
SimpleDateFormat sdf
|
|
|
|
|
= new SimpleDateFormat(HistoryService.DATE_FORMAT);
|
|
|
|
|
historyWriter.addRecord(new String[] { direction,
|
|
|
|
|
message.getContent(), message.getContentType(),
|
|
|
|
|
message.getEncoding(), message.getMessageUID(),
|
|
|
|
|
from.getAddress(),
|
|
|
|
|
String.valueOf(messageTimestamp) },
|
|
|
|
|
sdf.format(messageTimestamp) },
|
|
|
|
|
new Date()); // this date is when the history record is written
|
|
|
|
|
} catch (IOException e)
|
|
|
|
|
{
|
|
|
|
|
@ -1948,11 +1968,11 @@ private static class MessageImpl
|
|
|
|
|
{
|
|
|
|
|
private final boolean isOutgoing;
|
|
|
|
|
|
|
|
|
|
private final long messageReceivedDate;
|
|
|
|
|
private final Date messageReceivedDate;
|
|
|
|
|
|
|
|
|
|
MessageImpl(String content, String contentType, String encoding,
|
|
|
|
|
String subject, String messageUID, boolean isOutgoing,
|
|
|
|
|
long messageReceivedDate)
|
|
|
|
|
Date messageReceivedDate)
|
|
|
|
|
{
|
|
|
|
|
super(content, contentType, encoding, subject, messageUID);
|
|
|
|
|
|
|
|
|
|
@ -1960,7 +1980,7 @@ private static class MessageImpl
|
|
|
|
|
this.messageReceivedDate = messageReceivedDate;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public long getMessageReceivedDate()
|
|
|
|
|
public Date getMessageReceivedDate()
|
|
|
|
|
{
|
|
|
|
|
return messageReceivedDate;
|
|
|
|
|
}
|
|
|
|
|
@ -1975,8 +1995,8 @@ private static class MessageEventComparator<T>
|
|
|
|
|
{
|
|
|
|
|
public int compare(T o1, T o2)
|
|
|
|
|
{
|
|
|
|
|
long date1;
|
|
|
|
|
long date2;
|
|
|
|
|
Date date1;
|
|
|
|
|
Date date2;
|
|
|
|
|
|
|
|
|
|
if(o1 instanceof MessageDeliveredEvent)
|
|
|
|
|
date1 = ((MessageDeliveredEvent)o1).getTimestamp();
|
|
|
|
|
@ -1992,7 +2012,7 @@ else if(o2 instanceof MessageReceivedEvent)
|
|
|
|
|
else
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
return (date1 < date2) ? -1 : ((date1 == date2) ? 0 : 1);
|
|
|
|
|
return date1.compareTo(date2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -2006,8 +2026,8 @@ private static class ChatRoomMessageEventComparator<T>
|
|
|
|
|
{
|
|
|
|
|
public int compare(T o1, T o2)
|
|
|
|
|
{
|
|
|
|
|
long date1;
|
|
|
|
|
long date2;
|
|
|
|
|
Date date1;
|
|
|
|
|
Date date2;
|
|
|
|
|
|
|
|
|
|
if(o1 instanceof ChatRoomMessageDeliveredEvent)
|
|
|
|
|
date1 = ((ChatRoomMessageDeliveredEvent)o1).getTimestamp();
|
|
|
|
|
@ -2023,7 +2043,7 @@ else if(o2 instanceof ChatRoomMessageReceivedEvent)
|
|
|
|
|
else
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
return (date1 < date2) ? -1 : ((date1 == date2) ? 0 : 1);
|
|
|
|
|
return date1.compareTo(date2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|