=================================================================== RCS file: /cvs/openbsd/OpenBSDTorrents/lib/BT/MetaInfo/Cached.pm,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- openbsd/OpenBSDTorrents/lib/BT/MetaInfo/Cached.pm 2005/05/02 20:43:44 1.2 +++ openbsd/OpenBSDTorrents/lib/BT/MetaInfo/Cached.pm 2005/05/02 22:46:48 1.3 @@ -1,4 +1,4 @@ -# $Id: Cached.pm,v 1.2 2005/05/02 19:43:44 andrew Exp $ +# $Id: Cached.pm,v 1.3 2005/05/02 21:46:48 andrew Exp $ use strict; package BT::OBTMetaInfo; @@ -6,22 +6,65 @@ require 5.6.0; use vars qw( $VERSION @ISA ); +use Digest::SHA1 qw(sha1); +use Fcntl ':flock'; # import LOCK_* constants + use BT::MetaInfo; +use base 'BT::MetaInfo'; +use OpenBSDTorrents; + use Data::Dumper; -$VERSION = do { my @r = (q$Id: Cached.pm,v 1.2 2005/05/02 19:43:44 andrew Exp $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; +$VERSION = do { my @r = (q$Id: Cached.pm,v 1.3 2005/05/02 21:46:48 andrew Exp $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; sub new { my $classname = shift; - print Dumper $classname; - exit; - -# my $self = $classname->SUPER::new(@_); + return $classname->SUPER::new(@_); } -sub info_hash { return(sha1(bencode($_[0]->info))); } +sub info_hash_cached +{ + my $self = shift; + my $torrent = shift; + + return $self->SUPER::info_hash unless $torrent; + + my $meta_file = $torrent; + $meta_file =~ s/\.torrent$/.$OBT->{META_EXT}/; + + my $hash = undef; + + if (-e $meta_file) { + #print "Reading meta file: $meta_file\n"; + open my $meta, $meta_file or die "Couldn't open $meta_file: $!"; + flock($meta, LOCK_SH); + binmode $meta; + + $hash = do { local $/; <$meta> }; + + flock($meta, LOCK_UN); + close $meta; + } else { + $hash = $self->SUPER::info_hash; + #print "Writing meta file: $meta_file\n"; + open my $meta, '>', $meta_file + or die "Couldn't open $meta_file: $!"; + flock($meta, LOCK_EX); + binmode $meta; + + print $meta $hash; + + flock($meta, LOCK_UN); + close $meta; + + } + #my $text_hash = unpack("H*", $hash); + #print "INFO_HASH: $text_hash\n"; + + return $hash; +} 1