use threads;
use Thread::Queue;
-my $threads = 16;
+my $threads = 40;
my $running_threads :shared = 0;
my $queue :shared = Thread::Queue->new;
+my @succeeded :shared = ();
+my @failed :shared = ();
# Enqueue all the images.
my $url = shift @ARGV;
# Fetch username and password, and check that they actually work.
my ($user, $pass) = get_credentials();
my $dav = init_dav($url, $user, $pass);
-my $r = $dav->propfind(-url => $url, -depth => 0);
-if ($r == 0) {
- die "Couldn't open $url: " . $dav->message . "\n";
-}
# Fire up the worker threads, and wait for them to finish.
my @threads = ();
$thread->join();
}
+if (scalar @failed != 0 && scalar @succeeded != 0) {
+ # Output failed files in an easily-pastable format.
+ print "\nFailed files: ", join(' ', @failed), "\n";
+}
+
sub upload_thread {
$running_threads++;
my $dav = init_dav($url, $user, $pass);
while (my $filename = $queue->dequeue_nb) {
- $dav->put(-local => $filename, -url => $url)
- or warn "Couldn't upload $filename: " . $dav->message . "\n";
+ if ($dav->put(-local => $filename, -url => $url)) {
+ push @succeeded, $filename;
+ } else {
+ push @failed, $filename;
+ warn "Couldn't upload $filename: " . $dav->message . "\n";
+ }
}
$running_threads--;
my $ua = HTTP::DAV::UserAgent->new();
$ua->agent('pr0n-uploader/v1.0 (perldav)');
my $dav = HTTP::DAV->new(-useragent=>$ua);
- $dav->credentials(-user=>$user, -pass=>$pass, -url=>$url);
+ $dav->credentials(-user=>$user, -pass=>$pass, -url=>$url, -realm=>'pr0n.sesse.net');
$dav->open(-url => $url)
or die "Couldn't open $url: " . $dav->message . "\n";
return $dav;