From 9fbc7ee94ea45296db6f18ee49e0cf39e95664e3 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 13 Jun 2022 18:03:27 +0200 Subject: [PATCH] Conditional contact cleanup --- app/src/main/java/eu/faircode/email/DaoContact.java | 5 +++++ app/src/main/java/eu/faircode/email/WorkerCleanup.java | 9 ++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/DaoContact.java b/app/src/main/java/eu/faircode/email/DaoContact.java index 44fa269302..ccaa300d28 100644 --- a/app/src/main/java/eu/faircode/email/DaoContact.java +++ b/app/src/main/java/eu/faircode/email/DaoContact.java @@ -94,6 +94,11 @@ public interface DaoContact { " GROUP BY name, email") List searchContacts(Long account, Integer type, String query); + @Query("SELECT COUNT(*) FROM contact" + + " WHERE (type = " + EntityContact.TYPE_TO + + " OR type = " + EntityContact.TYPE_FROM + ")") + int countContacts(); + @Insert long insertContact(EntityContact contact); diff --git a/app/src/main/java/eu/faircode/email/WorkerCleanup.java b/app/src/main/java/eu/faircode/email/WorkerCleanup.java index 56b260da5f..a6a8e9cc3a 100644 --- a/app/src/main/java/eu/faircode/email/WorkerCleanup.java +++ b/app/src/main/java/eu/faircode/email/WorkerCleanup.java @@ -51,7 +51,8 @@ public class WorkerCleanup extends Worker { private static final int CLEANUP_INTERVAL = 4; // hours private static final long KEEP_FILES_DURATION = 3600 * 1000L; // milliseconds private static final long KEEP_IMAGES_DURATION = 3 * 24 * 3600 * 1000L; // milliseconds - private static final long KEEP_CONTACTS_DURATION = 180 * 24 * 3600 * 1000L; // milliseconds + private static final long KEEP_CONTACTS_DURATION = 365 * 24 * 3600 * 1000L; // milliseconds + private static final int KEEP_CONTACTS_COUNT = 10000; private static Semaphore semaphore = new Semaphore(1); @@ -349,9 +350,11 @@ public class WorkerCleanup extends Worker { Log.i("Cleanup contacts"); try { db.beginTransaction(); - int contacts = db.contact().deleteContacts(now - KEEP_CONTACTS_DURATION); + int contacts = db.contact().countContacts(); + int deleted = (contacts < KEEP_CONTACTS_COUNT ? 0 : + db.contact().deleteContacts(now - KEEP_CONTACTS_DURATION)); db.setTransactionSuccessful(); - Log.i("Deleted contacts=" + contacts); + Log.i("Contacts=" + contacts + " deleted=" + deleted); } finally { db.endTransaction(); }