kmail2sylpheed.pl 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. #!/usr/bin/perl
  2. # * Copyright © 2002 Paul Mangan <claws@thewildbeast.co.uk>
  3. # *
  4. # * This file is free software; you can redistribute it and/or modify it
  5. # * under the terms of the GNU General Public License as published by
  6. # * the Free Software Foundation; either version 2 of the License, or
  7. # * (at your option) any later version.
  8. # *
  9. # * This program is distributed in the hope that it will be useful, but
  10. # * WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. # * General Public License for more details.
  13. # *
  14. # * You should have received a copy of the GNU General Public License
  15. # * along with this program; if not, write to the Free Software
  16. # * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  17. ## script name : kmail2sylpheed.pl
  18. ## script purpose : convert a Kmail addressbook into a Sylpheed addressbook
  19. use Getopt::Long;
  20. $kmailfile = '';
  21. GetOptions("kmailfile=s" => \$kmailfile);
  22. $time = time;
  23. $sylph_addr = "<?xml version=\"1.0\" encoding=\"US-ASCII\" ?>\n";
  24. $sylph_addr .= "<address-book name=\"Kmail Address Book\" >\n";
  25. chdir;
  26. #chdir '.sylpheed' || die("You don't appear to have Sylpheed installed\n");
  27. opendir(SYLPHEED, ".sylpheed") || die("Can't open .sylpheed directory\n");
  28. push(@cached,(readdir(SYLPHEED)));
  29. closedir(SYLPHEED);
  30. foreach $cached (@cached) {
  31. if ($cached =~ m/^addrbook/ && $cached =~ m/[0-9].xml$/) {
  32. push(@addr, "$cached");
  33. }
  34. }
  35. @sorted = sort {$a cmp $b} @addr;
  36. $last_one = pop(@sorted);
  37. $last_one =~ s/^addrbook-//;
  38. $last_one =~ s/.xml$//;
  39. $last_one++;
  40. $new_addrbk = "addrbook-"."$last_one".".xml";
  41. open (KFILE, "<$kmailfile") || die("Can't find the kmail file\n");
  42. @kmaillines = <KFILE>;
  43. close KFILE;
  44. $dross = shift(@kmaillines);
  45. foreach $kmailline (@kmaillines) {
  46. (@kmaildata) = split(/,/,$kmailline);
  47. foreach $kmaildata (@kmaildata) {
  48. $kmaildata =~ s/^"//;
  49. $kmaildata =~ s/"$//;
  50. $kmaildata =~ s/"/&quot;/g;
  51. $kmaildata =~ s/&/&amp;/g;
  52. $kmaildata =~ s/'/&apos;/g;
  53. $kmaildata =~ s/</&lt;/g;
  54. $kmaildata =~ s/>/&gt;/g;
  55. }
  56. $sylph_addr .= " <person uid=\"$time\" first-name=\"$kmaildata[0]\""
  57. ." last-name=\"$kmaildata[1]\" nick-name=\"$kmaildata[7]\""
  58. ." cn=\"$kmaildata[0] $kmaildata[1]\" >\n"
  59. ." <address-list>\n";
  60. $time++;
  61. $sylph_addr .= " <address uid=\"$time\" alias=\"\" email=\"$kmaildata[6]\""
  62. ." remarks=\"$kmaildata[8]\" />\n"
  63. ." </address-list>\n";
  64. if ($kmaildata[13] ne "" || $kmaildata[9] ne "" || $kmaildata[21] ne "" ||
  65. $kmaildata[16] ne "" || $kmaildata[5] ne "" || $kmaildata[24] ne "" ||
  66. $kmaildata[19] ne "" || $kmaildata[12] ne "" || $kmaildata[10] ne "" ||
  67. $kmaildata[4] ne "" || $kmaildata[2] ne "" || $kmaildata[11] ne "" ||
  68. $kmaildata[3] ne "" || $kmaildata[14] ne "" || $kmaildata[22] ne "" ||
  69. $kmaildata[17] ne "" || $kmaildata[20] ne "" || $kmaildata[15] ne "" ||
  70. $kmaildata[23] ne "" || $kmaildata[18] ne "") {
  71. $sylph_addr .= " <attribute-list>\n";
  72. if ($kmaildata[3] ne "" || $kmaildata[2] ne "") {
  73. $time++;
  74. $sylph_addr .= " <attribute uid=\"$time\" name=\"Full Name\" >"
  75. ."$kmaildata[3] $kmaildata[0] $kmaildata[2] $kmaildata[1]</attribute>\n";
  76. }
  77. if ($kmaildata[15] ne "") {
  78. $time++;
  79. $sylph_addr .= " <attribute uid=\"$time\" name=\"Home Street Address\" >"
  80. ."$kmaildata[15]</attribute>\n";
  81. }
  82. if ($kmaildata[16] ne "") {
  83. $time++;
  84. $sylph_addr .= " <attribute uid=\"$time\" name=\"Home City Address\" >"
  85. ."$kmaildata[16]</attribute>\n";
  86. }
  87. if ($kmaildata[17] ne "") {
  88. $time++;
  89. $sylph_addr .= " <attribute uid=\"$time\" name=\"Home State Address\" >"
  90. ."$kmaildata[17]</attribute>\n";
  91. }
  92. if ($kmaildata[18] ne "") {
  93. $time++;
  94. $sylph_addr .= " <attribute uid=\"$time\" name=\"Home Zip Address\" >"
  95. ."$kmaildata[18]</attribute>\n";
  96. }
  97. if ($kmaildata[19] ne "") {
  98. $time++;
  99. $sylph_addr .= " <attribute uid=\"$time\" name=\"Home Country Address\" >"
  100. ."$kmaildata[19]</attribute>\n";
  101. }
  102. if ($kmaildata[10] ne "") {
  103. $time++;
  104. $sylph_addr .= " <attribute uid=\"$time\" name=\"Home Phone\" >"
  105. ."$kmaildata[10]</attribute>\n";
  106. }
  107. if ($kmaildata[12] ne "") {
  108. $time++;
  109. $sylph_addr .= " <attribute uid=\"$time\" name=\"Home Fax\" >"
  110. ."$kmaildata[12]</attribute>\n";
  111. }
  112. if ($kmaildata[11] ne "") {
  113. $time++;
  114. $sylph_addr .= " <attribute uid=\"$time\" name=\"Mobile Phone\" >"
  115. ."$kmaildata[11]</attribute>\n";
  116. }
  117. if ($kmaildata[14] ne "") {
  118. $time++;
  119. $sylph_addr .= " <attribute uid=\"$time\" name=\"Pager\" >"
  120. ."$kmaildata[14]</attribute>\n";
  121. }
  122. if ($kmaildata[5] ne "") {
  123. $time++;
  124. $sylph_addr .= " <attribute uid=\"$time\" name=\"Company\" >"
  125. ."$kmaildata[5]</attribute>\n";
  126. }
  127. if ($kmaildata[4] ne "") {
  128. $time++;
  129. $sylph_addr .= " <attribute uid=\"$time\" name=\"Job Title\" >"
  130. ."$kmaildata[4]</attribute>\n";
  131. }
  132. if ($kmaildata[20] ne "") {
  133. $time++;
  134. $sylph_addr .= " <attribute uid=\"$time\" name=\"Business Street Address\" >"
  135. ."$kmaildata[20]</attribute>\n";
  136. }
  137. if ($kmaildata[21] ne "") {
  138. $time++;
  139. $sylph_addr .= " <attribute uid=\"$time\" name=\"Business City Address\" >"
  140. ."$kmaildata[21]</attribute>\n";
  141. }
  142. if ($kmaildata[22] ne "") {
  143. $time++;
  144. $sylph_addr .= " <attribute uid=\"$time\" name=\"Business State Address\" >"
  145. ."$kmaildata[22]</attribute>\n";
  146. }
  147. if ($kmaildata[23] ne "") {
  148. $time++;
  149. $sylph_addr .= " <attribute uid=\"$time\" name=\"Business Zip Address\" >"
  150. ."$kmaildata[23]</attribute>\n";
  151. }
  152. if ($kmaildata[24] ne "") {
  153. $time++;
  154. $sylph_addr .= " <attribute uid=\"$time\" name=\"Business Country Address\" >"
  155. ."$kmaildata[24]</attribute>\n";
  156. }
  157. if ($kmaildata[9] ne "") {
  158. $time++;
  159. $sylph_addr .= " <attribute uid=\"$time\" name=\"Business Phone\" >"
  160. ."$kmaildata[9]</attribute>\n";
  161. }
  162. if ($kmaildata[13] ne "") {
  163. $time++;
  164. $sylph_addr .= " <attribute uid=\"$time\" name=\"Business Fax\" >"
  165. ."$kmaildata[13]</attribute>\n";
  166. }
  167. $sylph_addr .= " </attribute-list>\n";
  168. }
  169. $sylph_addr .= " </person>\n";
  170. $time++;
  171. }
  172. $sylph_addr .= "</address-book>\n";
  173. open (NEWADDR, ">.sylpheed/$new_addrbk");
  174. print NEWADDR $sylph_addr;
  175. close NEWADDR;
  176. open (ADDRIN, "<.sylpheed/addrbook--index.xml") || die("can't open addrbook--index.xml");
  177. @addrindex_file = <ADDRIN>;
  178. close ADDRIN;
  179. foreach $addrindex_line (@addrindex_file) {
  180. if ($addrindex_line =~ m/<\/book_list>/) {
  181. $rewrite_addrin .= " <book name=\"Kmail Address Book\" file=\"$new_addrbk\" />\n"
  182. ." </book_list>\n";
  183. } else {
  184. $rewrite_addrin .= "$addrindex_line";
  185. }
  186. }
  187. open (NEWADDRIN, ">.sylpheed/addrbook--index.xml");
  188. print NEWADDRIN "$rewrite_addrin";
  189. close NEWADDRIN;
  190. print "\nYou have sucessfully converted your Kmail addressbook\n";
  191. exit;