Author: sparky
Date: Mon Dec  6 20:19:10 2010
New Revision: 11967

Modified:
   toys/rsget.pl/RSGet/Curl.pm
   toys/rsget.pl/RSGet/Dispatch.pm
   toys/rsget.pl/RSGet/Get.pm
Log:
- implemented soft restart - SIGUSR2 will make rsget.pl restart after
  finishing all current downloads


Modified: toys/rsget.pl/RSGet/Curl.pm
==============================================================================
--- toys/rsget.pl/RSGet/Curl.pm (original)
+++ toys/rsget.pl/RSGet/Curl.pm Mon Dec  6 20:19:10 2010
@@ -392,7 +392,7 @@
                                size_got => $start,
                                time_stamp => [ $time, $start, $time, $start, 
$time, $start ];
 
-                       RSGet::FileList::update(); # to update statistics
+                       $get_obj->started_download( fname => 
$supercurl->{fname}, fsize => $supercurl->{size_total} );
                        return;
                }
        } else {

Modified: toys/rsget.pl/RSGet/Dispatch.pm
==============================================================================
--- toys/rsget.pl/RSGet/Dispatch.pm     (original)
+++ toys/rsget.pl/RSGet/Dispatch.pm     Mon Dec  6 20:19:10 2010
@@ -29,6 +29,8 @@
 our %downloading;
 our %checking;
 
+my $soft_restart = 0;
+
 my %working = (
        get => \%downloading,
        check => \%checking,
@@ -248,12 +250,26 @@
        }
 
        abort_missing( \%all_uris, \%downloading );
+
+       my $downloading_num = scalar grep { $_->{started_download} } values 
%downloading;
        RSGet::Line::status(
                'to download' => $to_dl,
-               'downloading' => scalar keys %downloading,
+               'running' => scalar keys %downloading,
+               'downloading' => $downloading_num,
                'checking URIs' => scalar keys %checking,
        );
 
+       if ( $soft_restart ) {
+               foreach my $obj ( values %downloading ) {
+                       unless ( $obj->{started_download} ) {
+                               $obj->{_abort} = "Soft restart";
+                       }
+               }
+               RSGet::Main::restart()
+                       unless $downloading_num;
+               return 1;
+       }
+
        my $all_checked = 1;
        EACH_LINE: foreach my $line ( @$getlist ) {
                next unless ref $line;
@@ -291,6 +307,15 @@
        return $all_checked;
 }
 
+sub soft_restart
+{
+       $soft_restart = 1;
+       new RSGet::Line( "NOTICE: ", "rsget.pl will restart after finishing all 
current downloads" );
+       RSGet::FileList::update();
+}
+
+$SIG{USR2} = \&soft_restart;
+
 sub abort_missing
 {
        my $all = shift;

Modified: toys/rsget.pl/RSGet/Get.pm
==============================================================================
--- toys/rsget.pl/RSGet/Get.pm  (original)
+++ toys/rsget.pl/RSGet/Get.pm  Mon Dec  6 20:19:10 2010
@@ -77,6 +77,8 @@
        bless $self, $getter->{pkg};
        $self->bestinfo();
 
+       RSGet::FileList::update();
+
        if ( verbose( 2 ) or $cmd eq "get" ) {
                my $outifstr = $outif ? "[$outif]" :  "";
 
@@ -474,6 +476,8 @@
        my @osize;
        @osize = ( fsize => $fsize ) if $fsize > 0;
 
+       $self->{started_download} = 1;
+
        RSGet::FileList::save( $self->{_uri},
                globals => { fname => $fname, fsize => $fsize },
                options => { fname => $fname, @osize } );
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to