remove reference to freshmeat_search.pl
[claws.git] / tools / tbird2claws.py
old mode 100644 (file)
new mode 100755 (executable)
index 398de28..aee01c7
@@ -17,6 +17,7 @@
 
 import os
 import sys
+from imp import reload
 
 __author__ = 'Rodrigo Senra <rsenra@acm.org>'
 __date__ =  '2005-03-23'
@@ -29,7 +30,7 @@ your Claws Mail MH mailbox tree.
 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
@@ -44,7 +45,7 @@ This is an alpha release, so it may be a little rough around the edges.
 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.
@@ -54,16 +55,16 @@ def harvest_offsets(filepath):
     """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)
@@ -73,7 +74,7 @@ def harvest_offsets(filepath):
 
 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):
@@ -84,35 +85,50 @@ def make_messages(outputdir, filepath, offsets, start):
     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])