X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=gal2%2Fbin%2Fgal-mj-upgrade;h=6806012fd3ff68eef24c4afab75e2864e78caa19;hb=cf126a8722526a25290dfe8a68a5c20ca7322d3b;hp=cc3189899ba4f21bef34c3ef9f2e1dad006766c6;hpb=45edeb070735dd3d2839fa70bd6874b147cc2d2c;p=gallery.git diff --git a/gal2/bin/gal-mj-upgrade b/gal2/bin/gal-mj-upgrade index cc31898..6806012 100755 --- a/gal2/bin/gal-mj-upgrade +++ b/gal2/bin/gal-mj-upgrade @@ -3,23 +3,137 @@ use strict; use warnings; -use Cwd; +use UCW::Gallery; +use File::Spec; my $photos_root = $ENV{HOME} . '/photos'; -my $album = $ARGV[0]; -if (!defined $album) { - my $cwd = getcwd; - $cwd =~ m{/photos/(.*)} or die "Cannot identify album from current directory, need to specify maunally.\n"; - $album = $1; +my $album = $ARGV[0] // die "Usage: gal mj-upgrade \n"; +print "### $album ###\n"; + +### Scan photos.map ### + +my $year = $album; +$year =~ s{/.*}{}; +if ($album eq '2009/Fireworks') { $year = 2008; } +print "Loading map for $year\n"; +open M, "$photos_root/photos.map" or die "No map file found\n"; +my %map = (); +while () { + chomp; + m{^$year} or next; + my ($path, $hash) = split /\t/; + my $name = $path; + $name =~ s{.*/}{}; + if (defined $map{$name}) { + my $prev = $map{$name}; + if ($prev->{hash} ne $hash) { + print STDERR "Collision for $name: ", $prev->{path}, " vs. ", $path, "\n"; + } else { + # print STDERR "Harmless collision for $name: ", $prev->{path}, " vs. ", $path, "\n"; + } + } else { + $map{$name} = { path => $path, hash => $hash }; + } +} +close M; + +### Scan static list (if any) ### + +my @src = (); +if (open S, "../static/photos/$album/x") { + print "Found static list\n"; + while () { + chomp; + my @fields = split /\t/; + if (@fields == 4) { + push @src, { name => $fields[0], rotate => $fields[2], xform => $fields[3] }; + } elsif (@fields == 2) { + push @src, { name => $fields[0], rotate => $fields[1], xform => '.' }; + } else { + die "Error parsing gallery list: $_\n"; + } + } + close S; } -open I, "index.cgi" or die; -open S, "|-", "gal scan" or die; +### Parse index.cgi and produce gallery.new ### + +open I, "$album/index.cgi" or die "Cannot find $album/index.cgi\n"; +open W, ">$album/gallery.new" or die "Cannot create $album/gallery.new\n"; +my %opt = (); +my %found_dirs = (); +my @items = (); while () { - /^img\(/ or next; - /# .*(IMG_.*\.JPG) / or die; - print S "$photos_root/$album/$1\n"; + chomp; + if (/^\s+"(\w+)" => "(.*)",?$/) { + $opt{$1} = $2; + print "Option: $1 = $2\n"; + } elsif (/^img\("([^"]+)\.jpe?g", "([^"]*)"\);\s*# (\S+)/) { + my $nr = $1; + my $title = $2; + my $file = $3; + $file =~ s{^.*/}{}g; + + my $map = $map{$file}; + if (!$map) { + print STDERR "$album: No match for $file\n"; + next; + } + my $path = $map->{path}; + my ($vv, $dd, $ff) = File::Spec->splitpath($path); + $found_dirs{$dd} = 1; + + print "Image: $nr $path [$title]\n"; + my $src; + if (@src) { + if ($nr =~ m{^\d+$} && $nr <= @src) { + $src = $src[$nr-1]; + } else { + print STDERR "$album: Crooked refs ($nr)\n"; + } + } + + print W join("\t", + "$photos_root/$path", + $map->{hash}, + ($src ? $src->{rotate} : '-'), + ($src ? $src->{xform} : '.'), + ($title ne "" ? $title : '-'), + ), "\n"; + } elsif (/^($|#|require|SetOptions|\)|Start|Finish)/) { + # Nothing important + } else { + print STDERR "$album/index.cgi: Parse error at line $.: $_\n"; + } } -close S or die; +close W; close I; + +if (scalar keys %found_dirs != 1) { + print STDERR "$album: Photos in multiple directories\n"; +} + +### Create gallery.cf ### + +open CF, ">$album/gallery.cf" or die "Cannot create $album/gallery.cf"; +print CF <<'AMEN' ; +use strict; +use warnings; +use utf8; + +my $gal = require '../../default.cf'; +$gal->set( +AMEN + +for my $cf (reverse sort keys %opt) { + print CF "\t$cf => \"", $opt{$cf}, "\",\n"; +} + +print CF <<'AMEN' ; +); + +return $gal; +AMEN + +close CF;