]> git.treefish.org Git - fex.git/blobdiff - bin/fexget
Original release 20160919
[fex.git] / bin / fexget
index c375cea05b269d3ddc4ea08472185e560c11f853..3ac605f51f571676dad713d63bb88a2b7d74751e 100755 (executable)
@@ -13,6 +13,7 @@ use strict qw'vars subs';
 use Config;
 use POSIX;
 use Encode;
 use Config;
 use POSIX;
 use Encode;
+use Cwd 'abs_path';
 use Getopt::Std;
 use File::Basename;
 use Socket;
 use Getopt::Std;
 use File::Basename;
 use Socket;
@@ -30,10 +31,11 @@ our $SH;
 our ($fexhome,$idf,$tmpdir,$windoof,$useragent);
 our ($xv,%autoview);
 our $bs = 2**16; # blocksize for tcp-reading and writing file
 our ($fexhome,$idf,$tmpdir,$windoof,$useragent);
 our ($xv,%autoview);
 our $bs = 2**16; # blocksize for tcp-reading and writing file
-our $version = 20160104;
+our $version = 20160919;
 our $CTYPE = 'ISO-8859-1';
 our $fexsend = $ENV{FEXSEND} || 'fexsend';
 our $DEBUG = $ENV{DEBUG};
 our $CTYPE = 'ISO-8859-1';
 our $fexsend = $ENV{FEXSEND} || 'fexsend';
 our $DEBUG = $ENV{DEBUG};
+our $_0 = $0;
 
 my %SSL = (SSL_version => 'TLSv1');
 my $sigpipe;
 
 my %SSL = (SSL_version => 'TLSv1');
 my $sigpipe;
