-#< Config END >
-
-my @Array = ();
-my $i = 0;
-my $sec;
-my $min;
-my $hour;
-my $mday;
-my $mon;
-my $year;
-my $wday;
-my $yday;
-my $isdst;
-my $target;
-my $target_sha256;
-my $target_uri;
-my $target_time;
-my $target_line;
-
-#
-# 1st & 2nd directory should NOT contain ANY 'FILES'. (expecting only 'Directory')
-#
-opendir(my $D1, $scan_dir) or die "Can't open 1st directory! /";
-while (my $fi1 = readdir($D1)) {
- next if ($fi1 =~ m/^\./);
-
- next if ($fi1 eq 'OldFiles' or $fi1 eq 'pkgsrc');
- opendir(my $D2, $scan_dir . $fi1 . '/')
- or die "Can't open 2nd directory! /$fi1";
- while (my $fi2 = readdir($D2)) {
- next if ($fi2 =~ m/^\./);
-
-## start listing /OS/Version/FILE
- opendir(my $D3, $scan_dir . $fi1 . '/' . $fi2 . '/')
- or die "Can't open 3rd directory! /$fi1/$fi2";
- while (my $fi3 = readdir($D3)) {
- next if ($fi3 =~ m/^\./);
- $target = $scan_dir . $fi1 . '/' . $fi2 . '/' . $fi3;
- next if (!-e $target); # skip if file is not exist
-
- # Get SHA-256 hash
- my $filedata;
- open($filedata, "<", $target)
- or die "Can't open '$target' to generate checksum $!";
- my $sha256 = Digest::SHA->new("SHA-256");
- $sha256->addfile($filedata);
- close($filedata);
- $target_sha256 = $sha256->hexdigest;
-
- # URI and Time
- $target_uri = $fi1 . '/' . $fi2 . '/' . $fi3;
- my $escaped_target_uri = $target_uri;
- $escaped_target_uri =~ s@ @%20@g;
- $target_time = (stat $target)[9];
-
- # RSS line
- $target_line =
- '<item><title><![CDATA[' . $target_uri . ']]></title>';
- $target_line .=
- '<description><![CDATA['
- . $target_uri
- . ' (SHA-256: '
- . $target_sha256
- . ')]]></description>';
- $target_line .=
- '<link>'
- . $base_dlurl
- . $escaped_target_uri
- . '</link><guid>'
- . $base_dlurl
- . $escaped_target_uri
- . '</guid>';
- $target_line .= '<pubDate>';
- ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
- gmtime($target_time);
- $target_line .= sprintf("%s, %s %s %d %.2d:%.2d:%.2d GMT",
- $days[$wday], $mday, $months[$mon], ($year + 1900),
- $hour, $min, $sec);
- $target_line .= '</pubDate></item>';
- $target_line .= "\n";
-
- # Add it to Array
- $Array[$i] = ([$target_time, $target_line]);
- $i++;
- die "maxlimit $maxlimit reached!" unless ($i < $maxlimit);
- }
- closedir($D3);
-## end listing /OS/Version/FILE
+sub generate_rss_item($$$$) {
+ my ($target, $target_uri, $target_time, $target_sha256) = @_;
+
+ my $rss_item;
+ my $escaped_target_uri = $target_uri;
+ $escaped_target_uri =~ s@ @%20@g;
+
+ # RSS line
+ $rss_item =
+ '<item><title><![CDATA[' . $target_uri . ']]></title>';
+ $rss_item .=
+ '<description><![CDATA['
+ . $target_uri
+ . ' (SHA-256: '
+ . $target_sha256
+ . ')]]></description>';
+ $rss_item .=
+ '<link>'
+ . $base_dlurl
+ . $escaped_target_uri
+ . '</link><guid>'
+ . $base_dlurl
+ . $escaped_target_uri
+ . '</guid>';
+ $rss_item .= '<pubDate>';
+ my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
+ gmtime($target_time);
+ $rss_item .= sprintf("%s, %s %s %d %.2d:%.2d:%.2d GMT",
+ $days[$wday], $mday, $months[$mon], ($year + 1900),
+ $hour, $min, $sec);
+ $rss_item .= '</pubDate></item>';
+ $rss_item .= "\n";
+
+ return $rss_item;
+}
+
+sub get_sha256_sum($) {
+ my $file = shift;
+
+ open(my $fd, "<", $file)
+ or die "Can't open '$file' to generate checksum $!";
+ my $sha256 = Digest::SHA->new("SHA-256");
+ $sha256->addfile($fd);
+ close($fd);
+
+ return $sha256->hexdigest;
+}
+
+sub get_released_files($) {
+ my $scan_dir = shift;
+
+ my @Array = ();
+ my $i = 0;
+ my $target;
+ my $target_sha256;
+ my $target_uri;
+ my $target_time;
+ my $target_line;
+
+ opendir(my $D1, $scan_dir) or die "Can't open 1st directory! /";
+ while (my $fi1 = readdir($D1)) {
+ next if ($fi1 =~ m/^\./);
+ next if ($fi1 eq 'OldFiles' or $fi1 eq 'pkgsrc');
+
+ opendir(my $D2, $scan_dir . $fi1 . '/')
+ or die "Can't open 2nd directory! /$fi1";
+ while (my $fi2 = readdir($D2)) {
+ next if ($fi2 =~ m/^\./);
+
+ # Start listing /OS/Version/FILE
+ opendir(my $D3, $scan_dir . $fi1 . '/' . $fi2 . '/')
+ or die "Can't open 3rd directory! /$fi1/$fi2";
+ while (my $fi3 = readdir($D3)) {
+ next if ($fi3 =~ m/^\./);
+ $target = $scan_dir . $fi1 . '/' . $fi2 . '/' . $fi3;
+ next if (!-e $target); # skip if file is not exist