# $Id: TurboBit 10867 2009-10-26 22:47:10Z sparky $
# Get::TurboBit - File 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: TurboBit
short: TB
uri: qr{turbobit\.net/}
uri: qr{turbobit\.ru/}
cookie: tb
slots: max
status: OK 2009-10-24

start:
	GET( $-{_uri} );

	ERROR( "file not found" ) if m#<div class="code-404">404</div>#;
	ERROR( "file not found" ) if m#Файл не найден. Возможно он был удален|File was not found. It could possibly be deleted#;

	! m#<h1 class="download-file">.*?<span.*?>&nbsp;</span><b>(.*?)</b></h1>#;
	my $name = $1;
	! m#<div class="download-file">\s*<div><b>.*?</b> ([\d,\.]+ .)#;
	my $size = $1. "B";
	$size =~ tr/Мк,/Mk./;
	INFO( name => $name, asize => $size );

	! m#<td><a class="free" href="(.*?)" onclick#;
	CLICK( $1 );

stage_captcha:
	if ( m#<img alt="Captcha" src="(.*?)"# ) {
		$-{capimg} = $1;
	} else {
		! m#var Timeout = {\s*limit: (\d+),#s;
		RESTART( $1, "free limit reached" );
	}
	! $-{form} = $self->form( match => { body => qr#<img alt="Captcha"# } );

stage_getimg:
	GET( $-{capimg}, keep_referer => 1 );

	CAPTCHA(
		qr/[A-Z0-9]{4}/i,
		process => \&tb_decaptcha,
	);

	GOTO stage_getimg unless defined $_;
	
	$-{form}->set( captcha_response => uc $_ );
	GET( $-{form}->post() );

	if ( /updateTime: function/ ) {
		CAPTCHA_RESULT( "OK" );
	} else {
		CAPTCHA_RESULT( "FAIL" );
		GOTO stage_captcha;
	}

	! m{\$\("#timeout"\)\.load\("(/download/timeout/.*?)"\);};
	$-{dl_link} = $1;

	! m#var Timeout = {\s*limit: (\d+),#;
	WAIT( -$1, "starting download" );

	GET( $-{dl_link}, keep_referer => 1 );

	! m#<a href='(.*?)'>#;

	CLICK_DOWNLOAD( $1 );

perl:

sub tb_color_select
{
	my @s = sort { $a <=> $b } @_;
	return $s[2];
}

sub tb_decaptcha
{
	my $img = shift;
	$img->color_filter( \&tb_color_select );
	$img->luma_emphasize( 200, 160 );
	local $_ = $img->ocr();
	s/\s+//g;
	return $_;
}

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