=================================================================== RCS file: /cvs/openbsd/OpenBSDTorrents/CurrentTorrents.pl,v retrieving revision 1.2 retrieving revision 1.11 diff -u -r1.2 -r1.11 --- openbsd/OpenBSDTorrents/CurrentTorrents.pl 2005/03/23 01:31:41 1.2 +++ openbsd/OpenBSDTorrents/CurrentTorrents.pl 2005/04/07 00:04:40 1.11 @@ -1,5 +1,5 @@ #!/usr/bin/perl -T -#$Id: CurrentTorrents.pl,v 1.2 2005/03/23 01:31:41 andrew Exp $ +#$Id: CurrentTorrents.pl,v 1.11 2005/04/06 23:04:40 andrew Exp $ use strict; use warnings; use diagnostics; @@ -14,8 +14,11 @@ #use YAML; +justme(); + my %files; -opendir DIR, $TorrentDir or die "Couldn't opendir $TorrentDir: $!"; +opendir DIR, $OBT->{DIR_TORRENT} + or die "Couldn't opendir $OBT->{DIR_TORRENT}: $!"; foreach (readdir DIR) { if (/^([^\/]+)$/) { $_ = $1; @@ -26,45 +29,71 @@ my ($name, $year, $mon, $mday, $hour, $min) = /^(.*)-(\d{4})-(\d{2})-(\d{2})-(\d{2})(\d{2})/; + $mon--; my $epoch = timegm(0,$min,$hour,$mday,$mon,$year); - my $t = BT::MetaInfo->new("$TorrentDir/$_"); - my $hash = $t->info_hash; - $hash = unpack("H*", $hash); + #print "Adding $_\n"; $files{$name}{$epoch} = { file => $_, - comment => $t->{comment}, year => $year, mon => $mon, mday => $mday, hour => $hour, min => $min, epoch => $epoch, - info_hash => $hash, }; } closedir DIR; - my %keep; my @delete; foreach my $name (keys %files) { - foreach my $time ( sort { $b <=> $a } keys %{ $files{$name} } ) { - #print "$name - $time\n"; - my $hash = $files{$name}{$time}{info_hash}; + #print "$name\n"; + + foreach my $epoch ( sort { $b <=> $a } keys %{ $files{$name} } ) { + #print "\t$epoch\n"; + my $torrent = $files{$name}{$epoch}{file}; + + my $t; + eval { $t = BT::MetaInfo->new($OBT->{DIR_TORRENT} . "/$torrent"); }; + if ($@) { + warn "Error reading torrent $torrent\n"; + next; + } + + $files{$name}{$epoch}{comment} = $t->{comment}; + my ($path) = $t->{comment} =~ /Files from ([^\n]+)\n/s; + + unless (-d $OBT->{DIR_FTP} . "/$path") { + #print "Deleting $files{$name}{$epoch}{file} the path doesn't exist.\n"; + push @delete, $files{$name}{$epoch}{file}; + } + + if (keys %{ $files{$name} } == 1) { + #print "Skipping torrent for $name there is only one.\n"; + next; + } + + my $hash = $t->info_hash; + $hash = unpack("H*", $hash); + + $files{$name}{$epoch}{info_hash} = $hash; + + undef $t; + if (exists $keep{$name}) { if (exists $keep{$name}{$hash}) { push @delete, $keep{$name}{$hash}; $keep{$name}{$hash} = - $files{$name}{$time}{file}; + $files{$name}{$epoch}{file}; } else { - push @delete, $files{$name}{$time}{file}; + push @delete, $files{$name}{$epoch}{file}; } } else { $keep{$name}{$hash} = - $files{$name}{$time}{file}; + $files{$name}{$epoch}{file}; } } @@ -73,5 +102,6 @@ #print Dump \%files, \%keep, \@delete; foreach (@delete) { - unlink "$TorrentDir/$_" or die "Couldn't unlink $_"; + print "Deleting '$_'\n"; + unlink $OBT->{DIR_TORRENT} . "/$_" or die "Couldn't unlink $_"; }