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