Batched POP3 purge

This commit is contained in:
M66B 2022-12-09 19:45:23 +01:00
parent 38c6c3b513
commit cd33310601
2 changed files with 25 additions and 12 deletions

View File

@ -2969,17 +2969,28 @@ class Core {
private static void onPurgeFolder(Context context, EntityFolder folder) {
// POP3
DB db = DB.getInstance(context);
try {
db.beginTransaction();
int count = 0;
int purged = 0;
do {
if (count > 0) {
try {
Thread.sleep(YIELD_DURATION);
} catch (InterruptedException ignored) {
}
}
int purged = db.message().deleteHiddenMessages(folder.id);
Log.i(folder.name + " purge count=" + purged);
DB db = DB.getInstance(context);
try {
db.beginTransaction();
count = db.message().deleteHiddenMessages(folder.id, 100);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
purged += count;
Log.i(folder.name + " purge count=" + count + "/" + purged);
} while (count > 0);
}
private static void onRule(Context context, JSONArray jargs, EntityMessage message) throws JSONException, MessagingException {

View File

@ -947,10 +947,12 @@ public interface DaoMessage {
" AND NOT uid IS NULL")
int deleteBrowsedMessages(long folder, long before);
@Query("DELETE FROM message" +
@Query("DELETE FROM message WHERE id IN (" +
" SELECT id FROM message" +
" WHERE folder = :folder" +
" AND ui_hide")
int deleteHiddenMessages(long folder);
" AND ui_hide" +
" LIMIT :limit)")
int deleteHiddenMessages(long folder, int limit);
@Query("DELETE FROM message" +
" WHERE folder = :folder" +