#!/usr/bin/perl -p # This script adds an information icon to any link into /download/* - if there # is more information to display than just the file name and size. use autodie; sub slurp { local $/=undef; open F, '<', shift; } sub fullsize { scalar reverse join ".", unpack "(A3)*", reverse shift } sub size { $s=shift; $s > 1<<20 ? sprintf '%.1f MiB', $s/(1<<20) : sprintf '%.1f KiB', $s/1024 } sub file { ($code, $lbl, $fn) = @_; my @info; push @info, sprintf 'PGP: %1$s.asc', $fn if -e "$fn.asc"; push @info, sprintf 'MD5: %s', (slurp "$fn.md5") =~ /^([^ ]+)/ if -e "$fn.md5"; push @info, sprintf 'SHA1: %s', (slurp "$fn.sha1") =~ /^([^ ]+)/ if -e "$fn.sha1"; push @info, sprintf 'SHA-256: %s', (slurp "$fn.sha256") =~ /^([^ ]+)/ if -e "$fn.sha256"; return $code if !@info; unshift @info, sprintf 'Size: %s (%s bytes)', size(-s $fn), fullsize(-s $fn); unshift @info, sprintf 'File: %1$s', $fn; $id = sprintf 'fileinfo_%d', rand 1<<32; qq{} . qq{} . qq{} . qq{} . join('
', @info) . qq{
} . $code . qq{ } .qq{
} } BEGIN { chdir 'pub/download' } s{\[([^\]]+)\]\(/download/([^\) ]+)\)}{file $&,$1,$2}eg;