X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fwebcollage;h=419943674272bd93c7280622d171b9acb1782a37;hb=49f5b54f312fe4ac2e9bc47581a72451bd0e8439;hp=3a8ea8c93b30bf7e666f3d1958eae68a9c6403dc;hpb=0d6b320def9180cf907ceaed56b23a972a11b757;p=xscreensaver diff --git a/hacks/webcollage b/hacks/webcollage index 3a8ea8c9..41994367 100755 --- a/hacks/webcollage +++ b/hacks/webcollage @@ -60,7 +60,7 @@ use bytes; # Larry can take Unicode and shove it up his ass sideways. my $progname = $0; $progname =~ s@.*/@@g; -my $version = q{ $Revision: 1.129 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/; +my $version = q{ $Revision: 1.130 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/; my $copyright = "WebCollage $version, Copyright (c) 1999-2005" . " Jamie Zawinski \n" . " http://www.jwz.org/webcollage/\n"; @@ -209,6 +209,7 @@ my %warningless_sites = ( "images.quizdiva.net" => 1, "driftnet" => 1, # builtin... + "local-directory" => 1, # builtin... ); @@ -290,6 +291,9 @@ my $driftnet_magic = 'driftnet'; my $driftnet_dir = undef; my $default_driftnet_cmd = "driftnet -a -m 100"; +my $local_magic = 'local-directory'; +my $local_dir = undef; + my $wordlist; my %rejected_urls; @@ -486,6 +490,10 @@ sub get_document($$;$) { return get_driftnet_file ($url); } + if (defined($referer) && $referer eq $local_magic) { + return get_local_file ($url); + } + my $orig_url = $url; my $loop_count = 0; my $max_loop_count = 4; @@ -2003,6 +2011,46 @@ sub spawn_driftnet($) { unless (1 == kill (0, $pid)); } +# local-directory +sub pick_from_local_dir { + my ( $timeout ) = @_; + + my $id = $local_magic; + $last_search = $id; + + my $dir = $local_dir; + error ("\$local_dir unset?") unless ($dir); + $dir =~ s@/+$@@; + + error ("$dir unreadable") unless (-d "$dir/."); + + my $v = ($verbose_exec ? "-v" : ""); + my $pick = `xscreensaver-getimage-file $v "$dir"`; + + LOG ($verbose_load, "picked file $pick ($id)"); + return ($id, $pick); +} + + +sub get_local_file { + my ($file) = @_; + + error ("\$local_dir unset?") unless ($local_dir); + + my $id = $local_magic; + my $re = qr/$local_dir/; + error ("$id: $file not in $local_dir?") + unless ($file =~ m@^$re@o); + + local *IN; + open (IN, $file) || error ("$id: $file: $!"); + my $body = ''; + while () { $body .= $_; } + close IN || error ("$id: $file: $!"); + return ($id, $body); +} + + ############################################################################ # @@ -2250,8 +2298,8 @@ sub save_recent_url($$) { my ($site) = m@^http://([^ \t\n\r/:]+)@; return unless defined ($site); - if ($base eq $driftnet_magic) { - $site = $driftnet_magic; + if ($base eq $driftnet_magic || $base eq $local_magic) { + $site = $base; @recent_images = (); } @@ -3321,6 +3369,13 @@ sub main() { } else { $driftnet_cmd = $default_driftnet_cmd; } + } elsif ($_ eq "-directory" || $_ eq "--directory") { + @search_methods = ( 100, "local", \&pick_from_local_dir ); + if (! ($ARGV[0] =~ m/^-/)) { + $local_dir = shift @ARGV; + } else { + error ("local directory path must be set") + } } elsif ($_ eq "-debug" || $_ eq "--debug") { my $which = shift @ARGV; my @rest = @search_methods; @@ -3347,6 +3402,7 @@ sub main() { "\t\t [-filter cmd] [-filter2 cmd] [-background color]\n" . "\t\t [-dictionary dictionary-file] [-http-proxy host[:port]]\n" . "\t\t [-driftnet [driftnet-program-and-args]]\n" . + "\t\t [-directory local-image-directory]\n" . "\n"; exit 1; } @@ -3431,6 +3487,11 @@ sub main() { error ("-size WxH is required with -imagemap"); } + if (defined ($local_dir)) { + $_ = "xscreensaver-getimage-file"; + which ($_) || error "$_ not found on \$PATH."; + } + init_signals(); spawn_driftnet ($driftnet_cmd) if ($driftnet_cmd);