SVN: toys/fun/rsget.pl

sparky sparky at pld-linux.org
Fri Jan 9 00:14:23 CET 2009


Author: sparky
Date: Fri Jan  9 00:14:22 2009
New Revision: 10059

Modified:
   toys/fun/rsget.pl
Log:
- limit number of retries caused by unknown problems (e.g. page defign changes)
- fix NL to also work with the alternative page design


Modified: toys/fun/rsget.pl
==============================================================================
--- toys/fun/rsget.pl	(original)
+++ toys/fun/rsget.pl	Fri Jan  9 00:14:22 2009
@@ -227,7 +227,7 @@
 	if ( $err ) {
 		my $error = $curl->errbuf;
 		$obj->print( "error: $err" );
-		$obj->stage1();
+		$obj->problem();
 		return undef;
 	}
 
@@ -383,7 +383,7 @@
 		@_,
 		url => $url,
 		id => $id,
-		try => 10,
+		try => 0,
 		line => $line,
 		net => $net,
 		netname => "[$net] $fn: ",
@@ -464,6 +464,25 @@
 	$self->finish( $msg );
 }
 
+sub start
+{
+	my $self = shift;
+	return $self->stage1();
+}
+
+sub problem
+{
+	my $self = shift;
+	my $var = shift;
+	my $msg = "";
+	$msg = " (undefined var: $var)" if $var;
+	if ( ++$self->{try} < 8 ) {
+		return $self->wait( 2 ** $self->{try}, \&start, "unknown problem$msg, waiting" );
+	} else {
+		return $self->error( "unknown problem$msg, aborting" );
+	}
+}
+
 # }}}
 package Get::RapidShare; # {{{
 
@@ -504,14 +523,8 @@
 		return $self->wait( $1 * 60, \&stage1, "servers overloaded, waiting" );
 	} elsif ( $body =~ /form id="ff" action="(.*?)"/m ) {
 		$link = $1;
-		$self->{s2problems} = 0;
 	} else {
-		if ( $self->{s2problems} ) {
-			return $self->error( "unknown problem" );
-		} else {
-			$self->{s2problems} = 1;
-			return $self->wait( 5 * 60, \&stage1, "unknown problems, retrying in" );
-		}
+		return $self->problem( "link" );
 	}
 
 	$self->curl( $link, \&stage3, post => 'dl.start=Free' );
@@ -532,7 +545,7 @@
 		return $self->wait( $m * 60 + 10, \&stage1, "free limit reached, waiting" );
 	}
 	unless ( $body =~ /var c=([0-9]+);/m ) {
-		return $self->stage1();
+		return $self->problem( "var c=" );
 	}
 	my $wait = $1;
 
@@ -591,12 +604,15 @@
 	if ( $body =~ /Sorry, we don't host the requested file/ ) {
 		return $self->error( "file not found" );
 	}
-	my ($link) = ($body =~ /"(.*?captcha=1)"/);
+	if ( $body =~ /We will prepare your download/ ) {
+		return $self->wait( 60, \&stage1 );
+	}
+	my ($link) = ($body =~ /href="(.*?captcha=1)"/);
 	unless ( defined $link ) {
 		if ($body =~ /MAINTENANCE/ ) {
 			return $self->wait( 10 * 60, \&stage1, "server maintenence, will try in" );
 		}
-		return $self->stage1();
+		return $self->problem( "link" );
 	}
 	$link =~ s/&amp;/&/g;
 
@@ -625,7 +641,7 @@
 		if ( $body =~ m/$search/ ) {
 			$self->{$name} = $1;
 		} else {
-			return $self->stage1()
+			return $self->problem( $name )
 		}
 	}
 
@@ -672,24 +688,13 @@
 		return $self->wait( $1 / 100, \&stage1, "free limit reached, waiting" );
 	}
 	unless ( $body =~ /please wait .*countdown\(([0-9]+),/ ) {
-		if ( $self->{s6problems} ) {
-			return $self->error( "unknown problem" );
-		} else {
-			$self->{s6problems} = 1;
-			return $self->wait( 5 * 60, \&stage1, "unknown problem, retrying in" );
-		}
+		return $self->problem( "countdown" );
 	}
 	my $wait = $1 / 100 + 1;
 	unless ( $body =~ m#<a class="Orange_Link" href="(.*?)"#) {
-		if ( $self->{s6problems} ) {
-			return $self->error( "unknown problem" );
-		} else {
-			$self->{s6problems} = 1;
-			return $self->wait( 5 * 60, \&stage1, "unknown problem, retrying in" );
-		}
+		return $self->problem( "Orange_Link" );
 	}
 	$self->{file_url} = $1;
-	$self->{s6problems} = 0;
 
 	$self->wait( $wait, \&stage7, "starting in" );
 }
@@ -978,7 +983,7 @@
 		if ( $body =~ m/$search/ ) {
 			$self->{$name} = $1;
 		} else {
-			return $self->stage1()
+			return $self->problem( $name )
 		}
 	}
 
@@ -1020,7 +1025,7 @@
 		if ( $body =~ m/$search/ ) {
 			$self->{$name} = $1;
 		} else {
-			return $self->stage1()
+			return $self->problem( $name )
 		}
 	}
 


More information about the pld-cvs-commit mailing list