2 # UCW Gallery: Scan images and generate image list
3 # (c) 2004--2012 Martin Mares <mj@ucw.cz>
13 if (@ARGV && $ARGV[0] eq '--help') {
15 Usage: cat list | gal scan
16 or: gal scan <files and directories>
26 opendir D, $in or die "Cannot scan directory $in: $!\n";
28 while (my $e = readdir D) {
29 my $f = File::Spec->canonpath(File::Spec->catfile($in, $e));
30 if ($f =~ m{\.(jpe?g|png)$}i) {
37 die "$in is neither file nor directory\n";
49 my $gal = UCW::Gallery->load_config;
50 my $orig_prefix = $gal->get('OrigDir');
51 $orig_prefix =~ m{/$} or $orig_prefix .= '/';
53 print "Scanning photos\n";
55 foreach my $f (@files) {
57 if (substr($rel_name, 0, length $orig_prefix) eq $orig_prefix) {
58 $rel_name = substr($rel_name, length $orig_prefix);
60 print "\t$rel_name: ";
62 my $sha = Digest::SHA->new(1);
63 $sha->addfile($f) or die "Cannot hash $f\n";
64 my $id = substr($sha->hexdigest, 0, 16);
67 my $e = new Image::EXIF($f);
68 my $i = $e->get_all_info();
69 if ($e->error) { print "EXIF error: ", $e->error, "\n"; }
71 # print STDERR Dumper($i), "\n";
72 my $o = $i->{'image'}->{'Image Orientation'} || "Top, Left-Hand";
73 if ($o eq "Top, Left-Hand") { $o = "."; }
74 elsif ($o eq "Right-Hand, Top") { $o = "r"; }
75 elsif ($o eq "Left-Hand, Bottom") { $o = "l"; }
76 elsif ($o eq "Bottom, Right-Hand") { $o = "d"; }
78 print "Unrecognized orientation: $o\n";
85 xfrm => $gal->get('ScanDefaultTransform'),
92 my $old = $gal->read_list('gallery.list');
94 print "Updating gallery.list\n";
95 my %old_by_id = map { $_->{id} => $_ } @$old;
98 my $o = $old_by_id{$id};
100 print "\t$id: updated\n";
101 $i->{orientation} = $o->{orientation};
102 $i->{xfrm} = $o->{xfrm};
103 $i->{title} = $o->{title};
105 print "\t$id: new\n";
107 delete $old_by_id{$id};
109 for my $id (keys %old_by_id) {
110 print "\t$id: removed\n";
114 $gal->write_list('gallery.list', \@images);
115 print "Written gallery.list (", (scalar @images), " items)\n";