Support maildir for windows
That makes OfflineIMAP to use exclamation mark (!) instead of colon for storing messages. Such files can be written to windows partitions. But you will probably loose compatibility with other programs trying to read the same Maildir. Signed-off-by: Vladimir Marek <vladimir.marek@oracle.com> Reviewed-by: Sebastian Spaeth <Sebastian@SSpaeth.de> Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
This commit is contained in:
parent
beef888ed7
commit
6995eeb92e
@ -300,5 +300,26 @@ KNOWN BUGS
|
||||
* IDLE may only work "once" per refresh. If you encounter this bug,
|
||||
please send a report to the list!
|
||||
|
||||
* Maildir support in Windows drive
|
||||
Maildir uses colon caracter (:) in message file names. Colon is however
|
||||
forbidden character in windows drives. There are several workarounds for
|
||||
that situation:
|
||||
|
||||
* Use "maildir-windows-compatible = yes" account OfflineIMAP configuration.
|
||||
- That makes OfflineIMAP to use exclamation mark (!) instead of colon for
|
||||
storing messages. Such files can be written to windows partitions. But
|
||||
you will probably loose compatibility with other programs trying to
|
||||
read the same Maildir.
|
||||
- Exclamation mark was choosed because of the note in
|
||||
http://docs.python.org/library/mailbox.html
|
||||
- If you have some messages already stored without this option, you will
|
||||
have to re-sync them again
|
||||
|
||||
* Enable file name character translation in windows registry (not tested)
|
||||
- http://support.microsoft.com/kb/289627
|
||||
|
||||
* Use cygwin managed mount (not tested)
|
||||
- not available anymore since cygwin 1.7
|
||||
|
||||
SEE ALSO
|
||||
========
|
||||
|
@ -239,6 +239,16 @@ remoterepository = RemoteExample
|
||||
|
||||
# maxage = 3
|
||||
|
||||
|
||||
# Maildir format uses colon (:) separator between uniq name and info.
|
||||
# Unfortunatelly colon is not allowed character in windows file name. If you
|
||||
# enable maildir-windows-compatible option, offlineimap will be able to store
|
||||
# messages on windows drive, but you will probably loose compatibility with
|
||||
# other programs working with the maildir
|
||||
|
||||
# maildir-windows-compatible = no
|
||||
|
||||
|
||||
[Repository LocalExample]
|
||||
|
||||
# This is one of the two repositories that you'll work with given the
|
||||
|
@ -31,7 +31,6 @@ except ImportError:
|
||||
from offlineimap import OfflineImapError
|
||||
|
||||
uidmatchre = re.compile(',U=(\d+)')
|
||||
flagmatchre = re.compile(':.*2,([A-Z]+)')
|
||||
timestampmatchre = re.compile('(\d+)');
|
||||
|
||||
timeseq = 0
|
||||
@ -63,6 +62,17 @@ class MaildirFolder(BaseFolder):
|
||||
self.messagelist = None
|
||||
self.repository = repository
|
||||
self.accountname = accountname
|
||||
|
||||
self.wincompatible = self.config.getdefaultboolean(
|
||||
"Account "+self.accountname, "maildir-windows-compatible", False)
|
||||
|
||||
if self.wincompatible == False:
|
||||
self.infosep = ':'
|
||||
else:
|
||||
self.infosep = '!'
|
||||
|
||||
self.flagmatchre = re.compile(self.infosep + '.*2,([A-Z]+)')
|
||||
|
||||
BaseFolder.__init__(self)
|
||||
#self.ui is set in BaseFolder.init()
|
||||
# Cache the full folder path, as we use getfullname() very often
|
||||
@ -156,7 +166,7 @@ class MaildirFolder(BaseFolder):
|
||||
nouidcounter -= 1
|
||||
else:
|
||||
uid = long(uidmatch.group(1))
|
||||
flagmatch = flagmatchre.search(messagename)
|
||||
flagmatch = self.flagmatchre.search(messagename)
|
||||
flags = []
|
||||
if flagmatch:
|
||||
flags = [x for x in flagmatch.group(1)]
|
||||
@ -271,11 +281,12 @@ class MaildirFolder(BaseFolder):
|
||||
dir_prefix = 'cur'
|
||||
else:
|
||||
dir_prefix = 'new'
|
||||
infostr = ':'
|
||||
infomatch = re.search('(:.*)$', newname)
|
||||
|
||||
infostr = self.infosep
|
||||
infomatch = re.search('(' + self.infosep + '.*)$', newname)
|
||||
if infomatch: # If the info string is present..
|
||||
infostr = infomatch.group(1)
|
||||
newname = newname.split(':')[0] # Strip off the info string.
|
||||
newname = newname.split(self.infosep)[0] # Strip off the info string.
|
||||
infostr = re.sub('2,[A-Z]*', '', infostr)
|
||||
flags.sort()
|
||||
infostr += '2,' + ''.join(flags)
|
||||
|
Loading…
Reference in New Issue
Block a user