Support multiple personal name spaces

pull/206/head
M66B 4 years ago
parent 54daa402e4
commit 7adce05e43

@ -2029,37 +2029,55 @@ class Core {
// Get remote folders // Get remote folders
long start = new Date().getTime(); long start = new Date().getTime();
List<Folder> ifolders = new ArrayList<>(); List<Folder> ifolders = new ArrayList<>();
ifolders.addAll(Arrays.asList(defaultFolder.list("*")));
List<String> subscription = new ArrayList<>(); List<String> subscription = new ArrayList<>();
Folder[] personal;
try { try {
Folder[] isubscribed = defaultFolder.listSubscribed("*"); personal = istore.getPersonalNamespaces();
for (Folder ifolder : isubscribed) { if (personal.length == 0)
String fullName = ifolder.getFullName(); throw new MessagingException("Empty personal namespaces");
if (TextUtils.isEmpty(fullName)) { } catch (MessagingException ex) {
Log.w("Subscribed folder name empty namespace=" + defaultFolder.getFullName()); Log.e(ex);
continue; personal = new Folder[]{istore.getDefaultFolder()};
}
for (Folder namespace : personal) {
EntityLog.log(context, "Personal namespace=" + namespace.getFullName());
if (namespace.getSeparator() == separator) {
String pattern = namespace.getFullName() + "*";
ifolders.addAll(Arrays.asList(defaultFolder.list(pattern)));
try {
Folder[] isubscribed = defaultFolder.listSubscribed(pattern);
for (Folder ifolder : isubscribed) {
String fullName = ifolder.getFullName();
if (TextUtils.isEmpty(fullName)) {
Log.w("Subscribed folder name empty namespace=" + defaultFolder.getFullName());
continue;
}
subscription.add(fullName);
Log.i("Subscribed " + defaultFolder.getFullName() + ":" + fullName);
}
} catch (Throwable ex) {
/*
06-21 10:02:38.035 9927 10024 E fairemail: java.lang.NullPointerException: Folder name is null
06-21 10:02:38.035 9927 10024 E fairemail: at com.sun.mail.imap.IMAPFolder.<init>(SourceFile:372)
06-21 10:02:38.035 9927 10024 E fairemail: at com.sun.mail.imap.IMAPFolder.<init>(SourceFile:411)
06-21 10:02:38.035 9927 10024 E fairemail: at com.sun.mail.imap.IMAPStore.newIMAPFolder(SourceFile:1809)
06-21 10:02:38.035 9927 10024 E fairemail: at com.sun.mail.imap.DefaultFolder.listSubscribed(SourceFile:89)
*/
Log.e(account.name, ex);
} }
subscription.add(fullName); } else
Log.i("Subscribed " + defaultFolder.getFullName() + ":" + fullName); Log.e("Personal namespace separator=" + namespace.getSeparator() + " default=" + separator);
}
} catch (Throwable ex) {
/*
06-21 10:02:38.035 9927 10024 E fairemail: java.lang.NullPointerException: Folder name is null
06-21 10:02:38.035 9927 10024 E fairemail: at com.sun.mail.imap.IMAPFolder.<init>(SourceFile:372)
06-21 10:02:38.035 9927 10024 E fairemail: at com.sun.mail.imap.IMAPFolder.<init>(SourceFile:411)
06-21 10:02:38.035 9927 10024 E fairemail: at com.sun.mail.imap.IMAPStore.newIMAPFolder(SourceFile:1809)
06-21 10:02:38.035 9927 10024 E fairemail: at com.sun.mail.imap.DefaultFolder.listSubscribed(SourceFile:89)
*/
Log.e(account.name, ex);
} }
if (sync_shared_folders) { if (sync_shared_folders) {
// https://tools.ietf.org/html/rfc2342 // https://tools.ietf.org/html/rfc2342
Folder[] namespaces = istore.getSharedNamespaces(); Folder[] shared = istore.getSharedNamespaces();
EntityLog.log(context, "Namespaces=" + namespaces.length); EntityLog.log(context, "Shared namespaces=" + shared.length);
for (Folder namespace : namespaces) { for (Folder namespace : shared) {
EntityLog.log(context, "Namespace=" + namespace.getFullName()); EntityLog.log(context, "Shared namespace=" + namespace.getFullName());
if (namespace.getSeparator() == separator) { if (namespace.getSeparator() == separator) {
try { try {
ifolders.addAll(Arrays.asList(namespace.list("*"))); ifolders.addAll(Arrays.asList(namespace.list("*")));
@ -2082,7 +2100,7 @@ class Core {
Log.e(account.name, ex); Log.e(account.name, ex);
} }
} else } else
Log.e("Namespace separator=" + namespace.getSeparator() + " default=" + separator); Log.e("Shared namespace separator=" + namespace.getSeparator() + " default=" + separator);
} }
} }

Loading…
Cancel
Save