From 4dbdd1cdfa76837f8bc3be5863e78ba3a4985ff5 Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 7 May 2022 16:00:30 +0200 Subject: [PATCH] Added POP cleanup --- app/src/main/java/eu/faircode/email/Core.java | 8 ++++++++ .../java/eu/faircode/email/DaoMessage.java | 20 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index b9d287ce1f..53184f4d94 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -3197,6 +3197,14 @@ class Core { } } + if (account.max_messages != null) { + int hidden = db.message().setMessagesUiHide(folder.id, account.max_messages); + int deleted = db.message().deleteMessagesKeep(folder.id, account.max_messages + 100); + EntityLog.log(context, account.name + " POP" + + " cleanup max=" + account.max_messages + "" + + " hidden=" + hidden + " deleted=" + deleted); + } + folder.last_sync_count = imessages.length; db.folder().setFolderLastSyncCount(folder.id, folder.last_sync_count); db.folder().setFolderLastSync(folder.id, new Date().getTime()); diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index 1a236b2e05..834b95a1bc 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -756,6 +756,16 @@ public interface DaoMessage { @Query("UPDATE message SET ui_hide = :ui_hide WHERE id = :id AND NOT (ui_hide IS :ui_hide)") int setMessageUiHide(long id, Boolean ui_hide); + @Transaction + @Query("UPDATE message SET ui_hide = 1" + + " WHERE folder = :folder" + + " AND id NOT IN (" + + " SELECT id FROM message" + + " WHERE folder = :folder" + + " ORDER BY received DESC" + + " LIMIT :keep)") + int setMessagesUiHide(long folder, int keep); + @Query("UPDATE message SET ui_ignored = :ui_ignored WHERE id = :id AND NOT (ui_ignored IS :ui_ignored)") int setMessageUiIgnored(long id, boolean ui_ignored); @@ -964,4 +974,14 @@ public interface DaoMessage { " AND stored < :sync_time" + // moved, browsed " AND ui_snoozed IS NULL") int deleteMessagesBefore(long folder, long sync_time, long keep_time, boolean unseen); + + @Transaction + @Query("DELETE FROM message" + + " WHERE folder = :folder" + + " AND id NOT IN (" + + " SELECT id FROM message" + + " WHERE folder = :folder" + + " ORDER BY received DESC" + + " LIMIT :keep)") + int deleteMessagesKeep(long folder, int keep); } \ No newline at end of file