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 @@ -39,9 +39,8 @@ interface MessageDataProvider {
fun isDeletedMessage(id: MessageId): Boolean
fun handleSuccessfulAttachmentUpload(attachmentId: Long, attachmentStream: SignalServiceAttachmentStream, attachmentKey: ByteArray, uploadResult: UploadResult)
fun handleFailedAttachmentUpload(attachmentId: Long)
fun getMessageForQuote(timestamp: Long, author: Address): Triple<Long, Boolean, String>?
fun getMessageForQuote(threadId: Long, timestamp: Long, author: Address): Triple<Long, Boolean, String>?
fun getAttachmentsAndLinkPreviewFor(mmsId: Long): List<Attachment>
fun getMessageBodyFor(timestamp: Long, author: String): String
fun getAttachmentIDsFor(mmsMessageId: Long): List<Long>
fun getLinkPreviewAttachmentIDFor(mmsMessageId: Long): Long?
}
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ interface StorageProtocol {
fun addReceivedMessageTimestamp(timestamp: Long)
fun removeReceivedMessageTimestamps(timestamps: Set<Long>)
fun getAttachmentsForMessage(mmsMessageId: Long): List<DatabaseAttachment>
fun getMessageBy(timestamp: Long, author: String): MessageRecord?
fun getMessageBy(threadId: Long, timestamp: Long, author: String): 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 @@ -71,7 +71,6 @@ import org.thoughtcrime.securesms.database.model.MessageId
import org.thoughtcrime.securesms.database.model.ReactionRecord
import org.thoughtcrime.securesms.dependencies.ManagerScope
import org.thoughtcrime.securesms.pro.ProStatusManager
import org.thoughtcrime.securesms.repository.ConversationRepository
import org.thoughtcrime.securesms.sskenvironment.ReadReceiptManager
import java.security.SignatureException
import javax.inject.Inject
Expand Down Expand Up @@ -245,7 +244,8 @@ class ReceivedMessageHandler @Inject constructor(

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

Expand Down Expand Up @@ -327,7 +327,7 @@ class ReceivedMessageHandler @Inject constructor(
Address.fromSerialized(quote.author)
}

val messageInfo = messageDataProvider.getMessageForQuote(quote.id, author)
val messageInfo = messageDataProvider.getMessageForQuote(context.threadId, quote.id, author)
quoteMessageBody = messageInfo?.third
quoteModel = if (messageInfo != null) {
val attachments = if (messageInfo.second) messageDataProvider.getAttachmentsAndLinkPreviewFor(messageInfo.first) else ArrayList()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,21 +74,16 @@ class DatabaseAttachmentProvider(context: Context, helper: Provider<SQLCipherOpe
attachmentDatabase.setTransferState(attachmentId, attachmentState.value)
}

override fun getMessageForQuote(timestamp: Long, author: Address): Triple<Long, Boolean, String>? {
override fun getMessageForQuote(threadId: Long, timestamp: Long, author: Address): Triple<Long, Boolean, String>? {
val messagingDatabase = DatabaseComponent.get(context).mmsSmsDatabase()
val message = messagingDatabase.getMessageFor(timestamp, author)
val message = messagingDatabase.getMessageFor(threadId, timestamp, author)
return if (message != null) Triple(message.id, message.isMms, message.body) else null
}

override fun getAttachmentsAndLinkPreviewFor(mmsId: Long): List<Attachment> {
return DatabaseComponent.get(context).attachmentDatabase().getAttachmentsForMessage(mmsId)
}

override fun getMessageBodyFor(timestamp: Long, author: String): String {
val messagingDatabase = DatabaseComponent.get(context).mmsSmsDatabase()
return messagingDatabase.getMessageFor(timestamp, author)!!.body
}

override fun getAttachmentIDsFor(mmsMessageId: Long): List<Long> {
return DatabaseComponent.get(context)
.attachmentDatabase()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1299,8 +1299,9 @@ class MmsDatabase @Inject constructor(
private fun getQuote(cursor: Cursor): Quote? {
val quoteId = cursor.getLong(cursor.getColumnIndexOrThrow(QUOTE_ID))
val quoteAuthor = cursor.getString(cursor.getColumnIndexOrThrow(QUOTE_AUTHOR))
val threadId = cursor.getLong(cursor.getColumnIndexOrThrow(THREAD_ID))
if (quoteId == 0L || quoteAuthor.isNullOrBlank()) return null
val retrievedQuote = mmsSmsDatabase.get().getMessageFor(quoteId, quoteAuthor, false)
val retrievedQuote = mmsSmsDatabase.get().getMessageFor(threadId, quoteId, quoteAuthor, false)
val quoteText = retrievedQuote?.body
val quoteMissing = retrievedQuote == null
val quoteDeck = (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,13 +123,15 @@ public MmsSmsDatabase(Context context, Provider<SQLCipherOpenHelper> databaseHel
}
}

public @Nullable MessageRecord getMessageFor(long timestamp, String serializedAuthor) {
return getMessageFor(timestamp, serializedAuthor, true);
public @Nullable MessageRecord getMessageFor(long threadId, long timestamp, String serializedAuthor) {
return getMessageFor(threadId, timestamp, serializedAuthor, true);
}

public @Nullable MessageRecord getMessageFor(long timestamp, String serializedAuthor, boolean getQuote) {
public @Nullable MessageRecord getMessageFor(long threadId, long timestamp, String serializedAuthor, boolean getQuote) {
String selection = MmsSmsColumns.NORMALIZED_DATE_SENT + " = " + timestamp + " AND " +
MmsSmsColumns.THREAD_ID + " = " + threadId;

try (Cursor cursor = queryTables(PROJECTION, MmsSmsColumns.NORMALIZED_DATE_SENT + " = " + timestamp, true, null, null, null)) {
try (Cursor cursor = queryTables(PROJECTION, selection, true, null, null, null)) {
MmsSmsDatabase.Reader reader = readerFor(cursor, getQuote);

MessageRecord messageRecord;
Expand Down Expand Up @@ -166,8 +168,8 @@ public MessageId getLastSentMessageID(long threadId) {
return null;
}

public @Nullable MessageRecord getMessageFor(long timestamp, Address author) {
return getMessageFor(timestamp, author.toString());
public @Nullable MessageRecord getMessageFor(long threadId, long timestamp, Address author) {
return getMessageFor(threadId, timestamp, author.toString());
}

public Cursor getConversation(long threadId, boolean reverse, long offset, long limit) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ import org.thoughtcrime.securesms.mms.PartAuthority
import org.thoughtcrime.securesms.util.DateUtils.Companion.secondsToInstant
import org.thoughtcrime.securesms.util.FilenameUtils
import org.thoughtcrime.securesms.util.SessionMetaProtocol
import java.time.Instant
import javax.inject.Inject
import javax.inject.Provider
import javax.inject.Singleton
Expand Down Expand Up @@ -481,10 +480,10 @@ open class Storage @Inject constructor(
SessionMetaProtocol.removeTimestamps(timestamps)
}

override fun getMessageBy(timestamp: Long, author: String): MessageRecord? {
override fun getMessageBy(threadId: Long, timestamp: Long, author: String): MessageRecord? {
val database = mmsSmsDatabase
val address = fromSerialized(author)
return database.getMessageFor(timestamp, address)
return database.getMessageFor(threadId, timestamp, address)
}

override fun updateSentTimestamp(
Expand Down Expand Up @@ -636,7 +635,7 @@ open class Storage @Inject constructor(
)
val mmsDB = mmsDatabase
val mmsSmsDB = mmsSmsDatabase
if (mmsSmsDB.getMessageFor(sentTimestamp, userPublicKey) != null) {
if (mmsSmsDB.getMessageFor(threadID, sentTimestamp, userPublicKey) != null) {
Log.w(TAG, "Bailing from insertOutgoingInfoMessage because we believe the message has already been sent!")
return null
}
Expand Down Expand Up @@ -797,7 +796,7 @@ open class Storage @Inject constructor(
val mmsDB = mmsDatabase
val mmsSmsDB = mmsSmsDatabase
// check for conflict here, not returning duplicate in case it's different
if (mmsSmsDB.getMessageFor(sentTimestamp, userPublicKey) != null) return null
if (mmsSmsDB.getMessageFor(threadID, sentTimestamp, userPublicKey) != null) return null
val infoMessageID = mmsDB.insertMessageOutbox(
infoMessage,
threadID,
Expand Down