aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/eu/siacs/conversations/entities/Message.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/eu/siacs/conversations/entities/Message.java')
-rw-r--r--src/main/java/eu/siacs/conversations/entities/Message.java201
1 files changed, 100 insertions, 101 deletions
diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java
index b33d5f37..33f3443b 100644
--- a/src/main/java/eu/siacs/conversations/entities/Message.java
+++ b/src/main/java/eu/siacs/conversations/entities/Message.java
@@ -1,12 +1,15 @@
package eu.siacs.conversations.entities;
+import android.content.ContentValues;
+import android.database.Cursor;
+
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import eu.siacs.conversations.Config;
-import android.content.ContentValues;
-import android.database.Cursor;
+import eu.siacs.conversations.xmpp.jid.InvalidJidException;
+import eu.siacs.conversations.xmpp.jid.Jid;
public class Message extends AbstractEntity {
@@ -29,7 +32,7 @@ public class Message extends AbstractEntity {
public static final int TYPE_TEXT = 0;
public static final int TYPE_IMAGE = 1;
- public static final int TYPE_AUDIO = 2;
+ public static final int TYPE_FILE = 2;
public static final int TYPE_STATUS = 3;
public static final int TYPE_PRIVATE = 4;
@@ -42,9 +45,10 @@ 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 RELATIVE_FILE_PATH = "relativeFilePath";
+ public boolean markable = false;
protected String conversationUuid;
- protected String counterpart;
+ protected Jid counterpart;
protected String trueCounterpart;
protected String body;
protected String encryptedBody;
@@ -52,13 +56,11 @@ public class Message extends AbstractEntity {
protected int encryption;
protected int status;
protected int type;
+ protected String relativeFilePath;
protected boolean read = true;
protected String remoteMsgId = null;
-
protected Conversation conversation = null;
protected Downloadable downloadable = null;
- public boolean markable = false;
-
private Message mNextMessage = null;
private Message mPreviousMessage = null;
@@ -67,24 +69,20 @@ public class Message extends AbstractEntity {
}
public Message(Conversation conversation, String body, int encryption) {
- this(java.util.UUID.randomUUID().toString(), conversation.getUuid(),
- conversation.getContactJid(), null, body, System
- .currentTimeMillis(), encryption,
- Message.STATUS_UNSEND, TYPE_TEXT, null);
- this.conversation = conversation;
+ this(conversation,body,encryption,STATUS_UNSEND);
}
- public Message(Conversation conversation, String counterpart, String body,
- int encryption, int status) {
+ public Message(Conversation conversation, String body, int encryption, int status) {
this(java.util.UUID.randomUUID().toString(), conversation.getUuid(),
- counterpart, null, body, System.currentTimeMillis(),
- encryption, status, TYPE_TEXT, null);
+ conversation.getContactJid().toBareJid(), null, body, System
+ .currentTimeMillis(), encryption,
+ status, TYPE_TEXT, null,null);
this.conversation = conversation;
}
- public Message(String uuid, String conversationUUid, String counterpart,
- String trueCounterpart, String body, long timeSent, int encryption,
- int status, int type, String remoteMsgId) {
+ public Message(final String uuid, final String conversationUUid, final Jid counterpart,
+ final String trueCounterpart, final String body, final long timeSent,
+ final int encryption, final int status, final int type, final String remoteMsgId, final String relativeFilePath) {
this.uuid = uuid;
this.conversationUuid = conversationUUid;
this.counterpart = counterpart;
@@ -95,6 +93,39 @@ public class Message extends AbstractEntity {
this.status = status;
this.type = type;
this.remoteMsgId = remoteMsgId;
+ this.relativeFilePath = relativeFilePath;
+ }
+
+ public static Message fromCursor(Cursor cursor) {
+ Jid jid;
+ try {
+ String value = cursor.getString(cursor.getColumnIndex(COUNTERPART));
+ if (value!=null) {
+ jid = Jid.fromString(value);
+ } else {
+ jid = null;
+ }
+ } catch (InvalidJidException e) {
+ jid = null;
+ }
+ return new Message(cursor.getString(cursor.getColumnIndex(UUID)),
+ cursor.getString(cursor.getColumnIndex(CONVERSATION)),
+ jid,
+ cursor.getString(cursor.getColumnIndex(TRUE_COUNTERPART)),
+ cursor.getString(cursor.getColumnIndex(BODY)),
+ cursor.getLong(cursor.getColumnIndex(TIME_SENT)),
+ cursor.getInt(cursor.getColumnIndex(ENCRYPTION)),
+ cursor.getInt(cursor.getColumnIndex(STATUS)),
+ cursor.getInt(cursor.getColumnIndex(TYPE)),
+ cursor.getString(cursor.getColumnIndex(REMOTE_MSG_ID)),
+ cursor.getString(cursor.getColumnIndex(RELATIVE_FILE_PATH)));
+ }
+
+ public static Message createStatusMessage(Conversation conversation) {
+ Message message = new Message();
+ message.setType(Message.TYPE_STATUS);
+ message.setConversation(conversation);
+ return message;
}
@Override
@@ -102,7 +133,11 @@ public class Message extends AbstractEntity {
ContentValues values = new ContentValues();
values.put(UUID, uuid);
values.put(CONVERSATION, conversationUuid);
- values.put(COUNTERPART, counterpart);
+ if (counterpart == null) {
+ values.putNull(COUNTERPART);
+ } else {
+ values.put(COUNTERPART, counterpart.toString());
+ }
values.put(TRUE_COUNTERPART, trueCounterpart);
values.put(BODY, body);
values.put(TIME_SENT, timeSent);
@@ -110,6 +145,7 @@ public class Message extends AbstractEntity {
values.put(STATUS, status);
values.put(TYPE, type);
values.put(REMOTE_MSG_ID, remoteMsgId);
+ values.put(RELATIVE_FILE_PATH, relativeFilePath);
return values;
}
@@ -121,10 +157,18 @@ public class Message extends AbstractEntity {
return this.conversation;
}
- public String getCounterpart() {
+ public void setConversation(Conversation conv) {
+ this.conversation = conv;
+ }
+
+ public Jid getCounterpart() {
return counterpart;
}
+ public void setCounterpart(final Jid counterpart) {
+ this.counterpart = counterpart;
+ }
+
public Contact getContact() {
if (this.conversation.getMode() == Conversation.MODE_SINGLE) {
return this.conversation.getContact();
@@ -142,6 +186,10 @@ public class Message extends AbstractEntity {
return body;
}
+ public void setBody(String body) {
+ this.body = body;
+ }
+
public long getTimeSent() {
return timeSent;
}
@@ -150,37 +198,32 @@ public class Message extends AbstractEntity {
return encryption;
}
+ public void setEncryption(int encryption) {
+ this.encryption = encryption;
+ }
+
public int getStatus() {
return status;
}
- public String getRemoteMsgId() {
- return this.remoteMsgId;
+ public void setStatus(int status) {
+ this.status = status;
}
- public void setRemoteMsgId(String id) {
- this.remoteMsgId = id;
+ public void setRelativeFilePath(String path) {
+ this.relativeFilePath = path;
}
- public static Message fromCursor(Cursor cursor) {
- return new Message(cursor.getString(cursor.getColumnIndex(UUID)),
- cursor.getString(cursor.getColumnIndex(CONVERSATION)),
- cursor.getString(cursor.getColumnIndex(COUNTERPART)),
- cursor.getString(cursor.getColumnIndex(TRUE_COUNTERPART)),
- cursor.getString(cursor.getColumnIndex(BODY)),
- cursor.getLong(cursor.getColumnIndex(TIME_SENT)),
- cursor.getInt(cursor.getColumnIndex(ENCRYPTION)),
- cursor.getInt(cursor.getColumnIndex(STATUS)),
- cursor.getInt(cursor.getColumnIndex(TYPE)),
- cursor.getString(cursor.getColumnIndex(REMOTE_MSG_ID)));
+ public String getRelativeFilePath() {
+ return this.relativeFilePath;
}
- public void setConversation(Conversation conv) {
- this.conversation = conv;
+ public String getRemoteMsgId() {
+ return this.remoteMsgId;
}
- public void setStatus(int status) {
- this.status = status;
+ public void setRemoteMsgId(String id) {
+ this.remoteMsgId = id;
}
public boolean isRead() {
@@ -199,14 +242,6 @@ public class Message extends AbstractEntity {
this.timeSent = time;
}
- public void setEncryption(int encryption) {
- this.encryption = encryption;
- }
-
- public void setBody(String body) {
- this.body = body;
- }
-
public String getEncryptedBody() {
return this.encryptedBody;
}
@@ -215,57 +250,24 @@ public class Message extends AbstractEntity {
this.encryptedBody = body;
}
- public void setType(int type) {
- this.type = type;
- }
-
public int getType() {
return this.type;
}
- public void setPresence(String presence) {
- if (presence == null) {
- this.counterpart = this.counterpart.split("/", 2)[0];
- } else {
- this.counterpart = this.counterpart.split("/", 2)[0] + "/"
- + presence;
- }
+ public void setType(int type) {
+ this.type = type;
}
public void setTrueCounterpart(String trueCounterpart) {
this.trueCounterpart = trueCounterpart;
}
- public String getPresence() {
- String[] counterparts = this.counterpart.split("/", 2);
- if (counterparts.length == 2) {
- return counterparts[1];
- } else {
- if (this.counterpart.contains("/")) {
- return "";
- } else {
- return null;
- }
- }
- }
-
- public void setDownloadable(Downloadable downloadable) {
- this.downloadable = downloadable;
- }
-
public Downloadable getDownloadable() {
return this.downloadable;
}
- public static Message createStatusMessage(Conversation conversation) {
- Message message = new Message();
- message.setType(Message.TYPE_STATUS);
- message.setConversation(conversation);
- return message;
- }
-
- public void setCounterpart(String counterpart) {
- this.counterpart = counterpart;
+ public void setDownloadable(Downloadable downloadable) {
+ this.downloadable = downloadable;
}
public boolean equals(Message message) {
@@ -320,13 +322,14 @@ public class Message extends AbstractEntity {
&& message.getEncryption() != Message.ENCRYPTION_PGP
&& this.getType() == message.getType()
&& this.getEncryption() == message.getEncryption()
+ && this.getCounterpart() != null
&& this.getCounterpart().equals(message.getCounterpart())
&& (message.getTimeSent() - this.getTimeSent()) <= (Config.MESSAGE_MERGE_WINDOW * 1000) && ((this
.getStatus() == message.getStatus() || ((this.getStatus() == Message.STATUS_SEND || this
.getStatus() == Message.STATUS_SEND_RECEIVED) && (message
.getStatus() == Message.STATUS_UNSEND
|| message.getStatus() == Message.STATUS_SEND || message
- .getStatus() == Message.STATUS_SEND_DISPLAYED))))
+ .getStatus() == Message.STATUS_SEND_DISPLAYED))))
&& !message.bodyContainsDownloadable()
&& !this.bodyContainsDownloadable());
}
@@ -359,13 +362,9 @@ public class Message extends AbstractEntity {
public boolean wasMergedIntoPrevious() {
Message prev = this.prev();
- if (prev == null) {
- return false;
- } else {
- return prev.mergeable(this);
- }
+ return prev != null && prev.mergeable(this);
}
-
+
public boolean trusted() {
Contact contact = this.getContact();
return (status > STATUS_RECEIVED || (contact != null && contact.trusted()));
@@ -390,15 +389,15 @@ public class Message extends AbstractEntity {
}
String[] extensionParts = filename.split("\\.");
if (extensionParts.length == 2
- && Arrays.asList(Downloadable.VALID_EXTENSIONS).contains(
- extensionParts[extensionParts.length - 1])) {
+ && Arrays.asList(Downloadable.VALID_IMAGE_EXTENSIONS).contains(
+ extensionParts[extensionParts.length - 1])) {
return true;
} else if (extensionParts.length == 3
&& Arrays
- .asList(Downloadable.VALID_CRYPTO_EXTENSIONS)
- .contains(extensionParts[extensionParts.length - 1])
- && Arrays.asList(Downloadable.VALID_EXTENSIONS).contains(
- extensionParts[extensionParts.length - 2])) {
+ .asList(Downloadable.VALID_CRYPTO_EXTENSIONS)
+ .contains(extensionParts[extensionParts.length - 1])
+ && Arrays.asList(Downloadable.VALID_IMAGE_EXTENSIONS).contains(
+ extensionParts[extensionParts.length - 2])) {
return true;
} else {
return false;
@@ -410,7 +409,7 @@ public class Message extends AbstractEntity {
public ImageParams getImageParams() {
ImageParams params = getLegacyImageParams();
- if (params!=null) {
+ if (params != null) {
return params;
}
params = new ImageParams();
@@ -473,7 +472,7 @@ public class Message extends AbstractEntity {
}
return params;
}
-
+
public ImageParams getLegacyImageParams() {
ImageParams params = new ImageParams();
if (body == null) {