/head: changeset 70

Added the ability to filter out folders
This commit is contained in:
jgoerzen 2002-07-04 07:10:51 +01:00
parent 1549691ec7
commit fd9965eb9d
3 changed files with 52 additions and 1 deletions

View File

@ -1,3 +1,12 @@
offlineimap (2.0.0) unstable; urgency=low
* This code is now multithreaded. New config file options control the
behavior. This can make synchronizing several times faster.
* Fixed the STATUS call to be compatible with Exchange.
* Added the ability to exclude folders.
-- John Goerzen <jgoerzen@complete.org> Wed, 3 Jul 2002 14:21:32 -0500
offlineimap (1.0.4) unstable; urgency=low offlineimap (1.0.4) unstable; urgency=low
* Deletion of more than one message has been optimized. This could make * Deletion of more than one message has been optimized. This could make

View File

@ -106,6 +106,42 @@ localfolders = ~/Test
# nametrans = lambda foldername: re.sub('^INBOX.', '', foldername) # nametrans = lambda foldername: re.sub('^INBOX.', '', foldername)
# You can specify which folders to sync. You can do it several ways.
# I'll provide some examples. The folderfilter operates on the
# *UNTRANSLATED* name, if you specify nametrans. It should return
# true if the folder is to be included; false otherwise.
#
# Example 1: synchronizing only INBOX and Sent.
#
# folderfilter = lambda foldername: foldername in ['INBOX', 'Sent']
#
# Example 2: synchronizing everything except Trash.
#
# folderfilter = lambda foldername: foldername not in ['Trash']
#
# Example 3: Using a regular expression to exclude Trash and all folders
# containing the characters "Del".
#
# folderfilter = lambda foldername: not re.search('(^Trash$|Del)')
#
# If folderfilter is not specified, ALL remote folders will be
# synchronized.
#
# You can span multiple lines by indenting the others. (Use backslashes
# at the end when required by Python syntax) For instance:
#
# folderfilter = lambda foldername: foldername in
# ['INBOX', 'Sent Mail', 'Deleted Items',
# 'Received']
#
# FYI, you could also include every folder with:
#
# folderfilter = lambda foldername: 1
#
# And exclude every folder with:
#
# folderfilter = lambda foldername: 0
# 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,

View File

@ -30,8 +30,11 @@ class IMAPRepository(BaseRepository):
self.accountname = accountname self.accountname = accountname
self.folders = None self.folders = None
self.nametrans = lambda foldername: foldername self.nametrans = lambda foldername: foldername
self.folderfilter = lambda foldername: 1
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'):
self.folderfilter = eval(config.get(accountname, 'folderfilter'))
def getsep(self): def getsep(self):
return self.imapserver.delim return self.imapserver.delim
@ -54,8 +57,11 @@ class IMAPRepository(BaseRepository):
flags, delim, name = imaputil.imapsplit(string) flags, delim, name = imaputil.imapsplit(string)
if '\\Noselect' in imaputil.flagsplit(flags): if '\\Noselect' in imaputil.flagsplit(flags):
continue continue
foldername = imaputil.dequote(name)
if not self.folderfilter(foldername):
continue
retval.append(folder.IMAP.IMAPFolder(self.imapserver, name, retval.append(folder.IMAP.IMAPFolder(self.imapserver, name,
self.nametrans(imaputil.dequote(name)), 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()))
self.folders = retval self.folders = retval