4 # Small multithreaded pr0n uploader, based partially on dave from HTTP::DAV.
7 # pr0n-upload.pl http://pr0n.sesse.net/webdav/upload/random/ *.JPG
9 # Adjust $threads to your own liking.
19 my $running_threads :shared = 0;
20 my $queue :shared = Thread::Queue->new;
22 # Enqueue all the images.
23 my $url = shift @ARGV;
24 $queue->enqueue(@ARGV);
26 # Fetch username and password, and check that they actually work.
27 my ($user, $pass) = get_credentials();
28 my $dav = init_dav($url, $user, $pass);
29 my $r = $dav->propfind(-url => $url, -depth => 0);
31 die "Couldn't open $url: " . $dav->message . "\n";
34 # Fire up the worker threads, and wait for them to finish.
36 for my $i (1..$threads) {
37 push @threads, threads->create(\&upload_thread);
39 while ($running_threads > 0) {
40 printf "%d threads running, %d images queued\n", $running_threads, $queue->pending;
43 for my $thread (@threads) {
50 my $dav = init_dav($url, $user, $pass);
51 while (my $filename = $queue->dequeue_nb) {
52 $dav->put(-local => $filename, -url => $url)
53 or warn "Couldn't upload $filename: " . $dav->message . "\n";
60 my ($url, $user, $pass) = @_;
61 my $ua = HTTP::DAV::UserAgent->new();
62 $ua->agent('pr0n-uploader/v1.0 (perldav)');
63 my $dav = HTTP::DAV->new(-useragent=>$ua);
64 $dav->credentials(-user=>$user, -pass=>$pass, -url=>$url);
65 $dav->open(-url => $url)
66 or die "Couldn't open $url: " . $dav->message . "\n";
71 print "\nEnter username for $url: ";
72 chomp (my $user = <STDIN>);
73 exit if (!defined($user));
76 chomp (my $pass = <STDIN>);
80 return ($user, $pass);