/head: changeset 86
Added folderincludes capability
This commit is contained in:
		@@ -1,6 +1,8 @@
 | 
				
			|||||||
offlineimap (2.0.5) unstable; urgency=low
 | 
					offlineimap (2.0.5) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  * Placeholder
 | 
					  * Fixed a folderfilter example.  Partially fixes #152079.
 | 
				
			||||||
 | 
					  * Added folderincludes capability.  Partially fixes #152079.
 | 
				
			||||||
 | 
					  * More fixes for read-only folders.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 -- John Goerzen <jgoerzen@complete.org>  Fri,  5 Jul 2002 09:21:52 -0500
 | 
					 -- John Goerzen <jgoerzen@complete.org>  Fri,  5 Jul 2002 09:21:52 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -79,6 +79,15 @@ footer = "\n"
 | 
				
			|||||||
# for each account listed in general/accounts above.
 | 
					# for each account listed in general/accounts above.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[Test]
 | 
					[Test]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					########## Basic settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Specify local repository.  Your IMAP folders will be synchronized
 | 
				
			||||||
 | 
					# to maildirs created under this path.  OfflineIMAP will create the
 | 
				
			||||||
 | 
					# maildirs for you as needed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					localfolders = ~/Test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Specify the remote hostname.
 | 
					# Specify the remote hostname.
 | 
				
			||||||
remotehost = examplehost
 | 
					remotehost = examplehost
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -118,6 +127,9 @@ remoteuser = username
 | 
				
			|||||||
# preauthtunnel = ssh -q imaphost '/usr/bin/imapd ./Maildir'
 | 
					# preauthtunnel = ssh -q imaphost '/usr/bin/imapd ./Maildir'
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					########## Advanced settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Some IMAP servers need a "reference" which often refers to the
 | 
					# Some IMAP servers need a "reference" which often refers to the
 | 
				
			||||||
# "folder root".  This is most commonly needed with UW IMAP, where
 | 
					# "folder root".  This is most commonly needed with UW IMAP, where
 | 
				
			||||||
# you might need to specify the directory in which your mail is
 | 
					# you might need to specify the directory in which your mail is
 | 
				
			||||||
@@ -125,12 +137,6 @@ remoteuser = username
 | 
				
			|||||||
#
 | 
					#
 | 
				
			||||||
# reference = Mail
 | 
					# reference = Mail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Specify local repository.  Your IMAP folders will be synchronized
 | 
					 | 
				
			||||||
# to maildirs created under this path.  OfflineIMAP will create the
 | 
					 | 
				
			||||||
# maildirs for you as needed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
localfolders = ~/Test
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# You can specify a folder translator.  This must be a eval-able
 | 
					# You can specify a folder translator.  This must be a eval-able
 | 
				
			||||||
# Python expression that takes a foldername arg and returns the new
 | 
					# Python expression that takes a foldername arg and returns the new
 | 
				
			||||||
# value.  I suggest a lambda.  This example below will remove "INBOX." from
 | 
					# value.  I suggest a lambda.  This example below will remove "INBOX." from
 | 
				
			||||||
@@ -179,6 +185,27 @@ localfolders = ~/Test
 | 
				
			|||||||
#
 | 
					#
 | 
				
			||||||
# folderfilter = lambda foldername: 0
 | 
					# folderfilter = lambda foldername: 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# You can specify folderincludes to include additional folders.
 | 
				
			||||||
 | 
					# It should return a Python list.  This might be used to include a
 | 
				
			||||||
 | 
					# folder that was excluded by your folderfilter rule, to include a
 | 
				
			||||||
 | 
					# folder that your server does not specify with its LIST option, or
 | 
				
			||||||
 | 
					# to include a folder that is outside your basic reference.  Some examples:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# To include debian.user and debian.personal:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# folderincludes = ['debian.user', 'debian.personal']
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# To include your INBOX (UW IMAPd users will find this useful if they
 | 
				
			||||||
 | 
					# specify a reference):
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# folderincludes = ['INBOX']
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# To specify a long list:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# folderincludes = ['box1', 'box2', 'box3', 'box4',
 | 
				
			||||||
 | 
					#                   'box5', 'box6']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# OfflineIMAP can use multiple connections to the server in order
 | 
					# OfflineIMAP can use multiple connections to the server in order
 | 
				
			||||||
