Add synced expiries job

This commit is contained in:
charles
2022-12-19 11:22:13 +11:00
parent 8a51c8882c
commit 065417ebbb
11 changed files with 151 additions and 29 deletions

View File

@@ -201,6 +201,11 @@ class DatabaseAttachmentProvider(context: Context, helper: SQLCipherOpenHelper)
return messageDB.getMessageServerHash(messageID)
}
override fun getServerHashForMessages(messageIDs: List<Long>): List<Pair<Long, String?>> {
val messageDB = DatabaseComponent.get(context).lokiMessageDatabase()
return messageDB.getMessageServerHashes(messageIDs)
}
override fun getDatabaseAttachment(attachmentId: Long): DatabaseAttachment? {
val attachmentDatabase = DatabaseComponent.get(context).attachmentDatabase()
return attachmentDatabase.getAttachment(AttachmentId(attachmentId, 0))

View File

@@ -165,6 +165,13 @@ class LokiMessageDatabase(context: Context, helper: SQLCipherOpenHelper) : Datab
}
}
fun getMessageServerHashes(messageIDs: List<Long>): List<Pair<Long, String?>> {
val database = databaseHelper.readableDatabase
return database.getAll(messageHashTable, "${Companion.messageID} IN (?)", arrayOf(messageIDs.joinToString(","))) { cursor ->
cursor.getLong(messageID) to cursor.getStringOrNull(serverHash)
}
}
fun setMessageServerHash(messageID: Long, serverHash: String) {
val database = databaseHelper.writableDatabase
val contentValues = ContentValues(2)

View File

@@ -288,6 +288,12 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa
return readerFor(rawQuery(where, null))!!
}
val expireNotStartedMessages: Reader
get() {
val where = "$EXPIRES_IN > 0 AND $EXPIRE_STARTED = 0"
return readerFor(rawQuery(where, null))!!
}
private fun updateMailboxBitmask(
id: Long,
maskOff: Long,

View File

@@ -50,6 +50,7 @@ import org.thoughtcrime.securesms.database.model.ReactionRecord;
import org.thoughtcrime.securesms.database.model.SmsMessageRecord;
import org.thoughtcrime.securesms.dependencies.DatabaseComponent;
import java.io.Closeable;
import java.io.IOException;
import java.security.SecureRandom;
import java.util.Collections;
@@ -567,6 +568,11 @@ public class SmsDatabase extends MessagingDatabase {
return rawQuery(where, null);
}
public Cursor getExpirationNotStartedMessages() {
String where = EXPIRES_IN + " > 0 AND " + EXPIRE_STARTED + " = 0";
return rawQuery(where, null);
}
public SmsMessageRecord getMessage(long messageId) throws NoSuchMessageException {
Cursor cursor = rawQuery(ID_WHERE, new String[]{messageId + ""});
Reader reader = new Reader(cursor);
@@ -740,7 +746,7 @@ public class SmsDatabase extends MessagingDatabase {
}
}
public class Reader {
public class Reader implements Closeable {
private final Cursor cursor;
@@ -805,8 +811,11 @@ public class SmsDatabase extends MessagingDatabase {
return new LinkedList<>();
}
@Override
public void close() {
cursor.close();
if (cursor != null) {
cursor.close();
}
}
}

View File

@@ -983,8 +983,25 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context,
DatabaseComponent.get(context).expirationConfigurationDatabase().setExpirationConfiguration(config)
}
override fun getExpiringMessages(messageIds: LongArray): List<Pair<String, Int>> {
return emptyList()
override fun getExpiringMessages(messageIds: List<Long>): List<Pair<Long, Long>> {
val expiringMessages = mutableListOf<Pair<Long, Long>>()
val smsDb = DatabaseComponent.get(context).smsDatabase()
smsDb.readerFor(smsDb.expirationNotStartedMessages).use { reader ->
while (reader.next != null) {
if (reader.current.id in messageIds) {
expiringMessages.add(reader.current.id to reader.current.expiresIn)
}
}
}
val mmsDb = DatabaseComponent.get(context).mmsDatabase()
mmsDb.expireNotStartedMessages.use { reader ->
while (reader.next != null) {
if (reader.current.id in messageIds) {
expiringMessages.add(reader.current.id to reader.current.expiresIn)
}
}
}
return expiringMessages
}
override fun updateDisappearingState(address: String, disappearingState: Recipient.DisappearingState) {