2006-02-05 [colin] 2.0.0cvs14
authorColin Leroy <colin@colino.net>
Sun, 5 Feb 2006 18:01:23 +0000 (18:01 +0000)
committerColin Leroy <colin@colino.net>
Sun, 5 Feb 2006 18:01:23 +0000 (18:01 +0000)
* tools/tbird2syl.py
* tools/Makefile.am
Add script to import Thunderbird mails

ChangeLog
PATCHSETS
configure.ac
tools/Makefile.am
tools/tbird2syl.py [new file with mode: 0644]

index e0b9c7d..96d1b21 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-02-05 [colin]     2.0.0cvs14
+
+       * tools/tbird2syl.py
+       * tools/Makefile.am
+               Add script to import Thunderbird mails
+
 2006-02-05 [colin]     2.0.0cvs13
 
        * src/headerview.c
index 60e652e..ed00fd7 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.395.2.161 -r 1.395.2.162 src/summaryview.c;  cvs diff -u -r 1.83.2.62 -r 1.83.2.63 src/mimeview.c;  ) > 2.0.0cvs11.patchset
 ( cvs diff -u -r 1.207.2.86 -r 1.207.2.87 src/folderview.c;  cvs diff -u -r 1.395.2.162 -r 1.395.2.163 src/summaryview.c;  cvs diff -u -r 1.36.2.53 -r 1.36.2.54 src/common/utils.c;  cvs diff -u -r 1.20.2.31 -r 1.20.2.32 src/common/utils.h;  ) > 2.0.0cvs12.patchset
 ( cvs diff -u -r 1.8.2.13 -r 1.8.2.14 src/headerview.c;  cvs diff -u -r 1.47.2.25 -r 1.47.2.26 src/procheader.c;  cvs diff -u -r 1.150.2.49 -r 1.150.2.50 src/procmsg.c;  cvs diff -u -r 1.60.2.20 -r 1.60.2.21 src/procmsg.h;  cvs diff -u -r 1.96.2.91 -r 1.96.2.92 src/textview.c;  ) > 2.0.0cvs13.patchset
+( diff -u /dev/null tools/tbird2syl.py;  cvs diff -u -r 1.25.2.8 -r 1.25.2.9 tools/Makefile.am;  ) > 2.0.0cvs14.patchset
index 7d1a77a..b53a372 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=0
 MICRO_VERSION=0
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=13
+EXTRA_VERSION=14
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 4375ab6..0043422 100644 (file)
@@ -19,6 +19,7 @@ EXTRA_TOOLS = \
        sylprint.pl \
        sylprint.rc \
        tb2sylpheed \
+       tbird2syl.py \
        textviewer.sh \
         update-po \
        uudec \
diff --git a/tools/tbird2syl.py b/tools/tbird2syl.py
new file mode 100644 (file)
index 0000000..4454856
--- /dev/null
@@ -0,0 +1,118 @@
+#!/usr/bin/python
+
+# Script name : tbird2syl.py
+# Script purpose : Integrate a Thunderbird folder tree to S-Claws
+# Author : Aleksandar Urosevic aka Urke MMI <urke@gmx.net>
+# Licence : GPL
+# Author: Rodrigo Dias Arruda Senra
+
+#The script receives two parameters from command-line:
+#<Thunderbird folder path> <Sylpheed folder path>
+
+#Best way to use it is to go to inside yout Thunderbird
+#root mailfolder directory and invoke it as:
+
+#<path>\python2.4 <path>\tbird2syl.py . <path to
+#sylpheed>\Mail
+
+import os
+import sys
+
+__author__ = 'Rodrigo Senra <rsenra@acm.org>'
+__date__ =  '2005-03-23'
+__version__ =  '0.3'
+
+__doc__ = r"""
+This module integrates your Mozilla Thunderbird 1.0 tree to
+your sylpheed MH mailbox tree.
+
+The script receives two parameters from command-line:
+ <Thunderbird folder path> <Sylpheed folder path>
+
+Best way to use it is to go to inside yout Thunderbird
+root mailfolder directory and invoke it as:
+
+  <path>\python2.4 <path>\tbird2syl.py . <path to sylpheed>\Mail
+
+This idiom will avoid the creation of the folder Thunderbird inside
+your sylpheed folder tree.
+
+If the names of your directories match in both trees, files should
+be placed in the correct folder.
+
+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
+this out. Live safe and die old!
+
+This code is released in the public domain.
+"""
+
+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.
+    """        
+    offsets = []
+    i = 0
+    state = 'begin'
+    for i,line in enumerate(open(filepath)):
+        if line.startswith('From - ') and state!='found_head':
+           offsets.append(i)
+           continue
+#        elif line.startswith('Return-Path') and state=='found_head':
+#          state = 'found_offset'
+#          offsets.append(i)
+#          continue
+    offsets.append(i)
+    return offsets
+
+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
+    outputdir with appropriate the appropriate naming scheme.
+    """ 
+    if not os.path.exists(outputdir):
+        os.makedirs(outputdir)
+    if not os.path.exists(filepath):
+        raise Exception('Cannot find message file  %s'%(filepath))
+    lines = open(filepath).readlines()
+    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
+
+def process_file(filepath, outputdir):
+    """Integrates a Thunderbird message file into a sylpheed message diretory.
+    """  
+    offs = harvest_offsets(filepath)
+    make_messages(outputdir, filepath, offs, 1)
+
+
+def convert_tree(in_treepath, out_treepath):
+    """Traverse your thunderbird tree, converting each message file found into
+    a sylpheed message directory.
+    """
+    for path,subs,files in os.walk(in_treepath):
+        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__
+    else:
+        convert_tree(sys.argv[1], sys.argv[2])