SES-2818 - Making sure we set the lastMessage in a thread properly, without using 'marked as deleted' messages

pull/1697/head
ThomasSession 6 months ago
parent 1b2a80d786
commit 3a8c9b0e59

@ -17,6 +17,9 @@
package org.thoughtcrime.securesms.database;
import static org.thoughtcrime.securesms.database.MmsDatabase.MESSAGE_BOX;
import static org.thoughtcrime.securesms.database.MmsSmsColumns.Types.BASE_DELETED_INCOMING_TYPE;
import static org.thoughtcrime.securesms.database.MmsSmsColumns.Types.BASE_DELETED_OUTGOING_TYPE;
import static org.thoughtcrime.securesms.database.MmsSmsColumns.Types.BASE_TYPE_MASK;
import android.content.Context;
import android.database.Cursor;
@ -96,6 +99,14 @@ public class MmsSmsDatabase extends Database {
}
}
public @Nullable MessageRecord getNonDeletedMessageForTimestamp(long timestamp) {
String selection = MmsSmsColumns.NORMALIZED_DATE_SENT + " = " + timestamp;
try (Cursor cursor = queryTables(PROJECTION, selection, null, null)) {
MmsSmsDatabase.Reader reader = readerFor(cursor);
return reader.getNext();
}
}
public @Nullable MessageRecord getMessageFor(long timestamp, String serializedAuthor) {
return getMessageFor(timestamp, serializedAuthor, true);
}
@ -323,7 +334,9 @@ public class MmsSmsDatabase extends Database {
public long getLastMessageTimestamp(long threadId) {
String order = MmsSmsColumns.NORMALIZED_DATE_SENT + " DESC";
String selection = MmsSmsColumns.THREAD_ID + " = " + threadId;
// make sure the last message isn't marked as deleted
String selection = MmsSmsColumns.THREAD_ID + " = " + threadId + " AND " +
"(ifnull("+SmsDatabase.TYPE+", "+MmsDatabase.MESSAGE_BOX+") & "+BASE_TYPE_MASK+") NOT IN ("+BASE_DELETED_OUTGOING_TYPE+", "+BASE_DELETED_INCOMING_TYPE+")"; // this ugly line checks whether the type is deleted (incoming or outgoing) for either the sms table or the mms table
try (Cursor cursor = queryTables(PROJECTION, selection, order, "1")) {
if (cursor.moveToFirst()) {

@ -138,6 +138,8 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper {
this.context = context.getApplicationContext();
this.databaseSecret = databaseSecret;
Log.d("", "*** DB PASSWORD: "+databaseSecret.asString());
}
private static void applySQLCipherPragmas(SQLiteConnection connection, boolean useSQLCipher4) {

Loading…
Cancel
Save