Author: sparky
Date: Wed Sep 16 00:23:07 2009
New Revision: 10609

Modified:
   toys/rsget.pl/RSGet/Curl.pm
   toys/rsget.pl/rsget.pl
Log:
- add outdir and workdir


Modified: toys/rsget.pl/RSGet/Curl.pm
==============================================================================
--- toys/rsget.pl/RSGet/Curl.pm (original)
+++ toys/rsget.pl/RSGet/Curl.pm Wed Sep 16 00:23:07 2009
@@ -8,6 +8,7 @@
 use WWW::Curl::Multi;
 use URI::Escape;
 use File::Copy;
+use File::Path;
 use Fcntl qw(SEEK_SET);
 
 my $curl_multi = new WWW::Curl::Multi;
@@ -80,12 +81,14 @@
 
                # if file exists try to continue
                my $fn = $get_obj->{_opts}->{fname};
-               if ( $fn and -r $fn ) {
+               my $fp = filepath( $settings{workdir}, 
$get_obj->{_opts}->{dir}, $fn );
+               if ( $fp and -r $fp ) {
                        my $got = (stat(_))[7];
                        #p "File '$fn' already exists, trying to continue at 
$got";
                        $curl->setopt( CURLOPT_RANGE, "$got-" );
 
                        $supercurl->{fname} = $fn;
+                       $supercurl->{filepath} = $fp
                }
 
                my $fs = $get_obj->{_opts}->{fsize};
@@ -127,6 +130,7 @@
 {
        my $supercurl = shift;
        my $curl = $supercurl->{curl};
+       my $get_obj = $supercurl->{get_obj};
        my $time = time;
 
        hadd $supercurl,
@@ -138,7 +142,7 @@
        {
                my $mime = $curl->getinfo( CURLINFO_CONTENT_TYPE );
                if ( $mime =~ m#^text/html# ) {
-                       $supercurl->{get_obj}->{is_html} = 1;
+                       $get_obj->{is_html} = 1;
                        $supercurl->{size_total} = 0;
                        return;
                }
@@ -159,27 +163,29 @@
 
        if ( my $fn = $supercurl->{fname} ) {
                if ( $fname ne $fn ) {
-                       $supercurl->{get_obj}->log( "WARNING: Name mismatch, 
shoud be '$fname'" );
+                       $get_obj->log( "WARNING: Name mismatch, shoud be 
'$fname'" );
                }
                $fname = $supercurl->{fname};
                if ( $supercurl->{head} =~ 
m{^Content-Range:\s*bytes\s*(\d+)-(\d+)(/(\d+))?\s*$}im ) {
                        my ( $start, $stop ) = ( +$1, +$2 );
                        $supercurl->{size_total} = +$4 if $3;
 
-                       $supercurl->{get_obj}->log( "ERROR: Size mismatch: 
$supercurl->{fsize} != $supercurl->{size_total}" )
+                       $get_obj->log( "ERROR: Size mismatch: 
$supercurl->{fsize} != $supercurl->{size_total}" )
                                if $supercurl->{fsize} != 
$supercurl->{size_total};
 
-                       my $old = file_backup( $fn, "copy" );
+                       my $fp = $supercurl->{filepath};
+                       my $old = file_backup( $fp, "copy" );
                        my $old_msg = "";
                        if ( $old ) {
-                               rename $fn, $old;
-                               copy( $old, $fn ) || die "Cannot create backup 
file: $!";
+                               rename $fp, $old;
+                               copy( $old, $fp ) || die "Cannot create backup 
file: $!";
+                               $old =~ s#.*/##;
                                $old_msg = ", backup saved as '$old'";
                        }
 
-                       open my $f_out, '+<', $fn;
+                       open my $f_out, '+<', $fp;
                        seek $f_out, $start, SEEK_SET;
-                       $supercurl->{get_obj}->log( "Continuing at " . bignum( 
$start ) . $old_msg );
+                       $get_obj->log( "Continuing at " . bignum( $start ) . 
$old_msg );
 
                        hadd $supercurl,
                                file => $f_out,
@@ -194,14 +200,16 @@
                $supercurl->{fname} = $fname;
        }
 
-       $supercurl->{get_obj}->set_finfo( $supercurl->{fname}, 
$supercurl->{size_total} );
+       $get_obj->set_finfo( $supercurl->{fname}, $supercurl->{size_total} );
 
        {
-               my $fn = $supercurl->{fname};
+               my $fn = $supercurl->{filepath} =
+                       filepath( $settings{workdir}, $get_obj->{_opts}->{dir}, 
$supercurl->{fname} );
                my $old = file_backup( $fn, "move" );
                if ( $old ) {
-                       $supercurl->{get_obj}->log(  "Old renamed to '$old'" );
                        rename $fn, $old;
+                       $old =~ s#.*/##;
+                       $get_obj->log( "Old renamed to '$old'" );
                }
                open my $f_out, '>', $fn;
                $supercurl->{file} = $f_out;
@@ -234,8 +242,20 @@
        return length $chunk;
 }
 
+sub filepath
+{
+       my $outdir = shift || '.';
+       my $subdir = shift;
+       my $fname = shift;
 
-
+       $outdir .= '/' . $subdir if $subdir;
+       unless ( -d $outdir ) {
+               unless ( mkpath( $outdir ) ) {
+                       $outdir = '.';
+               }
+       }
+       return $outdir . '/' . $fname;
+}
 
 sub finish
 {
@@ -285,6 +305,8 @@
 
        my $func = $get_obj->{after_curl};
        if ( $supercurl->{file} ) {
+               rename $supercurl->{filepath},
+                       filepath( $settings{outdir}, $get_obj->{_opts}->{dir}, 
$supercurl->{fname} );
                $get_obj->{dlinfo} = sprintf 'DONE %s %s / %s',
                        $supercurl->{fname},
                        bignum( $supercurl->{size_got} ),

Modified: toys/rsget.pl/rsget.pl
==============================================================================
--- toys/rsget.pl/rsget.pl      (original)
+++ toys/rsget.pl/rsget.pl      Wed Sep 16 00:23:07 2009
@@ -19,6 +19,8 @@
 use RSGet::Curl;
 use RSGet::FileList;
 use RSGet::Get;
+use RSGet::Wait;
+use RSGet::Captcha;
 use RSGet::Dispatch;
 use RSGet::ListManager;
 $SIG{CHLD} = "IGNORE";
@@ -29,6 +31,8 @@
        logging => 0,
        list_lock => '.${file}.swp', # vim-like swap file
        errorlog => 0,
+       outdir => '.',
+       workdir => '.',
 );
 
 # read options
@@ -110,7 +114,8 @@
        next if $time == $lasttime;
        $lasttime = $time;
 
-       RSGet::Get::wait_update();
+       RSGet::Wait::wait_update();
+       RSGet::Captcha::captcha_update();
 
        my $getlist = RSGet::FileList::readlist();
        if ( $getlist ) {
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to