[BACK]Return to CurrentTorrents.pl CVS log [TXT][DIR] Up to [local] / openbsd / OpenBSDTorrents

Diff for /openbsd/OpenBSDTorrents/CurrentTorrents.pl between version 1.12 and 1.13

version 1.12, 2005/05/02 21:27:00 version 1.13, 2005/05/02 22:43:53
Line 4 
Line 4 
 use warnings;  use warnings;
 use diagnostics;  use diagnostics;
   
 use BT::MetaInfo;  
 use Time::Local;  use Time::Local;
   
 use lib 'lib';  use lib 'lib';
 use OpenBSDTorrents;  use OpenBSDTorrents;
   use BT::OBTMetaInfo;
   
 %ENV = ();  %ENV = ();
   
 #use YAML;  use YAML;
   
 justme();  justme();
   
Line 24 
Line 24 
 }  }
   
 my %files;  my %files;
 opendir DIR, $OBT->{DIR_TORRENT}  foreach my $DIR ($OBT->{DIR_NEW_TORRENT}, $OBT->{DIR_TORRENT}) {
         or die "Couldn't opendir $OBT->{DIR_TORRENT}: $!";          opendir DIR, $DIR
 foreach (readdir DIR) {                  or die "Couldn't opendir $DIR: $!";
         if (/^([^\/]+)$/) {          foreach (readdir DIR) {
                 $_ = $1;                  next unless my ($ext) = /\.(torrent|$OBT->{META_EXT})$/;
         } else {  
                 die "Invalid character in $_: $!";  
         }  
         next unless /\.torrent$/;  
         my ($name, $year, $mon, $mday, $hour, $min) =  
            /^(.*)-(\d{4})-(\d{2})-(\d{2})-(\d{2})(\d{2})/;  
   
         $mon--;                  if (/^([^\/]+)$/) {
         my $epoch = timegm(0,$min,$hour,$mday,$mon,$year);                          $_ = $1;
                   } else {
                           die "Invalid character in $_: $!";
                   }
                   my ($name, $year, $mon, $mday, $hour, $min) =
                      /^(.*)-(\d{4})-(\d{2})-(\d{2})-(\d{2})(\d{2})/;
   
         #print "Adding $_\n";                  $mon--;
                   my $epoch = timegm(0,$min,$hour,$mday,$mon,$year);
   
         $files{$name}{$epoch} = {                  #print "Adding $_\n";
                 file      => $_,  
                 year      => $year,  
                 mon       => $mon,  
                 mday      => $mday,  
                 hour      => $hour,  
                 min       => $min,  
                 epoch     => $epoch,  
         };  
   
                   $files{$ext}{$name}{$epoch} = {
                           file      => $_,
                           dir       => $DIR,
                           path      => "$DIR/$_",
                           ext       => $ext,
                           year      => $year,
                           mon       => $mon,
                           mday      => $mday,
                           hour      => $hour,
                           min       => $min,
                           name      => $name,
                           epoch     => $epoch,
                   };
   
           }
           closedir DIR;
 }  }
 closedir DIR;  
   
 my %keep;  my %keep;
 my @delete;  my @delete;
 foreach my $name (keys %files) {  foreach my $name (keys %{ $files{torrent} }) {
         next unless $name =~ /^$Name_Filter/;          next unless $name =~ /^$Name_Filter/;
         print "Checking $name\n";          print "Checking $name\n";
   
         foreach my $epoch ( sort { $b <=> $a } keys %{ $files{$name} } ) {          foreach my $epoch ( sort { $b <=> $a } keys %{ $files{torrent}{$name} } ) {
                 #print "\t$epoch\n";                  #print "\t$epoch\n";
                 my $torrent = $files{$name}{$epoch}{file};                  my $torrent = $files{torrent}{$name}{$epoch}{path};
   
                 my $t;                  my $t;
                 eval { $t = BT::MetaInfo->new($OBT->{DIR_TORRENT} . "/$torrent"); };                  eval { $t = BT::OBTMetaInfo->new( $torrent ); };
   
                 if ($@) {                  if ($@) {
                         warn "Error reading torrent $torrent\n";                          warn "Error reading torrent $torrent\n";
                         next;                          next;
                 }                  }
   
                 $files{$name}{$epoch}{comment}   = $t->{comment};                  $files{torrent}{$name}{$epoch}{comment}   = $t->{comment};
                 my ($path) = $t->{comment} =~ /Files from ([^\n]+)\n/s;                  my ($path) = $t->{comment} =~ /Files from ([^\n]+)\n/s;
   
                 unless (-d $OBT->{DIR_FTP} . "/$path") {                  unless (-d $OBT->{DIR_FTP} . "/$path") {
                         #print "Deleting $files{$name}{$epoch}{file} the path doesn't exist.\n";                          #print "Deleting $files{torrent}{$name}{$epoch}{file} the path doesn't exist.\n";
                         push @delete, $files{$name}{$epoch}{file};                          push @delete, $files{torrent}{$name}{$epoch};
                           delete $files{torrent}{$name}{$epoch};
                           next;
                 }                  }
   
                 if (keys %{ $files{$name} } == 1) {                  if (
                           keys %{ $files{torrent}{$name} } == 1 &&
                           $files{torrent}{$name}{$epoch}{dir}
                                   eq $OBT->{DIR_TORRENT}
                   ) {
                         #print "Skipping torrent for $name there is only one.\n";                          #print "Skipping torrent for $name there is only one.\n";
                         next;                          next;
                 }                  }
   
                 my $hash = $t->info_hash;                  my $hash = $t->info_hash_cached($torrent);
                 $hash = unpack("H*", $hash);                  $hash = unpack("H*", $hash);
   
                 $files{$name}{$epoch}{info_hash} = $hash;                  $files{torrent}{$name}{$epoch}{info_hash} = $hash;
   
                 undef $t;                  undef $t;
   
                 if (exists $keep{$name}) {                  if (exists $keep{$name}) {
                         if (exists $keep{$name}{$hash}) {                          if (exists $keep{$name}{$hash}) {
                                 push @delete, $keep{$name}{$hash};                                  push @delete, $keep{$name}{$hash};
                                   delete $files{torrent}{
                                           $keep{$name}{$hash}{name}
                                   }{
                                           $keep{$name}{$hash}{epoch}
                                   };
                                 $keep{$name}{$hash} =                                  $keep{$name}{$hash} =
                                         $files{$name}{$epoch}{file};                                          $files{torrent}{$name}{$epoch};
                         } else {                          } else {
                                 push @delete, $files{$name}{$epoch}{file};                                  push @delete, $files{torrent}{$name}{$epoch};
                                   delete $files{torrent}{$name}{$epoch};
                         }                          }
                 } else {                  } else {
                         $keep{$name}{$hash} =                          $keep{$name}{$hash} =
                                 $files{$name}{$epoch}{file};                                  $files{torrent}{$name}{$epoch};
   
                 }                  }
         }          }
Line 110 
Line 130 
 #print Dump \%files, \%keep, \@delete;  #print Dump \%files, \%keep, \@delete;
   
 foreach (@delete) {  foreach (@delete) {
         print "Deleting '$_'\n";          print "Deleting '$_->{path}'\n";
         unlink $OBT->{DIR_TORRENT} . "/$_" or die "Couldn't unlink $_";          unlink $_->{path} or die "Couldn't unlink $_->{path}";
   }
   
   foreach my $name (keys %{ $files{$OBT->{META_EXT} } }) {
           foreach my $epoch (keys %{ $files{ $OBT->{META_EXT} }{$name} }) {
                   unless ( exists $files{torrent}{$name}{$epoch} ) {
                           my $path = $files{$OBT->{META_EXT}}{$name}{$epoch}{path};
                           print "Unlinking '$path'\n";
                           unlink $path or die "couldn't unlink '$path': $!";
                   }
           }
   }
   
   
   #print Dump \%keep;
   foreach my $name (keys %keep) {
           foreach my $hash (keys %{ $keep{$name} }) {
                   my $file = $keep{$name}{$hash}{file};
                   my $dir  = $keep{$name}{$hash}{dir };
                   if ($dir eq $OBT->{DIR_NEW_TORRENT}) {
                           print "Moving $file to current torrents\n";
                           rename("$dir/$file", $OBT->{DIR_TORRENT} . "/" . $file)
                                   or die "Couldn't rename '$file': $!";
   
                           my $name = $keep{$name}{$hash}{name};
                           my $epoch = $keep{$name}{$hash}{epoch};
   
                           if (exists $files{txt}{$name}{$epoch}) {
                                   my $m_file = $files{txt}{$name}{$epoch}{file};
                                   my $m_dir  = $files{txt}{$name}{$epoch}{dir };
                                   rename(
                                           "$m_dir/$m_file",
                                           $OBT->{DIR_TORRENT} . "/" . $m_file
                                   ) or die "Couldn't rename '$m_file': $!";
                           }
                   }
           }
 }  }

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.13

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>