# $Id: RedTube 10867 2009-10-26 22:47:10Z sparky $
# Video::RedTube - Video getter plugin for rsget.pl
#
# 2009 (c) Przemysław Iskra <sparky@pld-linux.org>
#		This program is free software,
# you may distribute it under GPL v2 or newer.

name: RedTube
short: V:RedTube
uri: qr{redtube\.com/}
slots: max
status: OK 2009-10-05

start:
	GET( $-{_uri} );

	! m{<h1 class="videoTitle">(.*?)</h1>};
	my $fname = de_ml( $1 );
	$fname =~ s{/}{_}g;
	$fname .= ".flv";

	! m{so\.addParam\("flashvars","(.*?)"};
	my %o = map /^(.*?)=(.*)$/, split /\&(?:amp;)?/, $1;

	INFO( name => $fname, quality => "$o{width}x$o{height}" );

	my $file_uri = "http://dl.redtube.com/467f9bca32b1989277b48582944f325afa3374/"
		. id_to_file( $o{id} ) . $o{hash_flv};

	DOWNLOAD( $file_uri, fname => $fname );

perl:

	# simplified version of what may be found in clive
sub id_to_file
{
	my $id = shift;
	my @id = split //, sprintf '%08d', $id;

	my $hash = 0;
	$hash += $id[ $_ ] * $_ foreach (1..7);

	my $add = 0;
	$add += $_ foreach split //, "$hash";

	my @map = unpack( 'C*', 'R15342O7K9HBCDXFGAIJ8LMZ6PQ0STUVWEYN' );
	my @add = (3, 0, 2, 1, 6, 5, 0, 7, 4);
	my @d_at = (4, 0, 1, 3, 6, 2, 0, 5, 7);
	my @chars = map { $map[ $id[ $d_at[ $_ ] ] + $add + $add[ $_ ] ] } (0..8);
	$chars[ 1 ] = 48 + $add % 10;
	$chars[ 6 ] = 48 + $add / 10;

	return sprintf( '%07d/%s.flv', $id / 1000, pack( 'C*', @chars ) );
}

# vim: filetype=perl:ts=4:sw=4
