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 )
                }
        }
 
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to