Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,8 @@ interface StorageProtocol {
fun removeReceivedMessageTimestamps(timestamps: Set<Long>)
fun getAttachmentsForMessage(mmsMessageId: Long): List<DatabaseAttachment>
fun getMessageBy(threadId: Long, timestamp: Long, author: String): MessageRecord?
@Deprecated("We shouldn't be querying messages by timestamp alone. Use `getMessageBy` when possible ")
fun getMessageByTimestamp(timestamp: Long, author: String, getQuote: Boolean): MessageRecord?
fun updateSentTimestamp(messageId: MessageId, newTimestamp: Long)
fun markAsResyncing(messageId: MessageId)
fun markAsSyncing(messageId: MessageId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ class BatchMessageReceiveJob @AssistedInject constructor(
}

is UnsendRequest -> {
val deletedMessage = receivedMessageHandler.handleUnsendRequest(message, threadId)
val deletedMessage = receivedMessageHandler.handleUnsendRequest(message)

// If we removed a message then ensure it isn't in the 'messageIds'
if (deletedMessage != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ class ReceivedMessageHandler @Inject constructor(
}
}
is DataExtractionNotification -> handleDataExtractionNotification(message)
is UnsendRequest -> handleUnsendRequest(message, threadId)
is UnsendRequest -> handleUnsendRequest(message)
is MessageRequestResponse -> messageRequestResponseHandler.get().handleExplicitRequestResponseMessage(message)
is VisibleMessage -> handleVisibleMessage(
message = message,
Expand Down Expand Up @@ -221,7 +221,7 @@ class ReceivedMessageHandler @Inject constructor(
}


fun handleUnsendRequest(message: UnsendRequest, threadId: Long): MessageId? {
fun handleUnsendRequest(message: UnsendRequest): MessageId? {
val userPublicKey = storage.getUserPublicKey()
val userAuth = storage.userAuth ?: return null
val isLegacyGroupAdmin: Boolean = message.groupPublicKey?.let { key ->
Expand All @@ -244,7 +244,7 @@ class ReceivedMessageHandler @Inject constructor(

val timestamp = message.timestamp ?: return null
val author = message.author ?: return null
val messageToDelete = storage.getMessageBy(threadId, timestamp, author) ?: return null
val messageToDelete = storage.getMessageByTimestamp(timestamp, author, false) ?: return null
val messageIdToDelete = messageToDelete.messageId
val messageType = messageToDelete.individualRecipient?.getType()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,29 @@ public MmsSmsDatabase(Context context, Provider<SQLCipherOpenHelper> databaseHel
return null;
}

/**
* @deprecated We shouldn't be querying messages by timestamp alone. Use `getMessageFor` when possible
*/
@Deprecated(forRemoval = true)
public @Nullable MessageRecord getMessageByTimestamp(long timestamp, String serializedAuthor, boolean getQuote) {
try (Cursor cursor = queryTables(PROJECTION, MmsSmsColumns.NORMALIZED_DATE_SENT + " = " + timestamp, true, null, null, null)) {
MmsSmsDatabase.Reader reader = readerFor(cursor, getQuote);

MessageRecord messageRecord;
boolean isOwnNumber = Util.isOwnNumber(context, serializedAuthor);

while ((messageRecord = reader.getNext()) != null) {
if ((isOwnNumber && messageRecord.isOutgoing()) ||
(!isOwnNumber && messageRecord.getIndividualRecipient().getAddress().toString().equals(serializedAuthor)))
{
return messageRecord;
}
}
}

return null;
}

@Nullable
public MessageId getLastSentMessageID(long threadId) {
String order = MmsSmsColumns.NORMALIZED_DATE_SENT + " DESC";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -487,6 +487,12 @@ open class Storage @Inject constructor(
return database.getMessageFor(threadId, timestamp, address)
}

@Deprecated("We shouldn't be querying messages by timestamp alone. Use `getMessageBy` when possible ")
override fun getMessageByTimestamp(timestamp: Long, author: String, getQuote: Boolean): MessageRecord? {
val database = mmsSmsDatabase
return database.getMessageByTimestamp(timestamp, author, getQuote)
}

override fun updateSentTimestamp(
messageId: MessageId,
newTimestamp: Long
Expand Down