use Term::ReadLine;
use Getopt::Long;
use Encode;
-use encoding 'utf-8';
+#use encoding 'utf-8';
binmode(STDOUT, ":utf8");
my $haveimagick = eval { require Image::Magick; };
{ package Image::Magick; } # to make perl compiler happy
-my $haverssxml = eval { require XML::RSS; };
+my $haverss = eval { require XML::RSS; };
{ package XML::RSS; } # to make perl compiler happy
+my $haveatom = eval { require XML::Atom; };
+{ package XML::Atom; } # to make perl compiler happy
+
+my $havegeoloc = eval { require Image::ExifTool::Location; };
+{ package Image::ExifTool::Location; } # to make perl compiler happy
+
my @sizes = (160, 640, 1600);
my $incdir = ".gallery2";
my $debug = 0;
my $asktitle = 0;
my $noasktitle = 0;
-my $rssfile = "";
+my $feed = "";
charset("utf-8");
'incpath'=>\$incpath,
'asktitle'=>\$asktitle,
'noasktitle'=>\$noasktitle,
- 'rssfile=s'=>\$rssfile,
+ 'feed=s'=>\$feed,
'debug'=>\$debug)) {
&help;
}
-if ($rssfile && ! $haverssxml) {
- print STDERR "You need to get XML::RSS from CPAN to use --rssfile\n";
+if ($feed && ! ($haverss || $haveatom)) {
+ print STDERR "You need to get XML::RSS and/or XML::Atom to use --feed\n";
exit 1;
}
--asktitle: ask to edit album titles even if there are ".title" files
--noasktitle: don't ask to enter album titles even where ".title"
files are absent. Use partial directory names as titles.
- --rssfile=...: build RSS feed for newly added "albums", give name of rss file
+ --feed=...: build RSS feed for newly added "albums", give name of rss file
__END__
exit 1;
my $conffile=$toppath.'/'.$incdir.'/rss.conf';
my $CONF;
- if ($rssfile) {
+ if ($feed) {
if (open($CONF,">".$conffile)) {
- print $CONF "file: ",$rssfile,"\n";
+ print $CONF "file: ",$feed,"\n";
close($CONF);
} else {
print STDERR "could not open $conffile: $!\n";
$v =~ s/^\s*//;
$v =~ s/\s*$//;
if ($k eq 'file') {
- $rssfile=$v;
+ $feed=$v;
}
}
}
- return unless ($rssfile);
+ return unless ($feed);
- $rssobj->{'file'} = $self->{-toppath}.'/'.$rssfile;
+ $rssobj->{'file'} = $self->{-toppath}.'/'.$feed;
$rssobj->{'rss'} = new XML::RSS (version=>'2.0');
if ( -f $rssobj->{'file'} ) {
$rssobj->{'rss'}->parsefile($rssobj->{'file'});
my $p1;
my $p2;
for ($p1=0,$p2=length($toppath);
- substr($rssfile,$p1,3) eq '../' && $p2>0;
+ substr($feed,$p1,3) eq '../' && $p2>0;
$p1+=3,$p2=rindex($toppath,'/',$p2-1)) {;}
$link=substr($toppath,$p2);
$link =~ s%^/%%;
$link .= '/' if ($link);
- while (($p1=index($rssfile,'/',$p1+1)) >= 0) {
+ while (($p1=index($feed,'/',$p1+1)) >= 0) {
$link = '../'.$link;
}
my $self = shift;
my $fullpath = $self->{-fullpath};
return 0 unless ( -f $fullpath );
+
+ if ($havegeoloc) {
+ my $exif = new Image::ExifTool;
+ $exif->ExtractInfo($fullpath);
+ my ($la,$lo) = $exif->GetLocation();
+ if ($la && $lo) {
+ $self->{-geoloc} = [$la,$lo];
+ }
+ }
+
my $info = image_info($fullpath);
if (my $error = $info->{error}) {
if (($error !~ "Unrecognized file format") &&
my $title;
my $T;
if (open($T,'<'.$fullpath.'/.title')) {
+ binmode($T, ":utf8");
$title = <$T>;
$title =~ s/[\r\n]*$//;
close($T);
$rsslink=Link({-rel=>'alternate',
-type=>'application/rss+xml',
-title=>'RSS',
- -href=>$self->{-inc}.$rssfile});
+ -href=>$self->{-inc}.$feed});
}
print $IND start_html(-title => $title,
-encoding=>"utf-8",
$self->{-parent}->{-numofimgs}++;
print $IND a({-name=>$name}),"\n",
- start_table({-class=>'slide'}),start_Tr,start_td,"\n",
- div({-class=>'slidetitle'},
+ start_table({-class=>'slide'}),start_Tr,start_td,"\n";
+ print $IND div({-class=>'slidetitle'},
"\n ",a({-href=>".html/$name-info.html",
-title=>'Image Info: '.$name,
-class=>'infoBox'},
$title),"\n"),"\n",
- div({-class=>'slideimage'},
- "\n ",a({-href=>".html/$name-static.html",
+ start_div({-class=>'slideimage'});
+ if ($self->{-geoloc}) {
+ my ($la,$lo) = @{$self->{-geoloc}};
+ print $IND a({-href=>"http://maps.google.com/".
+ "?q=$la,$lo&ll=$la,$lo",
+ -title=>"$la,$lo",
+ -class=>'geoloc'},
+ div({-class=>'geoloc'},"")),"\n";
+ }
+ print $IND a({-href=>".html/$name-static.html",
-title=>$title,
-class=>'showImage',
-rel=>'i'.$name},
img({-src=>$thumb,
-class=>'thumbnail',
- -alt=>$title})),"\n"),"\n",
+ -alt=>$title})),"\n",end_div,
start_div({-class=>'varimages',-id=>'i'.$name,-title=>$title}),"\n";
foreach my $sz(@sizes) {
my $src=$self->{$sz}->{'url'};