From ae8eb762f8e2a6ed6bca4f25d30e0790fc13985e Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 21 Aug 2018 14:37:46 +0000 Subject: [PATCH] Cleanup message & attachment files --- .../java/eu/faircode/email/DaoAttachment.java | 7 ++++++- .../java/eu/faircode/email/DaoMessage.java | 14 +++++++++++-- .../eu/faircode/email/ServiceSynchronize.java | 20 +++++++++++++++++++ 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/DaoAttachment.java b/app/src/main/java/eu/faircode/email/DaoAttachment.java index 6151989e13..7070af800b 100644 --- a/app/src/main/java/eu/faircode/email/DaoAttachment.java +++ b/app/src/main/java/eu/faircode/email/DaoAttachment.java @@ -34,11 +34,16 @@ public interface DaoAttachment { " ORDER BY sequence") LiveData> liveAttachments(long id); - @Query("SELECT COUNT(attachment.id)" + + @Query("SELECT COUNT(id)" + " FROM attachment" + " WHERE message = :message") int getAttachmentCount(long message); + @Query("SELECT COUNT(id)" + + " FROM attachment" + + " WHERE id = :id") + int countAttachment(long id); + @Query("SELECT * FROM attachment" + " WHERE message = :message" + " ORDER BY sequence") diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index 9a57787e3b..3d7b017ee6 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -74,10 +74,20 @@ public interface DaoMessage { " ORDER BY message.received DESC, message.sent DESC") DataSource.Factory pagedThread(long msgid, boolean debug); - @Query("SELECT * FROM message WHERE id = :id") + @Query("SELECT *" + + " FROM message" + + " WHERE id = :id") EntityMessage getMessage(long id); - @Query("SELECT * FROM message WHERE folder = :folder AND uid = :uid") + @Query("SELECT COUNT(id)" + + " FROM message" + + " WHERE id = :id") + int countMessage(long id); + + @Query("SELECT *" + + " FROM message" + + " WHERE folder = :folder" + + " AND uid = :uid") EntityMessage getMessageByUid(long folder, long uid); @Query("SELECT message.* FROM message" + diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 0d99343f9a..ff5f4c7bd4 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -1183,6 +1183,26 @@ public class ServiceSynchronize extends LifecycleService { Log.w(Helper.TAG, folder.name + " " + ex + "\n" + Log.getStackTraceString(ex)); } + // Cleanup files + File messages = new File(getFilesDir(), "messages"); + for (File file : messages.listFiles()) + if (file.isFile()) { + long id = Long.parseLong(file.getName()); + if (db.message().countMessage(id) == 0) { + Log.i(Helper.TAG, "Cleanup message id=" + id); + file.delete(); + } + } + File attachments = new File(getFilesDir(), "attachments"); + for (File file : attachments.listFiles()) + if (file.isFile()) { + long id = Long.parseLong(file.getName()); + if (db.attachment().countAttachment(id) == 0) { + Log.i(Helper.TAG, "Cleanup attachment id=" + id); + file.delete(); + } + } + Log.w(Helper.TAG, folder.name + " statistics added=" + added + " updated=" + updated + " unchanged=" + unchanged); } finally { Log.v(Helper.TAG, folder.name + " end sync");