Fully delete remotely deleted stories after sending or on receive.

This commit is contained in:
Cody Henthorne
2022-11-10 10:47:14 -05:00
committed by GitHub
parent 0309f9ea89
commit 8eb3a1906e
7 changed files with 33 additions and 4 deletions

View File

@@ -189,6 +189,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns,
abstract void deleteThreads(@NonNull Set<Long> threadIds);
abstract void deleteAllThreads();
abstract void deleteAbandonedMessages();
public abstract void deleteRemotelyDeletedStory(long messageId);
public abstract List<MessageRecord> getMessagesInThreadAfterInclusive(long threadId, long timestamp, long limit);

View File

@@ -2668,6 +2668,17 @@ public class MmsDatabase extends MessageDatabase {
}
}
@Override
public void deleteRemotelyDeletedStory(long messageId) {
try (Cursor cursor = getMessageCursor(messageId)) {
if (cursor.moveToFirst() && CursorUtil.requireBoolean(cursor, REMOTE_DELETED)) {
deleteMessage(messageId);
} else {
Log.i(TAG, "Unable to delete remotely deleted story: " + messageId);
}
}
}
@Override
public List<MessageRecord> getMessagesInThreadAfterInclusive(long threadId, long timestamp, long limit) {
String where = TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? AND " +

View File

@@ -1647,6 +1647,11 @@ public class SmsDatabase extends MessageDatabase {
}
}
@Override
public void deleteRemotelyDeletedStory(long messageId) {
throw new UnsupportedOperationException();
}
@Override
public List<MessageRecord> getMessagesInThreadAfterInclusive(long threadId, long timestamp, long limit) {
String where = TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? AND " +

View File

@@ -357,7 +357,10 @@ class StorySendsDatabase(context: Context, databaseHelper: SignalDatabase) : Dat
}
val messagesWithoutAnyReceivers = localRows.map { it.messageId }.distinct() - remoteRows.map { it.messageId }.distinct()
messagesWithoutAnyReceivers.forEach { SignalDatabase.mms.markAsRemoteDelete(it) }
messagesWithoutAnyReceivers.forEach {
SignalDatabase.mms.markAsRemoteDelete(it)
SignalDatabase.mms.deleteRemotelyDeletedStory(it)
}
writableDatabase.setTransactionSuccessful()
} finally {