Add delivery receipts to the MSL.

This commit is contained in:
Greyson Parrelli
2021-06-30 14:36:00 -04:00
committed by Alex Hart
parent 5372f79c40
commit 3d0e15e2b8
15 changed files with 182 additions and 88 deletions

View File

@@ -131,7 +131,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
public abstract List<MarkedMessageInfo> setEntireThreadRead(long threadId);
public abstract List<MarkedMessageInfo> setMessagesReadSince(long threadId, long timestamp);
public abstract List<MarkedMessageInfo> setAllMessagesRead();
public abstract Pair<Long, Long> updateBundleMessageBody(long messageId, String body);
public abstract InsertResult updateBundleMessageBody(long messageId, String body);
public abstract @NonNull List<MarkedMessageInfo> getViewedIncomingMessages(long threadId);
public abstract @Nullable MarkedMessageInfo setIncomingMessageViewed(long messageId);
public abstract @NonNull List<MarkedMessageInfo> setIncomingMessagesViewed(@NonNull List<Long> messageIds);

View File

@@ -142,12 +142,12 @@ class MessageSendLogDatabase constructor(context: Context?, databaseHelper: SQLC
)
}
fun insertIfPossible(recipientId: RecipientId, sentTimestamp: Long, sendMessageResult: SendMessageResult, contentHint: ContentHint, relatedMessageId: Long, isRelatedMessageMms: Boolean) {
fun insertIfPossible(recipientId: RecipientId, sentTimestamp: Long, sendMessageResult: SendMessageResult, contentHint: ContentHint, messageId: MessageId) {
if (!FeatureFlags.senderKey()) return
if (sendMessageResult.isSuccess && sendMessageResult.success.content.isPresent) {
val recipientDevice = listOf(RecipientDevice(recipientId, sendMessageResult.success.devices))
insert(recipientDevice, sentTimestamp, sendMessageResult.success.content.get(), contentHint, listOf(MessageId(relatedMessageId, isRelatedMessageMms)))
insert(recipientDevice, sentTimestamp, sendMessageResult.success.content.get(), contentHint, listOf(messageId))
}
}

View File

@@ -380,7 +380,7 @@ public class MmsDatabase extends MessageDatabase {
}
@Override
public Pair<Long, Long> updateBundleMessageBody(long messageId, String body) {
public InsertResult updateBundleMessageBody(long messageId, String body) {
throw new UnsupportedOperationException();
}

View File

@@ -664,7 +664,7 @@ public class SmsDatabase extends MessageDatabase {
}
@Override
public Pair<Long, Long> updateBundleMessageBody(long messageId, String body) {
public InsertResult updateBundleMessageBody(long messageId, String body) {
long type = Types.BASE_INBOX_TYPE | Types.SECURE_MESSAGE_BIT | Types.PUSH_MESSAGE_BIT;
return updateMessageBodyAndType(messageId, body, Types.TOTAL_MASK, type);
}
@@ -684,7 +684,7 @@ public class SmsDatabase extends MessageDatabase {
return Collections.emptyList();
}
private Pair<Long, Long> updateMessageBodyAndType(long messageId, String body, long maskOff, long maskOn) {
private InsertResult updateMessageBodyAndType(long messageId, String body, long maskOff, long maskOn) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.execSQL("UPDATE " + TABLE_NAME + " SET " + BODY + " = ?, " +
TYPE + " = (" + TYPE + " & " + (Types.TOTAL_MASK - maskOff) + " | " + maskOn + ") " +
@@ -697,7 +697,7 @@ public class SmsDatabase extends MessageDatabase {
notifyConversationListeners(threadId);
notifyConversationListListeners();
return new Pair<>(messageId, threadId);
return new InsertResult(messageId, threadId);
}
@Override

View File

@@ -7,4 +7,16 @@ package org.thoughtcrime.securesms.database.model
data class MessageId(
val id: Long,
@get:JvmName("isMms") val mms: Boolean
)
) {
fun serialize(): String {
return "$id|$mms"
}
companion object {
@JvmStatic
fun deserialize(serialized: String): MessageId {
val parts: List<String> = serialized.split("|")
return MessageId(parts[0].toLong(), parts[1].toBoolean())
}
}
}