Avoid unnecessarily querying db during clean up

pull/161/head
Unpublished 6 years ago
parent eb22d2b531
commit b56d0dd546

@ -1236,7 +1236,7 @@ class Core {
List<Message> full = new ArrayList<>(); List<Message> full = new ArrayList<>();
for (Message imessage : isub) { for (Message imessage : isub) {
long uid = ifolder.getUID(imessage); // already fetched 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) if (message == null)
full.add(imessage); full.add(imessage);
} }

@ -183,6 +183,22 @@ public interface DaoMessage {
" WHERE id = :id") " WHERE id = :id")
EntityMessage getMessage(long 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 *" + @Query("SELECT *" +
" FROM message" + " FROM message" +
" WHERE folder = :folder" + " WHERE folder = :folder" +

@ -70,14 +70,14 @@ public class WorkerCleanup extends Worker {
// Check message files // Check message files
Log.i("Checking message files"); Log.i("Checking message files");
List<Long> mids = db.message().getMessageWithContent(); List<Long> mids = db.message().getMessageWithContent();
File dir = new File(context.getFilesDir(), "messages");
if (!dir.exists())
dir.mkdir();
for (Long mid : mids) { for (Long mid : mids) {
EntityMessage message = db.message().getMessage(mid); File file = new File(dir, mid.toString());
if (message != null) { if (!file.exists()) {
File file = message.getFile(context); Log.w("Message file missing id=" + mid);
if (!file.exists()) { db.message().setMessageContent(mid, false);
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) for (File file : files)
if (manual || file.lastModified() + KEEP_FILES_DURATION < now) { if (manual || file.lastModified() + KEEP_FILES_DURATION < now) {
long id = Long.parseLong(file.getName().split("\\.")[0]); long id = Long.parseLong(file.getName().split("\\.")[0]);
EntityMessage message = db.message().getMessage(id); Boolean content = db.message().getMessageByIdHasContent(id);
if (message == null || !message.content) { if (content == null || !content) {
Log.i("Deleting " + file); Log.i("Deleting " + file);
if (!file.delete()) if (!file.delete())
Log.w("Error deleting " + file); Log.w("Error deleting " + file);
@ -134,8 +134,8 @@ public class WorkerCleanup extends Worker {
for (File file : raws) for (File file : raws)
if (manual || file.lastModified() + KEEP_FILES_DURATION < now) { if (manual || file.lastModified() + KEEP_FILES_DURATION < now) {
long id = Long.parseLong(file.getName().split("\\.")[0]); long id = Long.parseLong(file.getName().split("\\.")[0]);
EntityMessage message = db.message().getMessage(id); Boolean raw = db.message().getMessageByIdHasRaw(id);
if (message == null || message.raw == null || !message.raw) { if (raw == null || !raw) {
Log.i("Deleting " + file); Log.i("Deleting " + file);
if (!file.delete()) if (!file.delete())
Log.w("Error deleting " + file); Log.w("Error deleting " + file);

Loading…
Cancel
Save