Fix missing patchsets
[claws.git] / tools / tb2sylpheed
index a425674..06d7128 100644 (file)
@@ -1,8 +1,9 @@
 #!/usr/bin/perl
 
-# Script name : tb2sylpheed.pl
+# Script name : tb2sylpheed
+# Script version: 1.0.2
 # Script based on : script kmail2sylpheed.pl
-# Script purpose : convert The Bat! addressbook into Sylpheed addressbook
+# Script purpose : convert The Bat! addressbook into Sylpheed addressbook
 # Author : Aleksandar Urosevic aka Urke MMI <urke@gmx.net>
 # Licence : GPL
 #
 # Usage: Export The Bat! Address Book to CSV file format
 #        with all fields selected to YES and then start:
 #        tb2sylpheed --tbfile=/full/path/to/thebat/addressbook.csv
+#
+# Change Log:
+#
+# 18-12-2003 v 1.0.2
+#      - bugfix: added missing attribute-list start
+#
+# 01-01-2003 v 1.0.1
+#      - bugfix: no more empty Business Homepage entry
+#      - bugfix: no more \0D\0A´s in Notes entry
+#      - bugfix: no more double space in Full Name entry
+#      - code utilization
+#      - add info about number of converted addresses
+#
+# 15-08-2002 v 1.0.0
+#      - first public release
+#
+# TODO:
+#
+# * Add switch for Full Name entry on atrybute part
+#
 
 use Getopt::Long;
 
-$tbfile = '';
-
 GetOptions("tbfile=s" => \$tbfile);
 
-$time = time;
-
-# $tbfile = 'thebat-addressbook.csv';
-
-$sylph_addr = "<?xml version=\"1.0\" encoding=\"ISO-8859-2\" ?>\n";
-$sylph_addr .= "<address-book name=\"The Bat! Address Book\" >\n";
-
-# $new_addrbk = "addrbook-000013.xml";
+#$tbfile = '/home/urke/bin/sylpheed/tb2ldif/thebat-addressbook.csv';
+$total_addresses = 0;
 
 chdir;
 
 # check is Sylpheed instrtalled
-
-opendir(SYLPHEED, ".sylpheed") || die("Can't oen sylpheed directory\n");
-       push(@cached, (readdir(SYLPHEED)));
+opendir(SYLPHEED, ".sylpheed") || die("Can't open Sylpheed directory! Conversion abroted\n");
+    push(@cached, (readdir(SYLPHEED)));
 closedir(SYLPHEED);
 
-# get last existing addressbook filename to set filename for newest addressbook
+# get last existing addressbook filename
+# to set filename for newest addressbook
 
+# get all existing addressbook filenames
 foreach $cached (@cached) {
-       if ($cached =~ m/^addrbook/ && $cached =~ m/[0-9].xml$/) {
-               push(addr, "$cached");
-       }
+    if ($cached =~ m/^addrbook/ && $cached =~ m/[0-9].xml$/) {
+       push(addr, "$cached");
+    }
 }
-
+# sort filenames, get last and set newest filename
 @sorted = sort {$a cmp $b} @addr;
 $last_one = pop(@sorted);
 $last_one =~ s/^addrbook-//;
@@ -50,192 +64,215 @@ $last_one =~ s/.xml$//;
 $last_one++;
 $new_addrbk = "addrbook-"."$last_one".".xml";
 
-# opening thebat file in to stack
-
-open (TBFILE, "<$tbfile") || die("Can't find the thebat file\n");
-       @tblines = <TBFILE>;
+# open thebat file to stack
+open (TBFILE, "<$tbfile") || die("Specified Address Book file does not exist.\n\033[5m\033[31mYou must specify full path to input file!\033[0m\nConversion aborted.\n");
+    @tblines = <TBFILE>;
 close TBFILE;
 
+# shift firs line from file because this is field names
 $dross = shift(@tblines);
 
-# create addressbook entry from The Bat! addressbook
+# set time mark and header of addressbook
+$time = time;
+$sylph_addr = "<?xml version=\"1.0\" encoding=\"ISO-8859-2\" ?>\n";
+$sylph_addr .= "<address-book name=\"The Bat! Address Book\" >\n";
 
