mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-24 21:15:48 +00:00
Support for auto-deleting old messages beyond a certain conversation thread length.
This commit is contained in:
@@ -21,6 +21,7 @@ import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteOpenHelper;
|
||||
import android.util.Log;
|
||||
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.Recipients;
|
||||
@@ -143,6 +144,56 @@ public class ThreadDatabase extends Database {
|
||||
notifyConversationListListeners();
|
||||
}
|
||||
|
||||
public void trimAllThreads(int length, ProgressListener listener) {
|
||||
Cursor cursor = null;
|
||||
int threadCount = 0;
|
||||
int complete = 0;
|
||||
|
||||
try {
|
||||
cursor = this.getConversationList();
|
||||
|
||||
if (cursor != null)
|
||||
threadCount = cursor.getCount();
|
||||
|
||||
while (cursor != null && cursor.moveToNext()) {
|
||||
long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(ID));
|
||||
trimThread(threadId, length);
|
||||
|
||||
listener.onProgress(++complete, threadCount);
|
||||
}
|
||||
} finally {
|
||||
if (cursor != null)
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
|
||||
public void trimThread(long threadId, int length) {
|
||||
Log.w("ThreadDatabase", "Trimming thread: " + threadId + " to: " + length);
|
||||
Cursor cursor = null;
|
||||
|
||||
try {
|
||||
cursor = DatabaseFactory.getMmsSmsDatabase(context).getConversation(threadId);
|
||||
|
||||
if (cursor != null && cursor.getCount() > length) {
|
||||
Log.w("ThreadDatabase", "Cursor count is greater than length!");
|
||||
cursor.moveToPosition(cursor.getCount() - length);
|
||||
|
||||
long lastTweetDate = cursor.getLong(cursor.getColumnIndexOrThrow(MmsSmsDatabase.DATE_RECEIVED));
|
||||
|
||||
Log.w("ThreadDatabase", "Cut off tweet date: " + lastTweetDate);
|
||||
|
||||
DatabaseFactory.getSmsDatabase(context).deleteMessagesInThreadBeforeDate(threadId, lastTweetDate);
|
||||
DatabaseFactory.getMmsDatabase(context).deleteMessagesInThreadBeforeDate(threadId, lastTweetDate);
|
||||
|
||||
update(threadId);
|
||||
notifyConversationListeners(threadId);
|
||||
}
|
||||
} finally {
|
||||
if (cursor != null)
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
|
||||
public void setRead(long threadId) {
|
||||
ContentValues contentValues = new ContentValues(1);
|
||||
contentValues.put(READ, 1);
|
||||
@@ -290,4 +341,8 @@ public class ThreadDatabase extends Database {
|
||||
|
||||
notifyConversationListListeners();
|
||||
}
|
||||
|
||||
public static interface ProgressListener {
|
||||
public void onProgress(int complete, int total);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user