diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index cdee63e47e57187965c0b3a44ca674706a325a95..b9bdd21b2d2ecc5721b15ce66b1dfcf492904389 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -612,7 +612,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl private long getSortableTime() { Draft draft = getDraft(); - long messageTime = getLatestMessage().getTimeSent(); + long messageTime = getLatestMessage().getTimeReceived(); if (draft == null) { return messageTime; } else { diff --git a/src/main/java/eu/siacs/conversations/entities/IndividualMessage.java b/src/main/java/eu/siacs/conversations/entities/IndividualMessage.java index a9a62237aa21d6e0745d6c41eb157f79b7044998..00d4086ae244e6cb76cc33b68f01e7e53bdab210 100644 --- a/src/main/java/eu/siacs/conversations/entities/IndividualMessage.java +++ b/src/main/java/eu/siacs/conversations/entities/IndividualMessage.java @@ -44,7 +44,7 @@ public class IndividualMessage extends Message { } private IndividualMessage(Conversational conversation, String uuid, String conversationUUid, Jid counterpart, Jid trueCounterpart, String body, long timeSent, int encryption, int status, int type, boolean carbon, String remoteMsgId, String relativeFilePath, String serverMsgId, String fingerprint, boolean read, String edited, boolean oob, String errorMessage, Set readByMarkers, boolean markable, boolean deleted, String bodyLanguage) { - super(conversation, uuid, conversationUUid, counterpart, trueCounterpart, body, timeSent, encryption, status, type, carbon, remoteMsgId, relativeFilePath, serverMsgId, fingerprint, read, edited, oob, errorMessage, readByMarkers, markable, deleted, bodyLanguage, null, null, null); + super(conversation, uuid, conversationUUid, counterpart, trueCounterpart, body, timeSent, encryption, status, type, carbon, remoteMsgId, relativeFilePath, serverMsgId, fingerprint, read, edited, oob, errorMessage, readByMarkers, markable, deleted, bodyLanguage, timeSent, null, null, null); } @Override diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index ce8c70aee695c4eefecb5ee442a131fd3b0dfb78..e88bf3265506aa2815da29217b4e3c7903e8de5f 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/src/main/java/eu/siacs/conversations/entities/Message.java @@ -115,6 +115,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable protected String subject; protected String encryptedBody; protected long timeSent; + protected long timeReceived; protected int encryption; protected int status; protected int type; @@ -174,6 +175,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable false, false, null, + System.currentTimeMillis(), null, null, null); @@ -202,6 +204,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable false, false, null, + System.currentTimeMillis(), null, null, null); @@ -213,7 +216,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable final String remoteMsgId, final String relativeFilePath, final String serverMsgId, final String fingerprint, final boolean read, final String edited, final boolean oob, final String errorMessage, final Set readByMarkers, - final boolean markable, final boolean deleted, final String bodyLanguage, final String subject, final String fileParams, final List payloads) { + final boolean markable, final boolean deleted, final String bodyLanguage, final long timeReceived, final String subject, final String fileParams, final List payloads) { this.conversation = conversation; this.uuid = uuid; this.conversationUuid = conversationUUid; @@ -237,6 +240,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable this.markable = markable; this.deleted = deleted; this.bodyLanguage = bodyLanguage; + this.timeReceived = timeReceived; this.subject = subject; if (fileParams != null) this.fileParams = new FileParams(fileParams); if (payloads != null) this.payloads = payloads; @@ -277,6 +281,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable cursor.getInt(cursor.getColumnIndex(MARKABLE)) > 0, cursor.getInt(cursor.getColumnIndex(DELETED)) > 0, cursor.getString(cursor.getColumnIndex(BODY_LANGUAGE)), + cursor.getLong(cursor.getColumnIndex(cursor.isNull(cursor.getColumnIndex("timeReceived")) ? TIME_SENT : "timeReceived")), cursor.getString(cursor.getColumnIndex("subject")), cursor.getString(cursor.getColumnIndex("fileParams")), payloads @@ -434,6 +439,10 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable return changed; } + public long getTimeReceived() { + return timeReceived; + } + public long getTimeSent() { return timeSent; } diff --git a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java index 2ab79427bce3364c8d3b5a5744f81132d43f933d..ed7993a54fbee33bfc8f995004acce373ffd22f8 100644 --- a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java @@ -265,6 +265,15 @@ public class DatabaseBackend extends SQLiteOpenHelper { db.execSQL("PRAGMA cheogram.user_version = 4"); } + if(cheogramVersion < 5) { + db.execSQL( + "ALTER TABLE cheogram." + Message.TABLENAME + " " + + "ADD COLUMN timeReceived NUMBER" + ); + db.execSQL("CREATE INDEX cheogram.message_time_received_index ON " + Message.TABLENAME + " (timeReceived)"); + db.execSQL("PRAGMA cheogram.user_version = 5"); + } + db.setTransactionSuccessful(); } finally { db.endTransaction();