[BACK]Return to Cached.pm CVS log [TXT][DIR] Up to [local] / openbsd / OpenBSDTorrents / lib / BT / MetaInfo

File: [local] / openbsd / OpenBSDTorrents / lib / BT / MetaInfo / Cached.pm (download)

Revision 1.3, Mon May 2 21:46:48 2005 UTC (19 years, 2 months ago) by andrew
Branch: MAIN
Changes since 1.2: +50 -7 lines

Seems to work, I dunno if I need anything else, but we shall see

# $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