From 37726806169f658534158b75e3268c7311aae225 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 26 May 2025 11:22:32 +0200 Subject: [PATCH] Guess folder type for specific host names --- .../main/java/eu/faircode/email/EmailService.java | 4 ++-- .../main/java/eu/faircode/email/EntityFolder.java | 15 ++++++++++++++- .../java/eu/faircode/email/FragmentAccount.java | 6 +++--- .../java/eu/faircode/email/FragmentGmail.java | 2 +- .../java/eu/faircode/email/FragmentOAuth.java | 2 +- .../eu/faircode/email/FragmentQuickSetup.java | 4 ++-- 6 files changed, 23 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/EmailService.java b/app/src/main/java/eu/faircode/email/EmailService.java index 26afe61120..4d3a90bd94 100644 --- a/app/src/main/java/eu/faircode/email/EmailService.java +++ b/app/src/main/java/eu/faircode/email/EmailService.java @@ -944,7 +944,7 @@ public class EmailService implements AutoCloseable { return TextUtils.join(".", c); } - List getFolders() throws MessagingException { + List getFolders(String host) throws MessagingException { List folders = new ArrayList<>(); try { @@ -958,7 +958,7 @@ public class EmailService implements AutoCloseable { folders.add(new EntityFolder(fullName, type)); } - EntityFolder.guessTypes(folders); + EntityFolder.guessTypes(folders, host); } catch (MessagingException ex) { if (ex.getMessage() != null && ex.getMessage().contains("LIST processing failed")) { diff --git a/app/src/main/java/eu/faircode/email/EntityFolder.java b/app/src/main/java/eu/faircode/email/EntityFolder.java index c91c4ca631..b724eb3614 100644 --- a/app/src/main/java/eu/faircode/email/EntityFolder.java +++ b/app/src/main/java/eu/faircode/email/EntityFolder.java @@ -245,6 +245,7 @@ public class EntityFolder extends EntityOrder implements Serializable { put("sent", new TypeScore(EntityFolder.SENT, 100)); put("Gesendet", new TypeScore(EntityFolder.SENT, 100)); put("envoyé", new TypeScore(EntityFolder.SENT, 100)); + put("OUTBOX", new TypeScore(EntityFolder.SENT, 100, "imap.laposte.net")); put("Отправленные", new TypeScore(EntityFolder.SENT, 100)); put("Inviata", new TypeScore(EntityFolder.SENT, 100)); put("wysłane", new TypeScore(EntityFolder.SENT, 100)); // Polish @@ -324,6 +325,9 @@ public class EntityFolder extends EntityOrder implements Serializable { if ("poczta.o2.pl".equals(account.host) && INBOX.equals(name)) poll = true; + + if ("imap.laposte.net".equals(account.host) && "INBOX/OUTBOX".equals(name)) + display = "Envoyés"; } void inheritFrom(EntityFolder parent) { @@ -548,11 +552,18 @@ public class EntityFolder extends EntityOrder implements Serializable { @NonNull private String type; private int score; + private String host; TypeScore(@NonNull String type, int score) { this.score = score; this.type = type; } + + TypeScore(@NonNull String type, int score, String host) { + this.score = score; + this.type = type; + this.host = host; + } } private static class FolderScore { @@ -572,7 +583,7 @@ public class EntityFolder extends EntityOrder implements Serializable { } } - static void guessTypes(List folders) { + static void guessTypes(List folders, String host) { List types = new ArrayList<>(); Map> typeFolderScore = new HashMap<>(); @@ -581,6 +592,8 @@ public class EntityFolder extends EntityOrder implements Serializable { for (String guess : GUESS_FOLDER_TYPE.keySet()) if (folder.name.toLowerCase(Locale.ROOT).contains(guess.toLowerCase(Locale.ROOT))) { TypeScore score = GUESS_FOLDER_TYPE.get(guess); + if (score.host != null && !score.host.equals(host)) + continue; if (!typeFolderScore.containsKey(score.type)) typeFolderScore.put(score.type, new ArrayList<>()); typeFolderScore.get(score.type).add(new FolderScore(folder, score.score)); diff --git a/app/src/main/java/eu/faircode/email/FragmentAccount.java b/app/src/main/java/eu/faircode/email/FragmentAccount.java index 922ecf5d74..351c1ffcaf 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAccount.java +++ b/app/src/main/java/eu/faircode/email/FragmentAccount.java @@ -873,14 +873,14 @@ public class FragmentAccount extends FragmentBase { iservice.hasCapability("UTF8=ACCEPT") || iservice.hasCapability("UTF8=ONLY"); - for (EntityFolder f : iservice.getFolders()) { + for (EntityFolder f : iservice.getFolders(host)) { EntityFolder folder = db.folder().getFolderByName(id, f.name); if (folder == null) folder = new EntityFolder(f.name, f.type); result.folders.add(folder); } - EntityFolder.guessTypes(result.folders); + EntityFolder.guessTypes(result.folders, host); if (result.folders.size() > 0) Collections.sort(result.folders, result.folders.get(0).getComparator(null)); @@ -1283,7 +1283,7 @@ public class FragmentAccount extends FragmentBase { user, password, certificate, fingerprint); - for (EntityFolder f : iservice.getFolders()) + for (EntityFolder f : iservice.getFolders(host)) if (EntityFolder.INBOX.equals(f.type)) { inbox = new EntityFolder(); inbox.name = f.name; diff --git a/app/src/main/java/eu/faircode/email/FragmentGmail.java b/app/src/main/java/eu/faircode/email/FragmentGmail.java index 7982cf9e0b..c3259cb9c5 100644 --- a/app/src/main/java/eu/faircode/email/FragmentGmail.java +++ b/app/src/main/java/eu/faircode/email/FragmentGmail.java @@ -477,7 +477,7 @@ public class FragmentGmail extends FragmentBase { if (pop) folders = EntityFolder.getPopFolders(context); else - folders = aservice.getFolders(); + folders = aservice.getFolders(inbound.host); } Long max_size; diff --git a/app/src/main/java/eu/faircode/email/FragmentOAuth.java b/app/src/main/java/eu/faircode/email/FragmentOAuth.java index a7b824eead..a77fdee3d3 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOAuth.java +++ b/app/src/main/java/eu/faircode/email/FragmentOAuth.java @@ -932,7 +932,7 @@ public class FragmentOAuth extends FragmentBase { if (pop) folders = EntityFolder.getPopFolders(context); else - folders = aservice.getFolders(); + folders = aservice.getFolders(inbound.host); } Long max_size = null; diff --git a/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java b/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java index 99f8e699dd..93e442e18b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java +++ b/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java @@ -491,7 +491,7 @@ public class FragmentQuickSetup extends FragmentBase { } } - folders = iservice.getFolders(); + folders = iservice.getFolders(provider.imap.host); if (!check) { boolean drafts = false; @@ -555,7 +555,7 @@ public class FragmentQuickSetup extends FragmentBase { if (!junk) istore.getFolder(n + EntityFolder.JUNK).create(Folder.HOLDS_MESSAGES); - folders = iservice.getFolders(); + folders = iservice.getFolders(provider.imap.host); } catch (Throwable ex) { Log.e(ex); }