# to perform multiple synchronization actions simultaneously.
 | 
					# to perform multiple synchronization actions simultaneously.
 | 
				
			||||||
# This may place a higher burden on the server.  In most cases,
 | 
					# This may place a higher burden on the server.  In most cases,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,9 +46,10 @@ class IMAPFolder(BaseFolder):
 | 
				
			|||||||
    def getuidvalidity(self):
 | 
					    def getuidvalidity(self):
 | 
				
			||||||
        imapobj = self.imapserver.acquireconnection()
 | 
					        imapobj = self.imapserver.acquireconnection()
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            x = imapobj.status(self.getfullname(), '(UIDVALIDITY)')[1][0]
 | 
					            try:
 | 
				
			||||||
        except imapobj.readonly:
 | 
					                x = imapobj.status(self.getfullname(), '(UIDVALIDITY)')[1][0]
 | 
				
			||||||
            pass
 | 
					            except imapobj.readonly:
 | 
				
			||||||
 | 
					                pass
 | 
				
			||||||
        finally:
 | 
					        finally:
 | 
				
			||||||
            self.imapserver.releaseconnection(imapobj)
 | 
					            self.imapserver.releaseconnection(imapobj)
 | 
				
			||||||
        uidstring = imaputil.imapsplit(x)[1]
 | 
					        uidstring = imaputil.imapsplit(x)[1]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,10 +31,13 @@ class IMAPRepository(BaseRepository):
 | 
				
			|||||||
        self.folders = None
 | 
					        self.folders = None
 | 
				
			||||||
        self.nametrans = lambda foldername: foldername
 | 
					        self.nametrans = lambda foldername: foldername
 | 
				
			||||||
        self.folderfilter = lambda foldername: 1
 | 
					        self.folderfilter = lambda foldername: 1
 | 
				
			||||||
 | 
					        self.folderincludes = []
 | 
				
			||||||
        if config.has_option(accountname, 'nametrans'):
 | 
					        if config.has_option(accountname, 'nametrans'):
 | 
				
			||||||
            self.nametrans = eval(config.get(accountname, 'nametrans'))
 | 
					            self.nametrans = eval(config.get(accountname, 'nametrans'))
 | 
				
			||||||
        if config.has_option(accountname, 'folderfilter'):
 | 
					        if config.has_option(accountname, 'folderfilter'):
 | 
				
			||||||
            self.folderfilter = eval(config.get(accountname, 'folderfilter'))
 | 
					            self.folderfilter = eval(config.get(accountname, 'folderfilter'))
 | 
				
			||||||
 | 
					        if config.has_option(accountname, 'folderincludes'):
 | 
				
			||||||
 | 
					            self.folderincludes = eval(config.get(accountname, 'folderincludes'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def getsep(self):
 | 
					    def getsep(self):
 | 
				
			||||||
        return self.imapserver.delim
 | 
					        return self.imapserver.delim
 | 
				
			||||||
@@ -61,7 +64,11 @@ class IMAPRepository(BaseRepository):
 | 
				
			|||||||
            foldername = imaputil.dequote(name)
 | 
					            foldername = imaputil.dequote(name)
 | 
				
			||||||
            if not self.folderfilter(foldername):
 | 
					            if not self.folderfilter(foldername):
 | 
				
			||||||
                continue
 | 
					                continue
 | 
				
			||||||
            retval.append(folder.IMAP.IMAPFolder(self.imapserver, name,
 | 
					            retval.append(folder.IMAP.IMAPFolder(self.imapserver, foldername,
 | 
				
			||||||
 | 
					                                                 self.nametrans(foldername),
 | 
				
			||||||
 | 
					                                                 self.accountname))
 | 
				
			||||||
 | 
					        for foldername in self.folderincludes:
 | 
				
			||||||
 | 
					            retval.append(folder.IMAP.IMAPFolder(self.imapserver, foldername,
 | 
				
			||||||
                                                 self.nametrans(foldername),
 | 
					                                                 self.nametrans(foldername),
 | 
				
			||||||
                                                 self.accountname))
 | 
					                                                 self.accountname))
 | 
				
			||||||
        retval.sort(lambda x, y: cmp(x.getvisiblename(), y.getvisiblename()))
 | 
					        retval.sort(lambda x, y: cmp(x.getvisiblename(), y.getvisiblename()))
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user