/offlineimap/head: changeset 208

Added support for /-separated Maildirs -- that is, hierarchical
Maildir trees. Fixes [complete.org #28] and, for Debian, Closes:
#155460.
This commit is contained in:
jgoerzen
2002-08-08 03:40:18 +01:00
parent 7b44f609f0
commit cd6b343bb0
5 changed files with 37 additions and 11 deletions

View File

@@ -39,10 +39,10 @@ def gettimeseq():
return timeseq
class MaildirFolder(BaseFolder):
def __init__(self, root, name):
def __init__(self, root, name, sep):
self.name = name
self.root = root
self.sep = '.'
self.sep = sep
self.uidfilename = os.path.join(self.getfullname(), "offlineimap.uidvalidity")
self.messagelist = None

View File

@@ -22,31 +22,46 @@ from mailbox import Maildir
import os
class MaildirRepository(BaseRepository):
def __init__(self, root):
def __init__(self, root, accountname, config):
"""Initialize a MaildirRepository object. Takes a path name
to the directory holding all the Maildir directories."""
self.root = root
self.folders = None
self.accountname = accountname
self.config = config
def getsep(self):
return '.'
if self.config.has_option(self.accountname, 'sep'):
return self.config.get(self.accountname, 'sep').strip()
else:
return '.'
def makefolder(self, foldername):
folderdir = os.path.join(self.root, foldername)
os.mkdir(folderdir, 0700)
# Do the chdir thing so the call to makedirs does not make the
# self.root directory (we'd prefer to raise an error in that case),
# but will make the (relative) paths underneath it. Need to use
# makedirs to support a / separator.
if os.getsep() == '/':
for invalid in ['new', 'cur', 'tmp', 'offlineimap.uidvalidity']:
for component in foldername.split('/'):
assert component != invalid, "When using nested folders (/ as a separator in the account config), your folder names may not contain 'new', 'cur', 'tmp', or 'offlineimap.uidvalidity'."
oldcwd = os.getcwd()
os.chdir(self.root)
os.makedirs(folderdir, 0700)
for subdir in ['cur', 'new', 'tmp']:
os.mkdir(os.path.join(folderdir, subdir), 0700)
# Invalidate the cache
self.folders = None
os.chdir(oldcwd)
def deletefolder(self, foldername):
print "NOT YET IMPLEMENTED: DELETE FOLDER %s" % foldername
def getfolder(self, foldername):
return folder.Maildir.MaildirFolder(self.root, foldername)
return folder.Maildir.MaildirFolder(self.root, foldername,
self.getsep())
def getfolders(self):
if self.folders != None:
@@ -61,7 +76,8 @@ class MaildirRepository(BaseRepository):
os.path.isdir(os.path.join(fullname, 'new')) and
os.path.isdir(os.path.join(fullname, 'tmp'))):
continue
retval.append(folder.Maildir.MaildirFolder(self.root, dirname))
retval.append(folder.Maildir.MaildirFolder(self.root, dirname,
self.getsep()))
self.folders = retval
return retval