diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java index 5c9cdfbbb4..7bd3df90b3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java @@ -741,13 +741,21 @@ public class MmsDatabase extends MessageDatabase { String storiesBeforeTimestampWhere = IS_STORY_CLAUSE + " AND " + DATE_SENT + " < ?"; String[] sharedArgs = SqlUtil.buildArgs(timestamp); String deleteStoryRepliesQuery = "DELETE FROM " + TABLE_NAME + " " + - "WHERE " + PARENT_STORY_ID + " IN (" + + "WHERE " + PARENT_STORY_ID + " > 0 AND " + PARENT_STORY_ID + " IN (" + + "SELECT " + ID + " " + + "FROM " + TABLE_NAME + " " + + "WHERE " + storiesBeforeTimestampWhere + + ")"; + String disassociateQuoteQuery = "UPDATE " + TABLE_NAME + " " + + "SET " + QUOTE_MISSING + " = 1, " + QUOTE_BODY + " = '' " + + "WHERE " + PARENT_STORY_ID + " < 0 AND ABS(" + PARENT_STORY_ID + ") IN (" + "SELECT " + ID + " " + "FROM " + TABLE_NAME + " " + "WHERE " + storiesBeforeTimestampWhere + ")"; - db.rawQuery(deleteStoryRepliesQuery, sharedArgs); + db.execSQL(deleteStoryRepliesQuery, sharedArgs); + db.execSQL(disassociateQuoteQuery, sharedArgs); try (Cursor cursor = db.query(TABLE_NAME, new String[]{RECIPIENT_ID}, storiesBeforeTimestampWhere, sharedArgs, null, null, null)) { while (cursor != null && cursor.moveToNext()) { @@ -756,10 +764,18 @@ public class MmsDatabase extends MessageDatabase { } } - int deletedStories = db.delete(TABLE_NAME, storiesBeforeTimestampWhere, sharedArgs); + int deletedStoryCount; + try (Cursor cursor = db.query(TABLE_NAME, new String[]{ID}, storiesBeforeTimestampWhere, sharedArgs, null, null, null)) { + deletedStoryCount = cursor.getCount(); + + while (cursor.moveToNext()) { + long id = cursor.getLong(cursor.getColumnIndexOrThrow(ID)); + deleteMessage(id); + } + } db.setTransactionSuccessful(); - return deletedStories; + return deletedStoryCount; } finally { db.endTransaction(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java index 39c40a3e1a..341a652c0d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java @@ -157,7 +157,9 @@ public class MmsSmsDatabase extends Database { public int getMessagePositionOnOrAfterTimestamp(long threadId, long timestamp) { String[] projection = new String[] { "COUNT(*)" }; - String selection = MmsSmsColumns.THREAD_ID + " = " + threadId + " AND " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " >= " + timestamp; + String selection = MmsSmsColumns.THREAD_ID + " = " + threadId + " AND " + + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " >= " + timestamp + " AND " + + MmsDatabase.STORY_TYPE + " = 0 AND " + MmsDatabase.PARENT_STORY_ID + " <= 0"; try (Cursor cursor = queryTables(projection, selection, null, null)) { if (cursor != null && cursor.moveToNext()) { @@ -595,7 +597,8 @@ public class MmsSmsDatabase extends Database { public int getMessagePositionInConversation(long threadId, long receivedTimestamp) { String order = MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " DESC"; String selection = MmsSmsColumns.THREAD_ID + " = " + threadId + " AND " + - MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " > " + receivedTimestamp; + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " > " + receivedTimestamp + " AND " + + MmsDatabase.STORY_TYPE + " = 0 AND " + MmsDatabase.PARENT_STORY_ID + " <= 0"; try (Cursor cursor = queryTables(new String[]{ "COUNT(*)" }, selection, order, null)) { if (cursor != null && cursor.moveToFirst()) {