summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKali Kaneko <kali@leap.se>2014-02-25 22:38:29 -0400
committerKali Kaneko <kali@leap.se>2014-02-27 11:44:54 -0400
commit733994d68b9f3ce528b552f67e9cbec005e57e9f (patch)
treeef69432c768ff7045616f409fe3709377f410fed
parent8a9e4239cfd4c8fc87721de41037dce566c67de5 (diff)
rename all fdocs when folder is renamed
-rw-r--r--changes/bug_5179_delete_folder1
-rw-r--r--src/leap/mail/imap/account.py9
-rw-r--r--src/leap/mail/imap/mailbox.py2
-rw-r--r--src/leap/mail/imap/memorystore.py21
4 files changed, 25 insertions, 8 deletions
diff --git a/changes/bug_5179_delete_folder b/changes/bug_5179_delete_folder
new file mode 100644
index 0000000..3de52cc
--- /dev/null
+++ b/changes/bug_5179_delete_folder
@@ -0,0 +1 @@
+ o Fix bug in which deleted folder wouldn't show its messages inside. Closes: #5179
diff --git a/src/leap/mail/imap/account.py b/src/leap/mail/imap/account.py
index ede63d3..199a2a4 100644
--- a/src/leap/mail/imap/account.py
+++ b/src/leap/mail/imap/account.py
@@ -329,20 +329,13 @@ class SoledadBackedAccount(WithMsgFields, IndexedDB, MBoxParser):
raise imap4.MailboxCollision(repr(new))
for (old, new) in inferiors:
+ self._memstore.rename_fdocs_mailbox(old, new)
mbox = self._get_mailbox_by_name(old)
mbox.content[self.MBOX_KEY] = new
self._soledad.put_doc(mbox)
self._load_mailboxes()
- # XXX ---- FIXME!!!! ------------------------------------
- # until here we just renamed the index...
- # We have to rename also the occurrence of this
- # mailbox on ALL the messages that are contained in it!!!
- # ... we maybe could use a reference to the doc_id
- # in each msg, instead of the "mbox" field in msgs
- # -------------------------------------------------------
-
def _inferiorNames(self, name):
"""
Return hierarchically inferior mailboxes.
diff --git a/src/leap/mail/imap/mailbox.py b/src/leap/mail/imap/mailbox.py
index d8e6cb1..503e38b 100644
--- a/src/leap/mail/imap/mailbox.py
+++ b/src/leap/mail/imap/mailbox.py
@@ -337,6 +337,8 @@ class SoledadMailbox(WithMsgFields, MBoxParser):
"""
if self._uidvalidity is None:
mbox = self._get_mbox_doc()
+ if mbox is None:
+ return 0
self._uidvalidity = mbox.content.get(self.CREATED_KEY, 1)
return self._uidvalidity
diff --git a/src/leap/mail/imap/memorystore.py b/src/leap/mail/imap/memorystore.py
index 6206468..d383b79 100644
--- a/src/leap/mail/imap/memorystore.py
+++ b/src/leap/mail/imap/memorystore.py
@@ -1244,6 +1244,27 @@ class MemoryStore(object):
"""
self.permanent_store.set_mbox_closed(mbox, closed)
+ # Rename flag-documents
+
+ def rename_fdocs_mailbox(self, old_mbox, new_mbox):
+ """
+ Change the mailbox name for all flag documents in a given mailbox.
+ Used from account.rename
+
+ :param old_mbox: name for the old mbox
+ :type old_mbox: str or unicode
+ :param new_mbox: name for the new mbox
+ :type new_mbox: str or unicode
+ """
+ fs = self._fdoc_store
+ keys = fs[old_mbox].keys()
+ for k in keys:
+ fdoc = fs[old_mbox][k]
+ fdoc['mbox'] = new_mbox
+ fs[new_mbox][k] = fdoc
+ fs[old_mbox].pop(k)
+ self._dirty.add((new_mbox, k))
+
# Dump-to-disk controls.
@property