save server id from mam messages. check for dups before adding mam
This commit is contained in:
parent
0ab530932a
commit
ccdb0fd971
|
@ -45,6 +45,7 @@ public class Message extends AbstractEntity {
|
|||
public static String STATUS = "status";
|
||||
public static String TYPE = "type";
|
||||
public static String REMOTE_MSG_ID = "remoteMsgId";
|
||||
public static String SERVER_MSG_ID = "serverMsgId";
|
||||
public static String RELATIVE_FILE_PATH = "relativeFilePath";
|
||||
public boolean markable = false;
|
||||
protected String conversationUuid;
|
||||
|
@ -59,6 +60,7 @@ public class Message extends AbstractEntity {
|
|||
protected String relativeFilePath;
|
||||
protected boolean read = true;
|
||||
protected String remoteMsgId = null;
|
||||
protected String serverMsgId = null;
|
||||
protected Conversation conversation = null;
|
||||
protected Downloadable downloadable = null;
|
||||
private Message mNextMessage = null;
|
||||
|
@ -83,13 +85,15 @@ public class Message extends AbstractEntity {
|
|||
status,
|
||||
TYPE_TEXT,
|
||||
null,
|
||||
null,
|
||||
null);
|
||||
this.conversation = conversation;
|
||||
}
|
||||
|
||||
private Message(final String uuid, final String conversationUUid, final Jid counterpart,
|
||||
final Jid trueCounterpart, final String body, final long timeSent,
|
||||
final int encryption, final int status, final int type, final String remoteMsgId, final String relativeFilePath) {
|
||||
final int encryption, final int status, final int type, final String remoteMsgId,
|
||||
final String relativeFilePath, final String serverMsgId) {
|
||||
this.uuid = uuid;
|
||||
this.conversationUuid = conversationUUid;
|
||||
this.counterpart = counterpart;
|
||||
|
@ -101,6 +105,7 @@ public class Message extends AbstractEntity {
|
|||
this.type = type;
|
||||
this.remoteMsgId = remoteMsgId;
|
||||
this.relativeFilePath = relativeFilePath;
|
||||
this.serverMsgId = serverMsgId;
|
||||
}
|
||||
|
||||
public static Message fromCursor(Cursor cursor) {
|
||||
|
@ -136,7 +141,8 @@ public class Message extends AbstractEntity {
|
|||
cursor.getInt(cursor.getColumnIndex(STATUS)),
|
||||
cursor.getInt(cursor.getColumnIndex(TYPE)),
|
||||
cursor.getString(cursor.getColumnIndex(REMOTE_MSG_ID)),
|
||||
cursor.getString(cursor.getColumnIndex(RELATIVE_FILE_PATH)));
|
||||
cursor.getString(cursor.getColumnIndex(RELATIVE_FILE_PATH)),
|
||||
cursor.getString(cursor.getColumnIndex(SERVER_MSG_ID)));
|
||||
}
|
||||
|
||||
public static Message createStatusMessage(Conversation conversation) {
|
||||
|
@ -168,6 +174,7 @@ public class Message extends AbstractEntity {
|
|||
values.put(TYPE, type);
|
||||
values.put(REMOTE_MSG_ID, remoteMsgId);
|
||||
values.put(RELATIVE_FILE_PATH, relativeFilePath);
|
||||
values.put(SERVER_MSG_ID,serverMsgId);
|
||||
return values;
|
||||
}
|
||||
|
||||
|
@ -248,6 +255,14 @@ public class Message extends AbstractEntity {
|
|||
this.remoteMsgId = id;
|
||||
}
|
||||
|
||||
public String getServerMsgId() {
|
||||
return this.serverMsgId;
|
||||
}
|
||||
|
||||
public void setServerMsgId(String id) {
|
||||
this.serverMsgId = id;
|
||||
}
|
||||
|
||||
public boolean isRead() {
|
||||
return this.read;
|
||||
}
|
||||
|
@ -293,7 +308,15 @@ public class Message extends AbstractEntity {
|
|||
}
|
||||
|
||||
public boolean equals(Message message) {
|
||||
return (this.remoteMsgId != null) && (this.body != null) && (this.counterpart != null) && this.remoteMsgId.equals(message.getRemoteMsgId()) && this.body.equals(message.getBody()) && this.counterpart.equals(message.getCounterpart());
|
||||
if (this.serverMsgId != null && message.getServerMsgId() != null) {
|
||||
return this.serverMsgId.equals(message.getServerMsgId());
|
||||
} else {
|
||||
return this.body != null
|
||||
&& this.counterpart != null
|
||||
&& ((this.remoteMsgId != null && this.remoteMsgId.equals(message.getRemoteMsgId()))
|
||||
|| this.uuid.equals(message.getRemoteMsgId())) && this.body.equals(message.getBody())
|
||||
&& this.counterpart.equals(message.getCounterpart());
|
||||
}
|
||||
}
|
||||
|
||||
public Message next() {
|
||||
|
|
|
@ -320,7 +320,14 @@ public class MessageParser extends AbstractParser implements
|
|||
Message finishedMessage = new Message(conversation,content,encryption,status);
|
||||
finishedMessage.setTime(timestamp);
|
||||
finishedMessage.setCounterpart(counterpart);
|
||||
finishedMessage.setRemoteMsgId(message.getAttribute("id"));
|
||||
finishedMessage.setServerMsgId(result.getAttribute("id"));
|
||||
if (conversation.hasDuplicateMessage(finishedMessage)) {
|
||||
Log.d(Config.LOGTAG, "received mam message " + content+ " (duplicate)");
|
||||
return null;
|
||||
} else {
|
||||
Log.d(Config.LOGTAG, "received mam message " + content);
|
||||
}
|
||||
return finishedMessage;
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ public class DatabaseBackend extends SQLiteOpenHelper {
|
|||
private static DatabaseBackend instance = null;
|
||||
|
||||
private static final String DATABASE_NAME = "history";
|
||||
private static final int DATABASE_VERSION = 11;
|
||||
private static final int DATABASE_VERSION = 12;
|
||||
|
||||
private static String CREATE_CONTATCS_STATEMENT = "create table "
|
||||
+ Contact.TABLENAME + "(" + Contact.ACCOUNT + " TEXT, "
|
||||
|
@ -65,6 +65,7 @@ public class DatabaseBackend extends SQLiteOpenHelper {
|
|||
+ Message.BODY + " TEXT, " + Message.ENCRYPTION + " NUMBER, "
|
||||
+ Message.STATUS + " NUMBER," + Message.TYPE + " NUMBER, "
|
||||
+ Message.RELATIVE_FILE_PATH + " TEXT, "
|
||||
+ Message.SERVER_MSG_ID + " TEXT, "
|
||||
+ Message.REMOTE_MSG_ID + " TEXT, FOREIGN KEY("
|
||||
+ Message.CONVERSATION + ") REFERENCES "
|
||||
+ Conversation.TABLENAME + "(" + Conversation.UUID
|
||||
|
@ -121,6 +122,10 @@ public class DatabaseBackend extends SQLiteOpenHelper {
|
|||
db.execSQL("delete from "+Contact.TABLENAME);
|
||||
db.execSQL("update "+Account.TABLENAME+" set "+Account.ROSTERVERSION+" = NULL");
|
||||
}
|
||||
if (oldVersion < 12 && newVersion >= 12) {
|
||||
db.execSQL("ALTER TABLE " + Message.TABLENAME + " ADD COLUMN "
|
||||
+ Message.SERVER_MSG_ID + " TEXT");
|
||||
}
|
||||
}
|
||||
|
||||
public static synchronized DatabaseBackend getInstance(Context context) {
|
||||
|
|
Loading…
Reference in a new issue