From ee94d3a6d323b305fb346990efcc98b74052c742 Mon Sep 17 00:00:00 2001 From: inpos Date: Wed, 8 Jun 2016 20:42:39 +0300 Subject: [PATCH] add mailbox.py --- serpent/imap/mailbox.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 serpent/imap/mailbox.py diff --git a/serpent/imap/mailbox.py b/serpent/imap/mailbox.py new file mode 100644 index 0000000..be87ad3 --- /dev/null +++ b/serpent/imap/mailbox.py @@ -0,0 +1,37 @@ +from mailbox import Maildir +import os + +class ExtendedMaildir(Maildir): + def set_flags(self, key, flags): + sflags = sorted(flags) + if sflags == self.get_flags(key): return True + subpath = self._lookup(key) + info = '2,' + ''.join(sflags) + oldpath = os.path.join(self._path, subpath) + newsubdir = os.path.split(subpath)[0] + newname = key + self.colon + info + if 'S' in sflags and newsubdir == 'new': + newsubdir = 'cur' + if 'S' not in sflags and newsubdir == 'cur': + newsubdir = 'new' + newpath = os.path.join(self._path, newsubdir, newname) + if hasattr(os, 'link'): + os.link(oldpath, newpath) + os.remove(oldpath) + else: + os.rename(oldpath, newpath) + self._toc[key] = os.path.join(newsubdir, newname) + def get_flags(self, key): + subpath = self._lookup(key) + _, name = os.path.split(subpath) + info = name.split(self.colon)[-1] + if info.startswith('2,'): + return info[2:] + else: + return '' + def add_flag(self, key, flag): + self.set_flags(key, ''.join(set(self.get_flags(key)) | set(flag))) + def remove_flag(self, key, flag): + if flag not in self.get_flags(key): return True + if self.get_flags(key): + self.set_flags(key, ''.join(set(self.get_flags(key)) - set(flag))) \ No newline at end of file