addmessageheader: fix case #2 and flesh out docstring
The example illustrations were slightly cryptic; modify them to be more obvious. Fix case #2 (message starts with two line breaks) where additional line break was shown and coded. Signed-off-by: Eygene Ryabinkin <rea@codelabs.ru>
This commit is contained in:
parent
afead6c48e
commit
37f74d859a
@ -386,40 +386,6 @@ class BaseFolder(object):
|
|||||||
for uid in uidlist:
|
for uid in uidlist:
|
||||||
self.deletemessagelabels(uid, labels)
|
self.deletemessagelabels(uid, labels)
|
||||||
|
|
||||||
|
|
||||||
"""
|
|
||||||
Illustration of all cases for addmessageheader().
|
|
||||||
'+' means the added contents.
|
|
||||||
|
|
||||||
Case 1: No '\n\n', leading '\n'
|
|
||||||
+X-Flying-Pig-Header: i am here\n
|
|
||||||
\n
|
|
||||||
This is the body\n
|
|
||||||
next line\n
|
|
||||||
|
|
||||||
Case 2: '\n\n' at position 0
|
|
||||||
+X-Flying-Pig-Header: i am here\n
|
|
||||||
\n
|
|
||||||
\n
|
|
||||||
This is the body\n
|
|
||||||
next line\n
|
|
||||||
|
|
||||||
Case 3: No '\n\n', no leading '\n'
|
|
||||||
+X-Flying-Pig-Header: i am here\n
|
|
||||||
+\n
|
|
||||||
This is the body\n
|
|
||||||
next line\n
|
|
||||||
|
|
||||||
Case 4: '\n\n' at non-zero position
|
|
||||||
Subject: Something wrong with OI\n
|
|
||||||
From: some@person.at+\n
|
|
||||||
X-Flying-Pig-Header: i am here\n <-- orig '\n'
|
|
||||||
\n
|
|
||||||
This is the body\n
|
|
||||||
next line\n
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
def addmessageheader(self, content, linebreak, headername, headervalue):
|
def addmessageheader(self, content, linebreak, headername, headervalue):
|
||||||
"""
|
"""
|
||||||
Adds new header to the provided message.
|
Adds new header to the provided message.
|
||||||
@ -430,19 +396,65 @@ next line\n
|
|||||||
- headername: name of the header to add
|
- headername: name of the header to add
|
||||||
- headervalue: value of the header to add
|
- headervalue: value of the header to add
|
||||||
|
|
||||||
|
This has to deal with strange corner cases where the header is
|
||||||
|
missing or empty. Here are illustrations for all the cases,
|
||||||
|
showing where the header gets inserted and what the end result
|
||||||
|
is. In each illustration, '+' means the added contents. Note
|
||||||
|
that these examples assume LF for linebreak, not CRLF, so '\n'
|
||||||
|
denotes a linebreak and '\n\n' corresponds to the transition
|
||||||
|
between header and body. However if the linebreak parameter
|
||||||
|
is set to '\r\n' then you would have to substitute '\r\n' for
|
||||||
|
'\n' in the below examples.
|
||||||
|
|
||||||
|
* Case 1: No '\n\n', leading '\n'
|
||||||
|
|
||||||
|
+X-Flying-Pig-Header: i am here\n
|
||||||
|
\n
|
||||||
|
This is the body\n
|
||||||
|
next line\n
|
||||||
|
|
||||||
|
* Case 2: '\n\n' at position 0
|
||||||
|
|
||||||
|
+X-Flying-Pig-Header: i am here
|
||||||
|
\n
|
||||||
|
\n
|
||||||
|
This is the body\n
|
||||||
|
next line\n
|
||||||
|
|
||||||
|
* Case 3: No '\n\n', no leading '\n'
|
||||||
|
|
||||||
|
+X-Flying-Pig-Header: i am here\n
|
||||||
|
+\n
|
||||||
|
This is the body\n
|
||||||
|
next line\n
|
||||||
|
|
||||||
|
* Case 4: '\n\n' at non-zero position
|
||||||
|
|
||||||
|
Subject: Something wrong with OI\n
|
||||||
|
From: some@person.at
|
||||||
|
+\nX-Flying-Pig-Header: i am here
|
||||||
|
\n
|
||||||
|
\n
|
||||||
|
This is the body\n
|
||||||
|
next line\n
|
||||||
"""
|
"""
|
||||||
self.ui.debug('',
|
self.ui.debug('',
|
||||||
'addmessageheader: called to add %s: %s' % (headername,
|
'addmessageheader: called to add %s: %s' % (headername,
|
||||||
headervalue))
|
headervalue))
|
||||||
|
# Hoping for case #4
|
||||||
prefix = linebreak
|
prefix = linebreak
|
||||||
suffix = ''
|
suffix = ''
|
||||||
insertionpoint = content.find(linebreak * 2)
|
insertionpoint = content.find(linebreak * 2)
|
||||||
if insertionpoint == 0 or insertionpoint == -1:
|
# Case #2
|
||||||
|
if insertionpoint == 0:
|
||||||
|
prefix = ''
|
||||||
|
suffix = ''
|
||||||
|
# Either case #1 or #3
|
||||||
|
elif insertionpoint == -1:
|
||||||
prefix = ''
|
prefix = ''
|
||||||
suffix = linebreak
|
suffix = linebreak
|
||||||
if insertionpoint == -1:
|
|
||||||
insertionpoint = 0
|
insertionpoint = 0
|
||||||
# When body starts immediately, without preceding '\n'
|
# Case #3: when body starts immediately, without preceding '\n'
|
||||||
# (this shouldn't happen with proper mail messages, but
|
# (this shouldn't happen with proper mail messages, but
|
||||||
# we seen many broken ones), we should add '\n' to make
|
# we seen many broken ones), we should add '\n' to make
|
||||||
# new (and the only header, in this case) to be properly
|
# new (and the only header, in this case) to be properly
|
||||||
|
Loading…
Reference in New Issue
Block a user