diff options
Diffstat (limited to 'interfaces')
-rwxr-xr-x | interfaces/xml/be-mbox-to-xml | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/interfaces/xml/be-mbox-to-xml b/interfaces/xml/be-mbox-to-xml index a5bf13e..57de719 100755 --- a/interfaces/xml/be-mbox-to-xml +++ b/interfaces/xml/be-mbox-to-xml @@ -32,6 +32,8 @@ import types DEFAULT_ENCODING = get_encoding() set_IO_stream_encodings(DEFAULT_ENCODING) +KNOWN_IDS = [] + def comment_message_to_xml(message, fields=None): if fields == None: fields = {} @@ -51,6 +53,27 @@ def comment_message_to_xml(message, fields=None): new_fields.k = fields[k] fields = new_fields + if fields[u'in-reply-to'] == None: + if message[u'references'] != None: + refs = message[u'references'].split() + for ref in refs: # search for a known reference id. + if ref in KNOWN_IDS: + fields[u'in-reply-to'] = ref + break + if fields[u'in-reply-to'] == None and len(refs) > 0: + fields[u'in-reply-to'] = refs[0] # default to the first + else: # check for mutliple in-reply-to references. + refs = fields[u'in-reply-to'].split() + for ref in refs: # search for a known reference id. + if ref in KNOWN_IDS: + fields[u'in-reply-to'] = ref + break + if fields[u'in-reply-to'] == None and len(refs) > 0: + fields[u'in-reply-to'] = refs[0] # default to the first + + if fields['alt-id'] != None: + KNOWN_IDS.append(fields['alt-id']) + if message.is_multipart(): ret = [] alt_id = fields[u'alt-id'] @@ -61,9 +84,9 @@ def comment_message_to_xml(message, fields=None): continue fields[u'from'] = from_str fields[u'date'] = date - if len(ret) >= 0: - fields.pop(u'alt-id') - fields[u'in-reply-to'] = alt_id + if len(ret) > 0: # we've added one part already + fields.pop(u'alt-id') # don't pass alt-id to other parts + fields[u'in-reply-to'] = alt_id # others respond to first ret.append(comment_message_to_xml(m, fields)) return u'\n'.join(ret) @@ -71,7 +94,10 @@ def comment_message_to_xml(message, fields=None): #assert charset == DEFAULT_ENCODING.lower(), \ # u"Unknown charset: %s" % charset - encoding = message[u'content-transfer-encoding'].lower() + if message[u'content-transfer-encoding'] == None: + encoding = DEFAULT_ENCODING + else: + encoding = message[u'content-transfer-encoding'].lower() body = message.get_payload(decode=True) # attempt to decode assert body != None, "Unable to decode?" if fields[u'content-type'].startswith(u"text/"): |