Comics
view release on metacpan or search on metacpan
lib/Comics.pm view on Meta::CPAN
);
}
}
use LWP::UserAgent;
our $ua;
our $uuid;
sub run_plugins {
unless ( $ua ) {
$ua = LWP::UserAgent::Custom->new;
$uuid = uuid();
}
foreach my $comic ( @plugins ) {
warn("Plugin: ", $comic->{name}, "\n") if $verbose > 1;
# Force existence of this comic's state otherwise
# it will be autovivified within the fetch method
# and never get outside.
$state->{comics}->{$comic->{tag}} ||= {};
# Make the state accessible.
$comic->{state} = $state->{comics}->{$comic->{tag}};
# Skip is disabled.
next if $comic->{state}->{disabled} && !$force;
# Run it, trapping errors.
$stats->{tally}++;
unless ( eval { $comic->fetch($reuse); 1 } ) {
$comic->{state}->{fail} = $@;
debug($comic->{state}->{fail});
push( @{ $stats->{fail} },
[ $comic->{name}, $comic->{state}->{fail} ] );
}
}
}
################ Index subroutines ################
sub build {
# Change to the spooldir and collect all HTML fragments.
chdir($spooldir) or die("$spooldir: $!\n");
opendir( my $dir, "." );
my @files = grep { /^[^._].+(?<!index)\.(?:html)$/ } readdir($dir);
close($dir);
warn("Number of images = ", scalar(@files), "\n") if $debug;
$stats->{tally} = $stats->{uptodate} = @files if $rebuild;
# Sort the fragments on last modification date.
@files =
map { $_->[0] }
sort { $b->[1] <=> $a->[1] }
grep { $force || ! $state->{comics}->{$_->[2]}->{disabled} }
map { ( my $t = $_ ) =~ s/\.\w+$//;
[ $_, (stat($_))[9], $t ] }
@files;
if ( $debug > 1 ) {
warn("Images (sorted):\n");
warn(" $_\n") for @files;
}
# Creat icon.
unless ( -s "comics.png" ) {
require Comics::Utils::Icon;
open( my $fd, '>:raw', "comics.png" );
print $fd Comics::Utils::Icon::icon();
close($fd);
}
# Create a new index.html.
open( my $fd, '>:utf8', "index.html" );
preamble($fd);
htmlstats($fd);
for ( @files ) {
open( my $hh, '<:utf8', $_ )
or die("$_: $!");
print { $fd } <$hh>;
close($hh);
}
postamble($fd);
close($fd);
}
sub preamble {
my ( $fd ) = @_;
print $fd <<EOD;
<html>
<head>
<title>Comics!</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<style type="text/css">
body {
font-family : Verdana, Arial, Helvetica, sans-serif;
text-align: center;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 10px;
margin-left: 0px;
font-size:12pt;
}
.toontable {
background-color: #eee;
padding: 9px;
margin: 18px;
border: 1px solid #ddd;
}
.toonimage {
background-color: white;
border: 0px;
}
a {
text-decoration: none;
color: black;
}
( run in 2.816 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )