/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:
parent
7b44f609f0
commit
cd6b343bb0
@ -10,6 +10,9 @@ offlineimap (3.2.2) unstable; urgency=low
|
|||||||
* If a given Maildir folder is new, remove the associated local status
|
* If a given Maildir folder is new, remove the associated local status
|
||||||
cache file, if any. That way, there will not be any chance of
|
cache file, if any. That way, there will not be any chance of
|
||||||
propogating hordes of deletes and adds based on old status data.
|
propogating hordes of deletes and adds based on old status data.
|
||||||
|
* Added support for /-separated Maildirs -- that is, hierarchical
|
||||||
|
Maildir trees. Fixes [complete.org #28] and, for Debian,
|
||||||
|
Closes: #155460.
|
||||||
|
|
||||||
-- John Goerzen <jgoerzen@complete.org> Thu, 25 Jul 2002 08:22:25 -0500
|
-- John Goerzen <jgoerzen@complete.org> Thu, 25 Jul 2002 08:22:25 -0500
|
||||||
|
|
||||||
|
@ -277,3 +277,10 @@ holdconnectionopen = no
|
|||||||
# are not both set.
|
# are not both set.
|
||||||
|
|
||||||
# keepalive = 60
|
# keepalive = 60
|
||||||
|
|
||||||
|
# You can specify the "path separator character" used for your Maildir
|
||||||
|
# folders. This is inserted in-between the components of the tree.
|
||||||
|
# It defaults to ".". If you want your Maildir folders to be nested,
|
||||||
|
# set it to "/".
|
||||||
|
|
||||||
|
sep = .
|
||||||
|
@ -136,7 +136,7 @@ def syncaccount(accountname, *args):
|
|||||||
remoterepos = repository.IMAP.IMAPRepository(config, accountname, server)
|
remoterepos = repository.IMAP.IMAPRepository(config, accountname, server)
|
||||||
|
|
||||||
# Connect to the Maildirs.
|
# Connect to the Maildirs.
|
||||||
localrepos = repository.Maildir.MaildirRepository(os.path.expanduser(config.get(accountname, "localfolders")))
|
localrepos = repository.Maildir.MaildirRepository(os.path.expanduser(config.get(accountname, "localfolders")), accountname, config)
|
||||||
|
|
||||||
# Connect to the local cache.
|
# Connect to the local cache.
|
||||||
statusrepos = repository.LocalStatus.LocalStatusRepository(accountmetadata)
|
statusrepos = repository.LocalStatus.LocalStatusRepository(accountmetadata)
|
||||||
|
@ -39,10 +39,10 @@ def gettimeseq():
|
|||||||
return timeseq
|
return timeseq
|
||||||
|
|
||||||
class MaildirFolder(BaseFolder):
|
class MaildirFolder(BaseFolder):
|
||||||
def __init__(self, root, name):
|
def __init__(self, root, name, sep):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.root = root
|
self.root = root
|
||||||
self.sep = '.'
|
self.sep = sep
|
||||||
self.uidfilename = os.path.join(self.getfullname(), "offlineimap.uidvalidity")
|
self.uidfilename = os.path.join(self.getfullname(), "offlineimap.uidvalidity")
|
||||||
self.messagelist = None
|
self.messagelist = None
|
||||||
|
|
||||||
|
@ -22,31 +22,46 @@ from mailbox import Maildir
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
class MaildirRepository(BaseRepository):
|
class MaildirRepository(BaseRepository):
|
||||||
def __init__(self, root):
|
def __init__(self, root, accountname, config):
|
||||||
"""Initialize a MaildirRepository object. Takes a path name
|
"""Initialize a MaildirRepository object. Takes a path name
|
||||||
to the directory holding all the Maildir directories."""
|
to the directory holding all the Maildir directories."""
|
||||||
|
|
||||||
self.root = root
|
self.root = root
|
||||||
self.folders = None
|
self.folders = None
|
||||||
|
self.accountname = accountname
|
||||||
|
self.config = config
|
||||||
|
|
||||||
def getsep(self):
|
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):
|
def makefolder(self, foldername):
|
||||||
folderdir = os.path.join(self.root, foldername)
|
# Do the chdir thing so the call to makedirs does not make the
|
||||||
os.mkdir(folderdir, 0700)
|
# 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']:
|
for subdir in ['cur', 'new', 'tmp']:
|
||||||
os.mkdir(os.path.join(folderdir, subdir), 0700)
|
os.mkdir(os.path.join(folderdir, subdir), 0700)
|
||||||
# Invalidate the cache
|
# Invalidate the cache
|
||||||
self.folders = None
|
self.folders = None
|
||||||
|
os.chdir(oldcwd)
|
||||||
|
|
||||||
def deletefolder(self, foldername):
|
def deletefolder(self, foldername):
|
||||||
print "NOT YET IMPLEMENTED: DELETE FOLDER %s" % foldername
|
print "NOT YET IMPLEMENTED: DELETE FOLDER %s" % foldername
|
||||||
|
|
||||||
def getfolder(self, foldername):
|
def getfolder(self, foldername):
|
||||||
return folder.Maildir.MaildirFolder(self.root, foldername)
|
return folder.Maildir.MaildirFolder(self.root, foldername,
|
||||||
|
self.getsep())
|
||||||
|
|
||||||
def getfolders(self):
|
def getfolders(self):
|
||||||
if self.folders != None:
|
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, 'new')) and
|
||||||
os.path.isdir(os.path.join(fullname, 'tmp'))):
|
os.path.isdir(os.path.join(fullname, 'tmp'))):
|
||||||
continue
|
continue
|
||||||
retval.append(folder.Maildir.MaildirFolder(self.root, dirname))
|
retval.append(folder.Maildir.MaildirFolder(self.root, dirname,
|
||||||
|
self.getsep()))
|
||||||
self.folders = retval
|
self.folders = retval
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user