@@ -88,6 +90,7 @@ usage: $0 [-v] [-m limit] [-s filename] [-o] [-k] [-X] [-P proxy:port] F*EX-URL(
    or: $0 [-v] -a
    or: $0 -l [-i tag]
    or: $0 -H
    or: $0 [-v] -a
    or: $0 -l [-i tag]
    or: $0 -H
+   or: $0 -V
 options: -v verbose mode
          -m limit kB/s
          -s save to filename (-s- means: write to STDOUT/pipe)
 options: -v verbose mode
          -m limit kB/s
          -s save to filename (-s- means: write to STDOUT/pipe)
@@ -101,6 +104,7 @@ options: -v verbose mode
          -i tag alternate server/account, see: $fexsend -h
          -P use Proxy for connection to the F*EX server
          -H show hints and examples
          -i tag alternate server/account, see: $fexsend -h
          -P use Proxy for connection to the F*EX server
          -H show hints and examples
+         -V show version and ask for upgrade
 argument: F*EX-URL may be file number (see: $0 -l)
 EOD
 
 argument: F*EX-URL may be file number (see: $0 -l)
 EOD
 
@@ -150,7 +154,7 @@ $opt_V = $opt_X = $opt_f = $opt_L = $opt_H = 0;
 ${'opt_+'} = 0;
 $opt_s = $opt_k = $opt_i = $opt_P = '';
 $_ = "$fexhome/config.pl"; require if -f;
 ${'opt_+'} = 0;
 $opt_s = $opt_k = $opt_i = $opt_P = '';
 $_ = "$fexhome/config.pl"; require if -f;
-getopts('hvVHlLdkzoaXf+m:s:i:K:P:') or die $usage;
+getopts('hvVHlLdkzoaXVf+m:s:i:K:P:') or die $usage;
 $opt_k = '?KEEP' if $opt_k;
 
 if ($opt_m =~ /(\d+)/) {
 $opt_k = '?KEEP' if $opt_k;
 
 if ($opt_m =~ /(\d+)/) {
@@ -159,7 +163,33 @@ if ($opt_m =~ /(\d+)/) {
   $opt_m = 0
 }
 
   $opt_m = 0
 }
 
-print "Version: $version\n" if $opt_V;
+if ($opt_V) {
+  print "Version: $version\n";
+  unless (@ARGV) {
+    print "Upgrade fexget? ";
+    $_ = <STDIN>||'';
+    if (/^y/i) {
+      my $new = `wget -nv -O- http://fex.belwue.de/download/fexget`;
+      my $newversion = $1 if $new =~ /version = (\d+)/;
+      if ($new !~ /upgrade fexget/ or not $newversion) {
+        die "$0: bad update\n";
+      }
+      if ($newversion <= $version) {
+        die "$0: no newer version\n";
+      }
+      $_0 = abs_path($_0);
+      system qw'rsync -a',$_0,$_0.'_old';
+      exit $? if $?;
+      open $_0,'>',$_0 or die "$0: cannot write $_0. - $!\n";
+      print {$_0} $new;
+      close $_0;
+      exec $_0,qw'-V .';
+    }
+  }
+  exit;
+  exit if "@ARGV" eq '.';
+}
+
 die $usage                  if $opt_h;
 if ($opt_H) {
   print $hints;
 die $usage                  if $opt_h;
 if ($opt_H) {
   print $hints;
@@ -172,15 +202,14 @@ my $ffl = "$tmpdir/fexget";               # F*EX files list (cache)
 
 my @rcamel = (
 '\e[A
 
 my @rcamel = (
 '\e[A
-(_*)  _  _
-   \\\\/ \\/ \\
+ (_*p _  _
+   \\\\/ \/ \\
     \  __  )=*
     //\\\\//\\\\
 ',
     \  __  )=*
     //\\\\//\\\\
 ',
-'\e[A     \\\\/\\\\/
-',
-'\e[A    //\\\\//\\\\
-');
+"\e[A     \\\\/\\\\/ \n",
+"\e[A    //\\\\//\\\\\n"
+);
 
 # get fexlog
 if ($opt_z) {
 
 # get fexlog
 if ($opt_z) {
@@ -308,7 +337,7 @@ URL: foreach my $url (@ARGV) {
       ($file) = grep { $_ = $1 if /^X-File:\s+(.+)/ } @r;
       $file = $url unless $file;
       $file =~ s:.*/::;
       ($file) = grep { $_ = $1 if /^X-File:\s+(.+)/ } @r;
       $file = $url unless $file;
       $file =~ s:.*/::;
-      printf "%s deleted\n",urldecode($file);
+      printf "%s deleted\n",locale(decode_utf8(urldecode($file)));
     } else {
       s:HTTP/[\d\. ]+::;
       die "$0: server response: $_";
     } else {
       s:HTTP/[\d\. ]+::;
       die "$0: server response: $_";
@@ -566,7 +595,7 @@ sub keep {
 
 sub download {
   my ($server,$port,$fop,$nocheck) = @_;
 
 sub download {
   my ($server,$port,$fop,$nocheck) = @_;
-  my ($file,$download,$ssl,$pipe,$filesize,$checkstorage);
+  my ($file,$download,$ssl,$pipe,$filesize,$checkstorage,$dkey);
   my (@hh,@r);
   my ($t0,$t1,$t2,$tt,$tm,$ts,$kBs,$b,$bt,$tb,$B,$buf);
   my $length = 0;
   my (@hh,@r);
   my ($t0,$t1,$t2,$tt,$tm,$ts,$kBs,$b,$bt,$tb,$B,$buf);
   my $length = 0;
@@ -619,8 +648,11 @@ sub download {
     $seek = -s $download || 0;
   }
 
     $seek = -s $download || 0;
   }
 
+  $fop =~ m:/fop/(\w+)/: and $dkey=$1 or $dkey='';
+
   push @hh,"GET $proxy_prefix$fop$opt_k HTTP/1.1",
            "User-Agent: $useragent",
   push @hh,"GET $proxy_prefix$fop$opt_k HTTP/1.1",
            "User-Agent: $useragent",
+           "Cookie: dkey=$dkey",
            "Connection: close";
   push @hh,"Range: bytes=$seek-" if $seek;
 
            "Connection: close";
   push @hh,"Range: bytes=$seek-" if $seek;