+offlineimap (3.1.1) unstable; urgency=low
+
+ * Modified imaputil.py and folder/Maildir.py to run faster. Eliminated
+ many regular expressions; pre-compiled many others.
+ * Fixed threadutil's exitnotifyloop to always handle threads in the order
+ they exited, rather than sometimes in the inverse order. This way,
+ make sure to handle thread's exception messages before a thread exited.
+
+ -- John Goerzen <jgoerzen@complete.org> Tue, 23 Jul 2002 06:53:16 -0500
+
offlineimap (3.1.0) unstable; urgency=low
* When uploading messages from a Maildir, now convert \r\n to \n in case
from offlineimap import imaputil
import os.path, os, re, time, socket, md5
+foldermatchre = re.compile(',FMD5=([0-9a-f]{32})')
+uidmatchre = re.compile(',U=(\d+)')
+flagmatchre = re.compile(':.*2,([A-Z]+)')
+
timeseq = 0
lasttime = long(0)
filename in os.listdir(fulldirname)])
for file in files:
messagename = os.path.basename(file)
- foldermatch = re.search(',FMD5=([0-9a-f]{32})', messagename)
+ foldermatch = foldermatchre.search(messagename)
if (not foldermatch) or \
md5.new(self.getvisiblename()).hexdigest() \
!= foldermatch.group(1):
uid = nouidcounter
nouidcounter -= 1
else: # It comes from our folder.
- uidmatch = re.search(',U=(\d+)', messagename)
+ uidmatch = uidmatchre.search(messagename)
uid = None
if not uidmatch:
uid = nouidcounter
nouidcounter -= 1
else:
uid = long(uidmatch.group(1))
- flagmatch = re.search(':.*2,([A-Z]+)', messagename)
+ flagmatch = flagmatchre.search(messagename)
flags = []
if flagmatch:
flags = [x for x in flagmatch.group(1)]
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-import re
+import re, string
+quotere = re.compile('^("(?:[^"]|\\\\")*")')
def dequote(string):
"""Takes a string which may or may not be quoted and returns it, unquoted.
def flags2hash(string):
return options2hash(flagsplit(string))
-def imapsplit(string):
+def imapsplit(imapstring):
"""Takes a string from an IMAP conversation and returns a list containing
its components. One example string is:
['(\\HasNoChildren)', '"."', '"INBOX.Sent"']"""
- workstr = string
+ workstr = imapstring.strip()
retval = []
while len(workstr):
- if re.search('^\s', workstr):
- workstr = re.search('^\s(.*)$', workstr).group(1)
- elif workstr[0] == '(':
- parenlist = re.search('^(\(.*\))', workstr).group(1)
- workstr = workstr[len(parenlist):]
+ if workstr[0] == '(':
+ # Needs rindex to properly process eg (FLAGS () UID 123)
+ rpareni = workstr.rindex(')') + 1
+ parenlist = workstr[0:rpareni]
+ workstr = workstr[rpareni:].lstrip()
retval.append(parenlist)
elif workstr[0] == '"':
- quotelist = re.search('^("(?:[^"]|\\\\")*")', workstr).group(1)
- workstr = workstr[len(quotelist):]
+ quotelist = quotere.search(workstr).group(1)
+ workstr = workstr[len(quotelist):].lstrip()
retval.append(quotelist)
else:
- unq = re.search('^(\S+)', workstr).group(1)
- workstr = workstr[len(unq):]
- retval.append(unq)
+ splits = string.split(workstr, maxsplit = 1)
+ splitslen = len(splits)
+ # The unquoted word is splits[0]; the remainder is splits[1]
+ if splitslen == 2:
+ # There's an unquoted word, and more string follows.
+ retval.append(splits[0])
+ workstr = splits[1] # split will have already lstripped it
+ continue
+ elif splitslen == 1:
+ # We got a last unquoted word, but nothing else
+ retval.append(splits[0])
+ # Nothing remains. workstr would be ''
+ break
+ elif splitslen == 0:
+ # There was not even an unquoted word.
+ break
return retval
def flagsimap2maildir(string):