Always delete all messages when deleting a conversation.

This commit is contained in:
Alan Evans 2021-02-23 23:59:53 -04:00 committed by GitHub
parent 8950100bd7
commit be4b687e48
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -240,35 +240,6 @@ public class ThreadDatabase extends Database {
notifyConversationListListeners();
}
private void deleteThread(long threadId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.delete(TABLE_NAME, ID_WHERE, new String[] {threadId + ""});
notifyConversationListListeners();
ConversationUtil.clearShortcuts(context, Collections.singleton(threadId));
}
private void deleteThreads(Set<Long> threadIds) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
String where = "";
for (long threadId : threadIds) {
where += ID + " = '" + threadId + "' OR ";
}
where = where.substring(0, where.length() - 4);
db.delete(TABLE_NAME, where, null);
notifyConversationListListeners();
ConversationUtil.clearShortcuts(context, threadIds);
}
private void deleteAllThreads() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.delete(TABLE_NAME, null, null);
notifyConversationListListeners();
ConversationUtil.clearAllShortcuts(context);
}
public void trimAllThreads(int length, long trimBeforeDate) {
if (length == NO_TRIM_MESSAGE_COUNT_SET && trimBeforeDate == NO_TRIM_BEFORE_DATE_SET) {
return;
@ -978,28 +949,74 @@ public class ThreadDatabase extends Database {
}
public void deleteConversation(long threadId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.beginTransaction();
try {
DatabaseFactory.getSmsDatabase(context).deleteThread(threadId);
DatabaseFactory.getMmsDatabase(context).deleteThread(threadId);
DatabaseFactory.getDraftDatabase(context).clearDrafts(threadId);
deleteThread(threadId);
notifyConversationListeners(threadId);
db.delete(TABLE_NAME, ID_WHERE, new String[]{threadId + ""});
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
notifyConversationListListeners();
notifyConversationListeners(threadId);
ConversationUtil.clearShortcuts(context, Collections.singleton(threadId));
}
public void deleteConversations(Set<Long> selectedConversations) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.beginTransaction();
try {
DatabaseFactory.getSmsDatabase(context).deleteThreads(selectedConversations);
DatabaseFactory.getMmsDatabase(context).deleteThreads(selectedConversations);
DatabaseFactory.getDraftDatabase(context).clearDrafts(selectedConversations);
deleteThreads(selectedConversations);
notifyConversationListeners(selectedConversations);
StringBuilder where = new StringBuilder();
for (long threadId : selectedConversations) {
if (where.length() > 0) {
where.append(" OR ");
}
where.append(ID + " = '").append(threadId).append("'");
}
db.delete(TABLE_NAME, where.toString(), null);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
notifyConversationListListeners();
notifyConversationListeners(selectedConversations);
ConversationUtil.clearShortcuts(context, selectedConversations);
}
public void deleteAllConversations() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.beginTransaction();
try {
DatabaseFactory.getSmsDatabase(context).deleteAllThreads();
DatabaseFactory.getMmsDatabase(context).deleteAllThreads();
DatabaseFactory.getDraftDatabase(context).clearAllDrafts();
deleteAllThreads();
db.delete(TABLE_NAME, null, null);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
notifyConversationListListeners();
ConversationUtil.clearAllShortcuts(context);
}
public long getThreadIdIfExistsFor(@NonNull RecipientId recipientId) {
@ -1229,8 +1246,7 @@ public class ThreadDatabase extends Database {
if (count == 0) {
if (allowDeletion) {
deleteThread(threadId);
notifyConversationListListeners();
deleteConversation(threadId);
}
return true;
}
@ -1249,8 +1265,7 @@ public class ThreadDatabase extends Database {
notifyConversationListListeners();
return false;
} else {
deleteThread(threadId);
notifyConversationListListeners();
deleteConversation(threadId);
return true;
}
} finally {