diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 11f2e6b063..f76f89833d 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -1236,7 +1236,7 @@ class Core { List full = new ArrayList<>(); for (Message imessage : isub) { long uid = ifolder.getUID(imessage); // already fetched - EntityMessage message = db.message().getMessageByUid(folder.id, uid); + Long message = db.message().getMessageByUidExists(folder.id, uid); if (message == null) full.add(imessage); } diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index 4ec4043df2..65b78b997f 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -183,6 +183,22 @@ public interface DaoMessage { " WHERE id = :id") EntityMessage getMessage(long id); + @Query("SELECT content" + + " FROM message" + + " WHERE id = :id") + Boolean getMessageByIdHasContent(long id); + + @Query("SELECT raw" + + " FROM message" + + " WHERE id = :id") + Boolean getMessageByIdHasRaw(long id); + + @Query("SELECT uid" + + " FROM message" + + " WHERE folder = :folder" + + " AND uid = :uid") + Long getMessageByUidExists(long folder, long uid); + @Query("SELECT *" + " FROM message" + " WHERE folder = :folder" + diff --git a/app/src/main/java/eu/faircode/email/WorkerCleanup.java b/app/src/main/java/eu/faircode/email/WorkerCleanup.java index 9a65e9d9a4..b06d4e9c23 100644 --- a/app/src/main/java/eu/faircode/email/WorkerCleanup.java +++ b/app/src/main/java/eu/faircode/email/WorkerCleanup.java @@ -70,14 +70,14 @@ public class WorkerCleanup extends Worker { // Check message files Log.i("Checking message files"); List mids = db.message().getMessageWithContent(); + File dir = new File(context.getFilesDir(), "messages"); + if (!dir.exists()) + dir.mkdir(); for (Long mid : mids) { - EntityMessage message = db.message().getMessage(mid); - if (message != null) { - File file = message.getFile(context); - if (!file.exists()) { - Log.w("Message file missing id=" + mid); - db.message().setMessageContent(mid, false); - } + File file = new File(dir, mid.toString()); + if (!file.exists()) { + Log.w("Message file missing id=" + mid); + db.message().setMessageContent(mid, false); } } @@ -119,8 +119,8 @@ public class WorkerCleanup extends Worker { for (File file : files) if (manual || file.lastModified() + KEEP_FILES_DURATION < now) { long id = Long.parseLong(file.getName().split("\\.")[0]); - EntityMessage message = db.message().getMessage(id); - if (message == null || !message.content) { + Boolean content = db.message().getMessageByIdHasContent(id); + if (content == null || !content) { Log.i("Deleting " + file); if (!file.delete()) Log.w("Error deleting " + file); @@ -134,8 +134,8 @@ public class WorkerCleanup extends Worker { for (File file : raws) if (manual || file.lastModified() + KEEP_FILES_DURATION < now) { long id = Long.parseLong(file.getName().split("\\.")[0]); - EntityMessage message = db.message().getMessage(id); - if (message == null || message.raw == null || !message.raw) { + Boolean raw = db.message().getMessageByIdHasRaw(id); + if (raw == null || !raw) { Log.i("Deleting " + file); if (!file.delete()) Log.w("Error deleting " + file);