Trade recursion by plain old cycle
We can do a simpler and more stack-friendly hack for IMAP servers with limited line lenghts. Reported-by: Josh Berry, https://github.com/josh-berry GH: https://github.com/OfflineIMAP/offlineimap/pull/100 Signed-off-by: Eygene Ryabinkin <rea@codelabs.ru>
This commit is contained in:
parent
ffd1b1d691
commit
1f2e8af8aa
@ -755,14 +755,7 @@ class IMAPFolder(BaseFolder):
|
|||||||
def deletemessagesflags(self, uidlist, flags):
|
def deletemessagesflags(self, uidlist, flags):
|
||||||
self.__processmessagesflags('-', uidlist, flags)
|
self.__processmessagesflags('-', uidlist, flags)
|
||||||
|
|
||||||
def __processmessagesflags(self, operation, uidlist, flags):
|
def __processmessagesflags_real(self, operation, uidlist, flags):
|
||||||
# XXX: should really iterate over batches of 100 UIDs
|
|
||||||
if len(uidlist) > 101:
|
|
||||||
# Hack for those IMAP servers with a limited line length
|
|
||||||
self.__processmessagesflags(operation, uidlist[:100], flags)
|
|
||||||
self.__processmessagesflags(operation, uidlist[100:], flags)
|
|
||||||
return
|
|
||||||
|
|
||||||
imapobj = self.imapserver.acquireconnection()
|
imapobj = self.imapserver.acquireconnection()
|
||||||
try:
|
try:
|
||||||
try:
|
try:
|
||||||
@ -804,6 +797,16 @@ class IMAPFolder(BaseFolder):
|
|||||||
elif operation == '-':
|
elif operation == '-':
|
||||||
self.messagelist[uid]['flags'] -= flags
|
self.messagelist[uid]['flags'] -= flags
|
||||||
|
|
||||||
|
|
||||||
|
def __processmessagesflags(self, operation, uidlist, flags):
|
||||||
|
# Hack for those IMAP servers with a limited line length
|
||||||
|
batch_size = 100
|
||||||
|
while len(uidlist):
|
||||||
|
self.__processmessagesflags_real(operation, uidlist[:batch_size], flags)
|
||||||
|
uidlist = uidlist[batch_size:]
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
# Interface from BaseFolder
|
# Interface from BaseFolder
|
||||||
def change_message_uid(self, uid, new_uid):
|
def change_message_uid(self, uid, new_uid):
|
||||||
"""Change the message from existing uid to new_uid
|
"""Change the message from existing uid to new_uid
|
||||||
|
Loading…
Reference in New Issue
Block a user