]> www.average.org Git - mkgallery.git/blobdiff - mkgallery.pl
begin work on object design
[mkgallery.git] / mkgallery.pl
index 85c648ec5352cd24958f7b7dfe2de561a28e64b0..138795edc8c1d8dd30570c794c5d9c113d4d988a 100755 (executable)
@@ -24,6 +24,8 @@
 #     misrepresented as being the original software.
 #  3. This notice may not be removed or altered from any source distribution.
 
+package FsObj;
+
 use strict;
 use Carp;
 use POSIX qw/getcwd/;
@@ -31,12 +33,96 @@ use CGI qw/:html *table *center *div/;
 use Image::Info qw/image_info dim/;
 use Image::Magick;
 
-my $ask=1;
-my $startdir=getcwd;
+######################################################################
+
+FsObj->new(getcwd)->iterate;
+
+sub new {
+       my $this = shift;
+       my $class;
+       my $self;
+       if (ref($this)) {
+               $class = ref($this);
+               my $parent = $this;
+               my $path = $parent->{-path};
+               my $name = shift;
+               $path .= '/' if ($path);
+               $path .= $name;
+               my $fullpath = $parent->{-fullpath}.'/'.$name;
+               $self = {-root=>$parent->{-root}, -path=>$path, -base=>$name,
+                               -fullpath=>$fullpath};
+       } else {
+               $class = $this;
+               my $root=shift;
+               $self = {-root=>$root, -fullpath=>$root};
+       }
+       bless $self, $class;
+       print "new $class: ($self->{-root}, $self->{-path}, $self->{-base}, $self->{-fullpath})\n";
+       return $self;
+}
+
+sub iterate {
+       my $self = shift;
+       my $fullpath .= $self->{-fullpath};
+       print "iterate in dir $fullpath\n";
+
+       my @rdirlist = ();
+       my @rimglist = ();
+       my $D;
+       unless (opendir($D,$fullpath)) {
+               warn "cannot opendir $fullpath: $!";
+               return;
+       }
+       while (my $de = readdir($D)) {
+               next if ($de =~ /^\./);
+               my $child = $self->new($de);
+               if ($child->isdir) {
+                       push(@rdirlist,$child);
+               } elsif ($child->isimg) {
+                       push(@rimglist,$child);
+               }
+       }
+       closedir($D);
+       my @sdirlist = sort {$a->{-base} cmp $b->{-base}} @rdirlist;
+       undef @rdirlist; # inplace sorting would be handy here
+       my @simglist = sort {$a->{-base} cmp $b->{-base}} @rimglist;
+       undef @rimglist; # optimize away unsorted versions
+
+       foreach my $dir(@sdirlist) {
+               print "Dir: $dir->{-fullpath}\n";
+               $dir->iterate;
+       }
+       foreach my $img(@simglist) {
+               print "Img: $img->{-fullpath}\n";
+       }
+}
+
+sub isdir {
+       my $self = shift;
+       return ( -d $self->{-fullpath} );
+}
+
+sub isimg {
+       my $self = shift;
+       my $fullpath = $self->{-fullpath};
+       return 0 unless ( -f $fullpath );
+       my $info = image_info($fullpath);
+       if (my $error = $info->{error}) {
+               if (($error !~ "Unrecognized file format") &&
+                   ($error !~ "Can't read head")) {
+                       warn "File \"$fullpath\": $error\n";
+               }
+               return 0;
+       }
+       $self->{-info} = $info;
+       return 1;
+}
 
+######################################################################
+=cut
 ######################################################################
 
-&processdir($startdir);
+&processdir(getcwd);
 
 sub processdir {
        my ($start,$dir)=@_;
@@ -87,7 +173,7 @@ sub processdir {
                        -script=>[{-code=>"var incPrefix='$inc';"},
                                {-src=>$inc."gallery.js"},
                                {-src=>$inc."lightbox.js"}]),"\n";
-       print a({-href=>"../"},"UP");
+       print a({-href=>"../index.html"},"UP");
        print start_center,"\n";
        print h1($title),"\n";
 
@@ -134,6 +220,7 @@ sub processdir {
 # write HTML footer
 
        print br({-clear=>"all"}),"\n";
+       print a({-href=>".html/".$piclist[0]."-slide.html"},"Slideshow");
        print hr,"\n" if ($haspics);
        print end_center,"\n";
        print end_html,"\n";
@@ -223,8 +310,8 @@ sub subalbum {
        my ($base,$title)=@_;
 
        print Tr({-bgcolor=>"#c0c0c0"},
-               td(a({-href=>$base."/"},$base)),
-               td(a({-href=>$base."/"},$title))),"\n";
+               td(a({-href=>$base."/index.html"},$base)),
+               td(a({-href=>$base."/index.html"},$title))),"\n";
 }
 
 sub processfile {
@@ -288,12 +375,21 @@ sub mkauxfile {
        if ($pbase) {
                $pref=sprintf("%s-%s.html",$pbase,$refresh);
        } else {
-               $pref="../";
+               $pref="../index.html";
        }
        if ($nbase) {
                $nref=sprintf("%s-%s.html",$nbase,$refresh);
        } else {
-               $nref="../";
+               $nref="../index.html";
+       }
+       my $toggle;
+       my $toggleref;
+       if ($refresh eq 'slide') {
+               $toggle='Stop!';
+               $toggleref=sprintf("%s-static.html",$base);
+       } else {
+               $toggle='Play->';
+               $toggleref=sprintf("%s-slide.html",$base);
        }
 
        my $tdir=sprintf "%s/%s/.html",$start,$dir;
@@ -307,12 +403,22 @@ sub mkauxfile {
        $title=$base unless ($title);
        if ($refresh eq 'slide') {
                print start_html(-title=>$title,
+                               -bgcolor=>"#808080",
                        -head=>meta({-http_equiv=>'Refresh',
                                -content=>"3; url=$nref"})),"\n";
        } else {
-               print start_html(-title=>$title),"\n";
+               print start_html(-title=>$title,
+                               -bgcolor=>"#808080"),"\n";
        }
-       print img({-src=>"../.640/".$base});
+       print start_center,"\n";
+       print h1($title);
+       print a({-href=>"../index.html"},"Index")," | ";
+       print a({-href=>$pref},"<<Prev")," | ";
+       print a({-href=>$toggleref},$toggle)," | ";
+       print a({-href=>$nref},"Next>>");
+       print p;
+       print img({-src=>"../.640/".$base}),"\n";
+       print end_center,"\n";
        print end_html,"\n";
        close(STDOUT);
 }