Guess folder type for specific host names

master
M66B 4 months ago
parent a810b77e73
commit 3772680616

@ -944,7 +944,7 @@ public class EmailService implements AutoCloseable {
return TextUtils.join(".", c);
}
List<EntityFolder> getFolders() throws MessagingException {
List<EntityFolder> getFolders(String host) throws MessagingException {
List<EntityFolder> 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")) {

@ -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<EntityFolder> folders) {
static void guessTypes(List<EntityFolder> folders, String host) {
List<String> types = new ArrayList<>();
Map<String, List<FolderScore>> 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));

@ -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;

@ -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;

@ -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;

@ -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);
}

Loading…
Cancel
Save