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 = shift(@ARGV)
11 or die "Local package directory not specified (first argument)\n";
12 my $save_rss_file = shift(@ARGV)
13 or die "RSS output file path not specified (second argument)\n";
14 my $base_dlurl = 'https://www.privoxy.org/sf-download-mirror/';
16 my $max_advertised_files = 100;
38 # 1st & 2nd directory should NOT contain ANY 'FILES'. (expecting only 'Directory')
40 opendir(my $D1, $scan_dir) or die "Can't open 1st directory! /";
41 while (my $fi1 = readdir($D1)) {
42 next if ($fi1 =~ m/^\./);
44 next if ($fi1 eq 'OldFiles' or $fi1 eq 'pkgsrc');
45 opendir(my $D2, $scan_dir . $fi1 . '/')
46 or die "Can't open 2nd directory! /$fi1";
47 while (my $fi2 = readdir($D2)) {
48 next if ($fi2 =~ m/^\./);
50 ## start listing /OS/Version/FILE
51 opendir(my $D3, $scan_dir . $fi1 . '/' . $fi2 . '/')
52 or die "Can't open 3rd directory! /$fi1/$fi2";
53 while (my $fi3 = readdir($D3)) {
54 next if ($fi3 =~ m/^\./);
55 $target = $scan_dir . $fi1 . '/' . $fi2 . '/' . $fi3;
56 next if (!-e $target); # skip if file is not exist
60 open($filedata, "<", $target)
61 or die "Can't open '$target' to generate checksum $!";
62 my $sha256 = Digest::SHA->new("SHA-256");
63 $sha256->addfile($filedata);
65 $target_sha256 = $sha256->hexdigest;
68 $target_uri = $fi1 . '/' . $fi2 . '/' . $fi3;
69 $target_time = (stat $target)[9];
73 '<item><title><![CDATA[' . $target_uri . ']]></title>';
75 '<description><![CDATA['
79 . ')]]></description>';
88 $target_line .= '<pubDate>';
89 ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
91 $target_line .= sprintf("%s, %s %s %d %.2d:%.2d:%.2d GMT",
92 $days[$wday], $mday, $months[$mon], ($year + 1900),
94 $target_line .= '</pubDate></item>';
97 $Array[$i] = ([$target_time, $target_line]);
99 die "maxlimit $maxlimit reached!" unless ($i < $maxlimit);
102 ## end listing /OS/Version/FILE
110 # Result = Full XML Codes
112 '<?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>';
113 ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime();
115 "$days[$wday], $mday $months[$mon] "
117 . " $hour:$min:$sec GMT";
118 $result .= '</pubDate>';
121 my @resArray = sort { @$a[0] <=> @$b[0] } @Array;
123 while ($max_advertised_files-- > 0 && $i >= 0) {
124 $result .= $resArray[$i][1];
127 $result .= '</channel></rss>';
130 open(my $XMLF, ">", $save_rss_file) or die "Failed to write XML file";