6 my @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
7 my @days = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
10 my $scan_dir = '/xxxxxxxxxxxxxxxxxxxxxx/sf-download/';
11 my $base_dlurl = 'https://www.privoxy.org/sf-download-mirror/';
12 my $save_rss_file ='/xxxxxxxxxxxxxxxxxxxxxx/release.xml'; # e.g., release.rss
35 # 1st & 2nd directory should NOT contain ANY 'FILES'. (expecting only 'Directory')
37 opendir(D1, $scan_dir) or die "Can't open 1st directory! /";
38 while (my $fi1 = readdir(D1)) {
39 next if ($fi1 =~ m/^\./);
41 next if ($fi1 eq 'OldFiles' or $fi1 eq 'pkgsrc');
42 opendir(D2, $scan_dir . $fi1 . '/')
43 or die "Can't open 2nd directory! /$fi1";
44 while (my $fi2 = readdir(D2)) {
45 next if ($fi2 =~ m/^\./);
47 ## start listing /OS/Version/FILE
48 opendir(D3, $scan_dir . $fi1 . '/' . $fi2 . '/')
49 or die "Can't open 3rd directory! /$fi1/$fi2";
50 while (my $fi3 = readdir(D3)) {
51 next if ($fi3 =~ m/^\./);
52 $target = $scan_dir . $fi1 . '/' . $fi2 . '/' . $fi3;
53 next if (!-e $target); # skip if file is not exist
57 unless (open $filedata, $target) { next; }
58 my $sha1 = Digest::SHA1->new;
59 $sha1->addfile($filedata);
61 $target_sha1 = $sha1->hexdigest;
64 $target_uri = $fi1 . '/' . $fi2 . '/' . $fi3;
65 $target_time = (stat $target)[9];
69 '<item><title><![CDATA[' . $target_uri . ']]></title>';
71 '<description><![CDATA['
75 . ')]]></description>';
84 $target_line .= '<pubDate>';
85 ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
88 "$days[$wday], $mday $months[$mon] "
90 . " $hour:$min:$sec GMT";
91 $target_line .= '</pubDate></item>';
94 $Array[$i] = ([$target_time, $target_line]);
96 die "maxlimit $maxlimit reached!" unless ($i < $maxlimit);
99 ## end listing /OS/Version/FILE
107 # Result = Full XML Codes
109 '<?xml version="1.0" encoding="utf-8"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><title>Privoxy Releases</title><link>https://www.privoxy.org/announce.txt</link><description><![CDATA[Privoxy Releases RSS feed]]></description><pubDate>';
110 ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime();
112 "$days[$wday], $mday $months[$mon] "
114 . " $hour:$min:$sec GMT";
115 $result .= '</pubDate>';
118 my @resArray = sort { @$a[0] <=> @$b[0] } @Array;
120 while ($i >= 0) { $result .= $resArray[$i][1]; $i--; }
121 $result .= '</channel></rss>';
124 open(XMLF, "> $save_rss_file") or die "Failed to write XML file";