+# create addressbook entry from The Bat! addressbook
 foreach $tbline (@tblines) {
+    $total_addresses += 1;
     (@tbdata) = split(/,/,$tbline); 
-       foreach $tbdata (@tbdata) {
-               $tbdata =~ s/^"//;
-               $tbdata =~ s/"$//;
-               $tbdata =~ s/"/&quot;/g;
-               $tbdata =~ s/&/&amp;/g;
-               $tbdata =~ s/'/&apos;/g;
-               $tbdata =~ s/</&lt;/g;
-               $tbdata =~ s/>/&gt;/g;
-       }
+    foreach $tbdata (@tbdata) {
+       # fix nonacceptable characters
+       $tbdata =~ s/^"//;
+       $tbdata =~ s/"$//;
+       $tbdata =~ s/"/&quot;/g;
+       $tbdata =~ s/&/&amp;/g;
+       $tbdata =~ s/'/&apos;/g;
+       $tbdata =~ s/</&lt;/g;
+       $tbdata =~ s/>/&gt;/g;
+       $tbdata =~ s/\\2C\ /, /g;
+       $tbdata =~ s/(\\0D\\0A){1,}/, /g;
+       $tbdata =~ s/\ {2,}/ /g;
+    }
+    # set addressbook field values
     $sylph_addr .= "  <person uid=\"$time\" first-name=\"$tbdata[1]\""
-                ." last-name=\"$tbdata[2]\" nick-name=\"$tbdata[5]\""
-                ." cn=\"$tbdata[0]\" >\n"
-                ."    <address-list>\n";
+               ." last-name=\"$tbdata[2]\" nick-name=\"$tbdata[5]\""
+               ." cn=\"$tbdata[0]\" >\n"
+               ."    <address-list>\n";
     $time++;
-    $sylph_addr .= "      <address uid=\"$time\" alias=\"\" email=\"$tbdata[4]\""
-               ." remarks=\"$tbdata[5]\" />\n"
+    $sylph_addr .= "      <address uid=\"$time\" alias=\"$tbdata[5]\" email=\"$tbdata[4]\""
+               ." remarks=\"\" />\n"
                ."    </address-list>\n";
-    if ($tbdata[6] ne "" || $tbdata[7] ne "" || $tbdata[8] ne "" ||
-       $tbdata[9] ne "" || $tbdata[10] ne "" || $tbdata[11] ne "" ||
-       $tbdata[12] ne "" || $tbdata[13] ne "" || $tbdata[14] ne "" ||
-       $tbdata[15] ne "" || $tbdata[16] ne "" || $tbdata[17] ne "" ||
-       $tbdata[18] ne "" || $tbdata[19] ne "" || $tbdata[20] ne "" ||
-       $tbdata[21] ne "" || $tbdata[22] ne "" || $tbdata[23] ne "" ||
-       $tbdata[24] ne "" || $tbdata[25] ne "" || $tbdata[26] ne "" ||
-       $tbdata[27] ne "" || $tbdata[30] ne "" || $tbdata[31] ne "") {
-       $sylph_addr .= "    <attribute-list>\n";
 
+    # find is need to make entry attributes
+    $check = 0;
+    for($i=6; $i<=31; $i++) {
+       $tbdata[$i] =~ s/^\s+//;
+       $tbdata[$i] =~ s/\s+$//;
+       if ($tbdata[$i] ne "") { $check += 1; }
+    }
+
+    if ($check > 0) {
+    $sylph_addr .= "    <attribute-list>\n";
        if ($tbdata[1] ne "" || $tbdata[2] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Full Name\" >"
-                       ."$tbdata[29] $tbdata[1] $tbdata[3] $tbdata[2] $tbdata[28]</attribute>\n";
+           $time++;
+           if($tbdata[29] ne "" && $tbdata[1] ne "") { $full_name = "$tbdata[29] $tbdata[1]"; } else { $full_name = "$tbdata[1]"; }
+           if($tbdata[3] ne "") { $full_name .= " $tbdata[3]"; }
+           if($tbdata[2] ne "") { $full_name .= " $tbdata[2]"; }
+           if($tbdata[28] ne "") { $full_name .= " $tbdata[28]"; }
+               
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Full Name\" >"
+                       ."$full_name</attribute>\n";
        }
        if ($tbdata[15] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Home Street Address\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Home Street Address\" >"
                        ."$tbdata[15]</attribute>\n";
        }
        if ($tbdata[16] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Home City Address\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Home City Address\" >"
                        ."$tbdata[16]</attribute>\n";
        }
        if ($tbdata[17] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Home State Address\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Home State Address\" >"
                        ."$tbdata[17]</attribute>\n";
        }
        if ($tbdata[18] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Home Zip Address\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Home Zip Address\" >"
                        ."$tbdata[18]</attribute>\n";
        }
        if ($tbdata[19] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Home Country Address\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Home Country Address\" >"
                        ."$tbdata[19]</attribute>\n";
        }
        if ($tbdata[9] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Home Phone\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Home Phone\" >"
                        ."$tbdata[9]</attribute>\n";
        }
        if ($tbdata[10] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Home Fax\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Home Fax\" >"
                        ."$tbdata[10]</attribute>\n";
        }
        if ($tbdata[11] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Mobile Phone\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Mobile Phone\" >"
                        ."$tbdata[11]</attribute>\n";
        }
        if ($tbdata[30] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Personal Homepage\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Personal Homepage\" >"
                        ."$tbdata[30]</attribute>\n";
        }
        if ($tbdata[14] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Pager\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Pager\" >"
                        ."$tbdata[14]</attribute>\n";
        }
        if ($tbdata[7] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Bussines Company\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Bussines Company\" >"
                        ."$tbdata[7]</attribute>\n";
        }
        if ($tbdata[8] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Bussines Job Title\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Bussines Job Title\" >"
                        ."$tbdata[8]</attribute>\n";
        }
        if ($tbdata[20] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business Department\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business Department\" >"
                        ."$tbdata[20]</attribute>\n";
        }
        if ($tbdata[21] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business Office\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business Office\" >"
                        ."$tbdata[21]</attribute>\n";
        }
        if ($tbdata[22] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business Street Address\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business Street Address\" >"
                        ."$tbdata[22]</attribute>\n";
        }
        if ($tbdata[23] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business City Address\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business City Address\" >"
                        ."$tbdata[23]</attribute>\n";
        }
        if ($tbdata[24] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business State Address\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business State Address\" >"
                        ."$tbdata[24]</attribute>\n";
        }
        if ($tbdata[25] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business Zip Address\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business Zip Address\" >"
                        ."$tbdata[25]</attribute>\n";
        }
        if ($tbdata[26] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business Country Address\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business Country Address\" >"
                        ."$tbdata[26]</attribute>\n";
        }
        if ($tbdata[12] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business Phone\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business Phone\" >"
                        ."$tbdata[12]</attribute>\n";
        }
        if ($tbdata[13] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business Fax\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business Fax\" >"
                        ."$tbdata[13]</attribute>\n";
        }
        if ($tbdata[31] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business Homepage\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Business Homepage\" >"
                        ."$tbdata[31]</attribute>\n";
        }
        if ($tbdata[27] ne "") {
-               $time++;
-               $sylph_addr .= "      <attribute uid=\"$time\" name=\"Notes\" >"
+           $time++;
+           $sylph_addr .= "      <attribute uid=\"$time\" name=\"Notes\" >"
                        ."$tbdata[27]</attribute>\n";
        }
        $sylph_addr .= "    </attribute-list>\n";
     }
+#    if ( $check > 0 ) {
+#        $sylph_addr .= "</attribute-list>\n";
+#    }
+
     $sylph_addr .=  "  </person>\n";
     $time++;
 }
 $sylph_addr .= "</address-book>\n";
 
+# print new addressbook to file
 open (NEWADDR, ">.sylpheed/$new_addrbk");
-print NEWADDR $sylph_addr;
+    print NEWADDR $sylph_addr;
 close NEWADDR;
 
-open (ADDRIN, "<.sylpheed/addrbook--index.xml") || die("can't open addrbook--index.xml");
-       @addrindex_file = <ADDRIN>;
+# add new addressbook to index
+open (ADDRIN, "<.sylpheed/addrbook--index.xml") || die("Can't open addrbook--index.xml");
+    @addrindex_file = <ADDRIN>;
 close ADDRIN;
 
 foreach $addrindex_line (@addrindex_file) {
-       if ($addrindex_line =~ m/<\/book_list>/) {
-               $rewrite_addrin .= "    <book name=\"The Bat! Address Book\" file=\"$new_addrbk\" />\n"
+    if ($addrindex_line =~ m/<\/book_list>/) {
+       $rewrite_addrin .= "    <book name=\"The Bat! Address Book\" file=\"$new_addrbk\" />\n"
                        ."  </book_list>\n";
-       } else {
-               $rewrite_addrin .= "$addrindex_line";
-       }
+    } else {
+       $rewrite_addrin .= "$addrindex_line";
+    }
 }
 
 open (NEWADDRIN, ">.sylpheed/addrbook--index.xml");
-print NEWADDRIN "$rewrite_addrin";
+    print NEWADDRIN "$rewrite_addrin";
 close NEWADDRIN;
-
-print "\nYou have sucessfully converted your The Bat! addressbook\n";
+print "You have sucessfully converted your The Bat! addressbook\n";
+print "New addressbook file name: $new_addrbk\n";
+print "Total addresses converted: $total_addresses\n";
 exit;