4 # * Copyright 2002 Paul Mangan <claws@thewildbeast.co.uk>
6 # * Reimplemented by Torsten Schoenfeld <kaffeetisch@web.de>
8 # * This file is free software; you can redistribute it and/or modify it
9 # * under the terms of the GNU General Public License as published by
10 # * the Free Software Foundation; either version 2 of the License, or
11 # * (at your option) any later version.
13 # * This program is distributed in the hope that it will be useful, but
14 # * WITHOUT ANY WARRANTY; without even the implied warranty of
15 # * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 # * General Public License for more details.
18 # * You should have received a copy of the GNU General Public License
19 # * along with this program; if not, write to the Free Software
20 # * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 chdir($ENV{ HOME } . "/.sylpheed") or die("You don't appear to have Sylpheed installed\n");
25 ###############################################################################
27 my $normal_headers = qr/^(?:Subject|From|To|Cc)$/;
28 my $extra_headers = qr/^(?:Reply-To|Sender|List-Id|X-ML-Name|X-List|X-Sequence|X-Mailer)$/;
30 my @new_filters = ("[global]\n");
32 ###############################################################################
36 open(FOLDERLIST, "<folderlist.xml") or die("Can't find 'folderlist.xml'\n");
37 while (<FOLDERLIST>) {
38 if (m/<folder type="mh" name="([^"]+)" path="[^"]+"/) {
45 ###############################################################################
47 open(FILTERRC, "<filterrc") or die("Can't find your old filter rules ('filterrc')\n");
59 $action) = split(/\t/);
61 $action = $action eq "m" ? "move" : "delete";
62 $destination = $destination =~ m!^\#mh/! ?
64 "#mh/$mailbox/$destination";
72 ###########################################################################
74 if ($mode_one % 2 == 0) {
82 $match_type_one = "matchcase";
85 $match_type_one = "regexpcase";
88 ###########################################################################
90 if ($mode_two % 2 == 0) {
98 $match_type_two = "matchcase";
101 $match_type_two = "regexpcase";
104 ###########################################################################
106 if ($header_one eq "To" && $header_two eq "Cc" ||
107 $header_one eq "Cc" && $header_two eq "To" and
108 $value_one eq $value_two and
109 $mode_one eq $mode_two and
111 if ($action eq "move") {
112 $new_filter = $predicate_one . qq(to_or_cc $match_type_one "$value_one" move "$destination"\n);
115 $new_filter = $predicate_one . qq(to_or_cc $match_type_one "$value_one" delete\n);
119 if ($header_one =~ m/$normal_headers/) {
120 $new_filter .= $predicate_one . lc($header_one) . qq( $match_type_one "$value_one");
122 elsif ($header_one =~ m/$extra_headers/) {
123 $new_filter .= $predicate_one . qq(header "$header_one" $match_type_one "$value_one");
127 if ($header_two =~ m/$normal_headers/) {
128 $new_filter .= qq( $op ) . $predicate_two . lc($header_two) . qq( $match_type_two "$value_two");
130 elsif ($header_two =~ m/$extra_headers/) {
131 $new_filter .= qq( $op ) . $predicate_two . qq(header "$header_two" $match_type_two "$value_two");
135 if (defined($new_filter)) {
136 if ($action eq "move") {
137 $new_filter .= qq( move "$destination"\n);
140 $new_filter .= qq(delete\n);
145 ###########################################################################
147 push(@new_filters, $new_filter) if (defined($new_filter));
151 ###############################################################################
153 open(MATCHERRC, ">>matcherrc");
154 print MATCHERRC @new_filters;
157 rename("filterrc", "filterrc.old");
159 ###############################################################################
161 print "Converted $#new_filters filters\n";
162 print "Renamed your old filter rules ('filterrc' to 'filterrc.old')\n";