Batched POP3 purge

pull/210/head
M66B 3 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
int count = 0;
int purged = 0;
do {
if (count > 0) {
try {
Thread.sleep(YIELD_DURATION);
} catch (InterruptedException ignored) {
}
}
DB db = DB.getInstance(context); DB db = DB.getInstance(context);
try { try {
db.beginTransaction(); db.beginTransaction();
count = db.message().deleteHiddenMessages(folder.id, 100);
int purged = db.message().deleteHiddenMessages(folder.id);
Log.i(folder.name + " purge count=" + purged);
db.setTransactionSuccessful(); db.setTransactionSuccessful();
} finally { } finally {
db.endTransaction(); 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 { 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