import os
import sys
+from imp import reload
__author__ = 'Rodrigo Senra <rsenra@acm.org>'
__date__ = '2005-03-23'
The script receives two parameters from command-line:
<Thunderbird folder path> <Claws Mail folder path>
-Best way to use it is to go to inside yout Thunderbird
+Best way to use it is to go to inside your Thunderbird
root mailfolder directory and invoke it as:
<path>\python2.4 <path>\tbird2syl.py . <path to claws mail>\Mail
Nevertheless, I used it with great success to convert a very large and
deep folder tree.
-Please, do backup your sylpheed (destination) folder tree before trying
+Please, do backup your claws-mail (destination) folder tree before trying
this out. Live safe and die old!
This code is released in the public domain.
"""Given the filepath, this runs through the file finding
the number of the line where a message begins.
- The functions returns a list of integers corresponding to
- the begining of messages.
+ The function returns a list of integers corresponding to
+ the beginning of messages.
"""
offsets = []
i = 0
state = 'begin'
for i,line in enumerate(open(filepath)):
if line.startswith('From - ') and state!='found_head':
- offsets.append(i)
- continue
+ offsets.append(i)
+ continue
# elif line.startswith('Return-Path') and state=='found_head':
# state = 'found_offset'
# offsets.append(i)
def make_messages(outputdir, filepath, offsets, start):
"""Given a filepath holding several messages in Thunderbird format,
- extarct the messages and create individual files for them, inside
+ extract the messages and create individual files for them, inside
outputdir with appropriate the appropriate naming scheme.
"""
if not os.path.exists(outputdir):
aux = offsets[:]
msgoffs = zip(offsets[:-1], aux[1:])
for i,j in msgoffs:
- fd = open(os.path.join(outputdir,"%d"%start),"w")
- fd.write(''.join(lines[i:j-1])) #-1 to remove first from line
- fd.close()
- start +=1
+ fd = open(os.path.join(outputdir,"%d"%start),"w")
+ fd.write(''.join(lines[i:j-1])) #-1 to remove first from line
+ fd.close()
+ start +=1
def process_file(filepath, outputdir):
- """Integrates a Thunderbird message file into a sylpheed message diretory.
+ """Integrates a Thunderbird message file into a claws-mail message directory.
"""
offs = harvest_offsets(filepath)
make_messages(outputdir, filepath, offs, 1)
+def clean_path(path):
+ """Rename all directories and subdirectories <X>.sbd to <X>
+ """
+ l = []
+ f = os.path.basename(path)
+ while f and f != "":
+ if f.endswith('.sbd'):
+ f = f[:-4]
+ l.append(f)
+ path = os.path.dirname(path)
+ f = os.path.basename(path)
+ l.reverse()
+ r = os.path.join(*l)
+ return r
+
+
def convert_tree(in_treepath, out_treepath):
"""Traverse your thunderbird tree, converting each message file found into
- a sylpheed message directory.
+ a claws-mail message directory.
"""
for path,subs,files in os.walk(in_treepath):
+ outpath = clean_path(path)
if files:
for f in [x for x in files if not x.endswith('.msf')]:
- if path.endswith('.sbd'):
- outpath = path[:-4]
- else:
- outpath = path
- print path,f
process_file(os.path.join(path,f),
os.path.join(out_treepath,outpath,f))
-
+
if __name__=='__main__':
if len(sys.argv)<3:
- print __doc__
+ print (__doc__)
else:
+ if sys.version[0] == '2':
+ reload(sys)
+ sys.setdefaultencoding('utf8')
convert_tree(sys.argv[1], sys.argv[2])