From 969d8f397fe2583d578c0d4c7d6d6b547dd16df0 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 21 Mar 2022 20:22:55 +0100 Subject: [PATCH] Create folder in right namespace --- app/src/main/java/eu/faircode/email/Core.java | 39 +++++++++++++++++-- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index b11a95769e..e64c23c12e 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -2177,12 +2177,43 @@ class Core { for (EntityFolder folder : folders) { if (folder.tbc != null) { try { + // Prefix folder with namespace + Folder[] ns = istore.getPersonalNamespaces(); + if (ns != null && ns.length == 1) { + String n = ns[0].getFullName(); + // Typically "" or "INBOX" + if (!TextUtils.isEmpty(n)) { + n += ns[0].getSeparator(); + if (!folder.name.startsWith(n)) { + folder.name = n + folder.name; + db.folder().updateFolder(folder); + } + } + } + EntityLog.log(context, folder.name + " creating"); Folder ifolder = istore.getFolder(folder.name); - if (!ifolder.exists()) { - ifolder.create(Folder.HOLDS_MESSAGES); - ifolder.setSubscribed(true); - } + if (!ifolder.exists()) + try { + ((IMAPFolder) ifolder).doCommand(new IMAPFolder.ProtocolCommand() { + @Override + public Object doCommand(IMAPProtocol protocol) throws ProtocolException { + protocol.create(folder.name); + return null; + } + }); + ifolder.setSubscribed(true); + } catch (MessagingException ex) { + // com.sun.mail.iap.CommandFailedException: + // K5 NO Client tried to access nonexistent namespace. + // (Mailbox name should probably be prefixed with: INBOX.) (n.nnn + n.nnn secs). + // com.sun.mail.iap.CommandFailedException: + // AN5 NO [OVERQUOTA] Quota exceeded (number of mailboxes exceeded) (n.nnn + n.nnn + n.nnn secs). + Log.w(ex); + EntityLog.log(context, folder.name + " creation " + + ex + "\n" + android.util.Log.getStackTraceString(ex)); + db.account().setAccountError(account.id, Log.formatThrowable(ex)); + } local.put(folder.name, folder); } finally { db.folder().resetFolderTbc(folder.id);