Batched POP3 purge

pull/210/head
M66B 2 years ago
parent 38c6c3b513
commit cd33310601

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

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

Loading…
Cancel
Save