# $Id: Cached.pm,v 1.3 2005/05/02 21:46:48 andrew Exp $
use strict;
package BT::OBTMetaInfo;
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.3 2005/05/02 21:46:48 andrew Exp $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
sub new
{
my $classname = shift;
return $classname->SUPER::new(@_);
}
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