File: get.sbr.refile

package info (click to toggle)
im 1%3A151-2
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 1,464 kB
  • sloc: perl: 8,081; sh: 3,254; makefile: 139
file content (75 lines) | stat: -rw-r--r-- 1,754 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# Auto refiling for imget  -*-Perl-*-

use IM::File qw(im_rename);

sub get_sub ($$$) {
    my($folder, $first, $last) = @_;
    my($header, $flie, $new_folder, $new_file, $tmp_str, $dir, $msg);
    my($touch_file, $touch_file_m, $touch_file_n);

    return if ($folder ne &inbox_folder());

    $dir = &expand_path($folder);
    $touch_file = "$dir/.im_getsbr_touch";

    if (-e $touch_file) {
	$touch_file_m = -M $touch_file;
	$touch_file_n = 0;
	if (open(FH, $touch_file)) {
	    while (<FH>) {
		chomp;
		$touch_file_n = $_;
	    }
	    close(FH);
	}
	for ($msg = $last; $msg >= $first; $msg--) {
	    $file = &message_name($folder, $msg);
	    if (! -e $file) {
		last;
	    }
	    if (-M $file > $touch_file_m) {
		last;
	    }
	    if (-M $file == $touch_file_m && $msg <= $touch_file_n) {
		last;
	    }
	}
	$first = $msg + 1;
    }

    for ($msg = $first; $msg <= $last; $msg++) {
	$file = &message_name($folder, $msg);
	if (open(MSG, "$file")) {
	    $tmp_str = $/;
	    $/ = "\n\n";
	    $header = <MSG>;
	    $/ = $tmp_str;

	    $new_folder = $folder;
	    if ($header =~ /(^|\n)X-Bogosity: Yes/i) {
		$new_folder = '+spam';
	    } elsif ($header =~ /(^|\n)X-Spam-Flag: Yes/i) {
		$new_folder = '+spam';
	    } elsif ($header =~ /(^|\n)X-Spam: yes/i) {
		$new_folder = '+spam';
#	    } elsif ($header =~ /(^|\n)X-ML-Name: mew-dist/i) {
#		$new_folder = '+mew-dist';
	    }
	    if ($new_folder ne $folder) {
		if (&create_folder($new_folder) == 0) {
		    $new_file = &message_name($new_folder, 'new') || die $!;
		    &im_notice("refiling $folder/$msg to $new_folder.\n");
		    &im_rename($file, $new_file) || die $!;
		}
	    }
	    close(MSG);
	}
    }

    if (open(FH, ">$touch_file")) {
	print FH "$last\n";
	close(FH);
    }
}

1;