From abc0755e28285852bec66aeda1b75b7b3197fdbd Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 25 May 2024 12:30:09 +0200 Subject: [PATCH] Remove unread messages after 6 months --- app/src/main/java/eu/faircode/email/Core.java | 19 ++++++++++++++++--- .../java/eu/faircode/email/DaoMessage.java | 8 ++++---- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index fbae8b289f..bfc8a32978 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -3844,6 +3844,13 @@ class Core { cal_keep.set(Calendar.SECOND, 0); cal_keep.set(Calendar.MILLISECOND, 0); + Calendar cal_keep_unread = Calendar.getInstance(); + cal_keep_unread.add(Calendar.DAY_OF_MONTH, -Math.max(keep_days * 6, EntityFolder.DEFAULT_KEEP * 6)); + cal_keep_unread.set(Calendar.HOUR_OF_DAY, 0); + cal_keep_unread.set(Calendar.MINUTE, 0); + cal_keep_unread.set(Calendar.SECOND, 0); + cal_keep_unread.set(Calendar.MILLISECOND, 0); + long sync_time = cal_sync.getTimeInMillis(); if (sync_time < 0) sync_time = 0; @@ -3852,12 +3859,18 @@ class Core { if (keep_time < 0) keep_time = 0; - Log.i(folder.name + " sync=" + new Date(sync_time) + " keep=" + new Date(keep_time)); + long keep_unread_time = cal_keep_unread.getTimeInMillis(); + if (keep_unread_time < 0) + keep_unread_time = 0; + + Log.i(folder.name + " sync=" + new Date(sync_time) + + " keep=" + new Date(keep_time) + + " unread=" + new Date(keep_unread_time)); // Delete old local messages long delete_time = new Date().getTime() - 3600 * 1000L; if (auto_delete) { - List tbds = db.message().getMessagesBefore(folder.id, delete_time, keep_time, delete_unseen); + List tbds = db.message().getMessagesBefore(folder.id, delete_time, keep_time, keep_unread_time, delete_unseen); Log.i(folder.name + " local tbd=" + tbds.size()); EntityFolder trash = db.folder().getFolderByType(folder.account, EntityFolder.TRASH); for (Long tbd : tbds) { @@ -3870,7 +3883,7 @@ class Core { EntityOperation.queue(context, message, EntityOperation.MOVE, trash.id); } } else { - int old = db.message().deleteMessagesBefore(folder.id, delete_time, keep_time, delete_unseen); + int old = db.message().deleteMessagesBefore(folder.id, delete_time, keep_time, keep_unread_time, delete_unseen); Log.i(folder.name + " local old=" + old); } diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index d3d4d529d6..45af8145a6 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -1042,21 +1042,21 @@ public interface DaoMessage { " WHERE folder = :folder" + " AND received < :keep_time" + " AND NOT uid IS NULL" + - " AND (ui_seen OR :unseen)" + + " AND (ui_seen OR received < :keep_unread_time OR :unseen)" + " AND NOT ui_flagged" + " AND stored < :sync_time" + // moved, browsed " AND (ui_snoozed IS NULL OR ui_snoozed =" + Long.MAX_VALUE + ")") - List getMessagesBefore(long folder, long sync_time, long keep_time, boolean unseen); + List getMessagesBefore(long folder, long sync_time, long keep_time, long keep_unread_time, boolean unseen); @Query("DELETE FROM message" + " WHERE folder = :folder" + " AND received < :keep_time" + " AND NOT uid IS NULL" + - " AND (ui_seen OR :unseen)" + + " AND (ui_seen OR received < :keep_unread_time OR :unseen)" + " AND NOT ui_flagged" + " AND stored < :sync_time" + // moved, browsed " AND (ui_snoozed IS NULL OR ui_snoozed = " + Long.MAX_VALUE + ")") - int deleteMessagesBefore(long folder, long sync_time, long keep_time, boolean unseen); + int deleteMessagesBefore(long folder, long sync_time, long keep_time, long keep_unread_time, boolean unseen); @Transaction @Query("DELETE FROM message" +