use strict; sub dprint {} sub start_plugin { my ($opt) = @_; album::hook($opt,'dir_thumb',\&recursive_dir_thumb); album::add_option(1,"dir_thumb",album::OPTION_STR, usage=>"Picture or directory to use for album directory"); return { author => 'David Hansen', href => 'http://www.sr71.net/', version => '1.0', description => "Picture or directory to use for album directory", }; } sub find_dir_thumb_override { my ($opt, $data, $child_path) = @_; # We are trying to figure out what a particular child directory's # thumbmail should be. We need to go into that directory # to read its .conf file in case it has set a directory thumb. my $conf = "$child_path/$opt->{conf_file}"; $conf =~ s|//|/|g; my $child_dir_thumb_override; if (-r $conf) { album::push_opts($opt); $opt->{q} = 1; # don't want to get the "Read conf:" message early album::read_conf($opt,undef,$conf,0); # This option may either be a directory or a direct image. # If it is a directory, we will recurse below. $child_dir_thumb_override = $opt->{dir_thumb}; album::pop_opts($opt); } return $child_dir_thumb_override; } sub search_dirs_for_thumb { my $opt = shift; my $child = shift; my $child_data = shift; my @child_dirs_to_search_for_thumb = @_; foreach my $search_child ( @child_dirs_to_search_for_thumb ) { my ($a,$url,$full_path,$img) = album::dir_info($opt,$child_data,$search_child); dprint "searching '$search_child' full_path: '$full_path' a:'$a' img:'$img'\n"; if ($img) { $url = "$child/$url"; return ($a,$url,$full_path,$img); } } return undef; } sub recursive_dir_thumb { (my $opt,my $data, my $hook_name, my $child, my $child_data, my @images) = @_; my @ret; my $child_path = $child_data->{paths}{dir}; my $child_dir_thumb_override = find_dir_thumb_override($opt, $data, $child_path); if (defined $child_dir_thumb_override) { if (-d "$child_path/$child_dir_thumb_override") { # The dir_thumb override is for another directory, go there now return search_dirs_for_thumb($opt, $child, $child_data, $child_dir_thumb_override); } } if (defined $child_dir_thumb_override) { my $f = $child_dir_thumb_override; @ret = ($child_path,$child,"$child_path/$f",$f); } else { dprint "searching $child for images\n"; @images = album::populate_child_images($opt, $data, $child, $child_data); if (defined $images[0]) { dprint "found\n"; @ret = ($child_path,$child,"$child_path/$images[0]",$images[0]); } } if (!defined $ret[0] && defined $child_data->{dirs}) { dprint "searching $child dirs (".join(", ",@{$child_data->{dirs}}).")\n"; @ret = search_dirs_for_thumb($opt, $child, $child_data, @{$child_data->{dirs}}); } if (!defined $ret[0]) { dprint "nothing found for '$child'\n"; } return @ret; } 1;;