diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index ffac7bae88..2dee599d5a 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -488,6 +488,9 @@ public interface DaoMessage { " OR (NOT :hash IS NULL AND message.hash IS :hash))") List getMessagesBySimilarity(long account, long id, String msgid, String hash); + @Query("SELECT DISTINCT keywords FROM message WHERE folder = :folder") + List getKeywords(long folder); + @Query("SELECT COUNT(*) FROM message" + " WHERE folder = :folder" + " AND msgid = :msgid" + diff --git a/app/src/main/java/eu/faircode/email/EntityOperation.java b/app/src/main/java/eu/faircode/email/EntityOperation.java index 955a23235d..093fb115a8 100644 --- a/app/src/main/java/eu/faircode/email/EntityOperation.java +++ b/app/src/main/java/eu/faircode/email/EntityOperation.java @@ -205,6 +205,24 @@ public class EntityOperation { db.folder().setFolderKeywords(folder.id, DB.Converters.fromStringArray(fkeywords.toArray(new String[0]))); } + } else { + EntityAccount account = db.account().getAccount(message.account); + if (account != null && account.protocol == EntityAccount.TYPE_POP) { + EntityFolder folder = db.folder().getFolder(message.folder); + if (folder != null) { + List fkeywords = new ArrayList<>(); + List mkeywords = db.message().getKeywords(folder.id); + if (mkeywords != null) + for (String[] kws : mkeywords) { + for (String kw : kws) + if (!fkeywords.contains(kw)) + fkeywords.add(kw); + } + Collections.sort(fkeywords); + db.folder().setFolderKeywords(folder.id, + DB.Converters.fromStringArray(fkeywords.toArray(new String[0]))); + } + } } } else if (LABEL.equals(name)) {