diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index 79c048b2fa..d2db39d37a 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -241,13 +241,14 @@ public interface DaoMessage { " ORDER BY message.received DESC") List getMessageWithContent(); - @Query("SELECT *" + + @Query("SELECT message.*" + " FROM message" + + " JOIN account ON account.id = message.account" + " WHERE account = :account" + " AND thread = :thread" + " AND (:id IS NULL OR message.id = :id)" + " AND (:folder IS NULL OR message.folder = :folder)" + - " AND NOT uid IS NULL" + + " AND (NOT uid IS NULL OR account.pop)" + " AND NOT ui_hide") List getMessagesByThread(long account, String thread, Long id, Long folder); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 0af0cc258a..b47e1ecb2f 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -1761,12 +1761,19 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. DB db = DB.getInstance(context); + boolean pop = false; result.folders = new ArrayList<>(); for (long id : ids) { EntityMessage message = db.message().getMessage(id); if (message == null) continue; + EntityAccount account = db.account().getAccount(message.account); + if (account == null) + continue; + if (account.pop) + pop = true; + if (!result.folders.contains(message.folder)) result.folders.add(message.folder); @@ -1792,7 +1799,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. EntityFolder folder = db.folder().getFolder(message.folder); boolean isArchive = EntityFolder.ARCHIVE.equals(folder.type); - boolean isTrash = EntityFolder.TRASH.equals(folder.type); + boolean isTrash = (EntityFolder.TRASH.equals(folder.type) || account.pop); boolean isJunk = EntityFolder.JUNK.equals(folder.type); boolean isDrafts = EntityFolder.DRAFTS.equals(folder.type); @@ -1820,9 +1827,10 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. if (result.hasJunk == null) result.hasJunk = false; result.accounts = new ArrayList<>(); - for (EntityAccount account : db.account().getSynchronizingAccounts()) - if (!account.pop) - result.accounts.add(account); + if (!pop) + for (EntityAccount account : db.account().getSynchronizingAccounts()) + if (!account.pop) + result.accounts.add(account); return result; } @@ -2150,10 +2158,14 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. if (message == null) continue; + EntityAccount account = db.account().getAccount(message.account); + if (account == null) + continue; + List messages = db.message().getMessagesByThread( message.account, message.thread, threading ? null : id, message.folder); for (EntityMessage threaded : messages) - if (message.uid != null) + if (message.uid != null || account.pop) ids.add(threaded.id); } diff --git a/app/src/main/java/eu/faircode/email/SelectionPredicateMessage.java b/app/src/main/java/eu/faircode/email/SelectionPredicateMessage.java index 687d5c8013..e4402cdf72 100644 --- a/app/src/main/java/eu/faircode/email/SelectionPredicateMessage.java +++ b/app/src/main/java/eu/faircode/email/SelectionPredicateMessage.java @@ -46,6 +46,9 @@ public class SelectionPredicateMessage extends SelectionTracker.SelectionPredica if (message == null) // happens when restoring state return true; + if (message.accountPop) + return true; + if (message.uid != null && !message.folderReadOnly) return true; @@ -62,6 +65,9 @@ public class SelectionPredicateMessage extends SelectionTracker.SelectionPredica if (message == null) // happens when restoring state return true; + if (message.accountPop) + return true; + if (message.uid != null && !message.folderReadOnly) return true; diff --git a/app/src/main/java/eu/faircode/email/ViewModelMessages.java b/app/src/main/java/eu/faircode/email/ViewModelMessages.java index 9386e01e14..2fba693453 100644 --- a/app/src/main/java/eu/faircode/email/ViewModelMessages.java +++ b/app/src/main/java/eu/faircode/email/ViewModelMessages.java @@ -277,7 +277,7 @@ public class ViewModelMessages extends ViewModel { int count = ds.countItems(); for (int i = 0; i < count; i += 100) for (TupleMessageEx message : ds.loadRange(i, Math.min(100, count - i))) - if (message.uid != null && !message.folderReadOnly) + if ((message.uid != null && !message.folderReadOnly) || message.accountPop) ids.add(message.id); Log.i("Loaded messages #" + ids.size());