# $Id: SharingMatrix 10871 2009-10-27 11:36:04Z sparky $
# Get::SharingMatrix - 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: SharingMatrix
short: SM
uri: qr{sharingmatrix\.com/}
cookie: sm
status: OK 2009-10-23

start:
	GET( $-{_uri} );

	ERROR( "file not found" ) if m#File has been deleted#;

	if ( /You are already downloading file/ ) {
		! m#link_name = '(.*?)';#;
		my $name = $1;
		! m#fsize = '(.*?)';#;
		my $size = $1;
		$size =~ s/&nbsp;//;
		INFO( name => $name, asize => $size );

		MULTI();
	}

	! m#link_id = '(\d+)';#;
	$-{link_id} = $1;

	! m#case 'free':.*?sUrl2 = '(.*?)' \+ link_id;#s;
	my $link = $1 . $-{link_id};

	CLICK( $link, keep_referer => 1 );

	! m#link_name = '(.*?)';#;
	$-{link_name} = $1;
	! m#file_size = '(\d+)';#;
	INFO( name => $-{link_name}, size => $1 );

	! m#sid='(.*?)';#;
	$-{sid} = $1;

	! m#onclick="javascript:document\.images\.cryptogram\.src='(.*?)'#;
	$-{img_base} = $1;

stage_captcha:
	$-{img} = $-{img_base} . (irand 1000) . 1;
	GET( $-{img}, keep_referer => 1 );

	CAPTCHA(
		qr/[a-z]{5}/,
		process => \&sm_decaptcha,
	);

	GOTO stage_captcha unless defined $_;

	GET( '/ajax_scripts/verifier.php', post => "?$-{sid}&code=$_", keep_referer => 1 );

	if ( /^\s*1\s*$/s ) {
		CAPTCHA_RESULT( "OK" );
	} else {
		CAPTCHA_RESULT( "FAIL" );
		GOTO stage_captcha;
	}

	GET( '/ajax_scripts/dl.php', keep_referer => 1 );

	s/\s+//sg;
	$-{dl_id} = $_;

	GET( '/ajax_scripts/update_dl.php?id=' . $-{dl_id}, keep_referer => 1 );

	GET( "/ajax_scripts/_get.php?link_id=$-{link_id}&link_name=$-{link_name}&dl_id=$-{dl_id}&password=",
		keep_referer => 1 );

	s/^{//; s/}$//;
	my %js = map { /^(.*?)\s*:\s*"(.*?)"/ } split /\s*,\s*/, $_;

	CLICK_DOWNLOAD( "$js{serv}/download/$js{hash}/$-{dl_id}/" );

	# most likely multi-download
	RESTART( 0, "download error" ) if /Download Error/;

perl:

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

sub sm_decaptcha
{
	my $img = shift;

	$img->color_filter( \&sm_color_select );
	$img->luma_emphasize( 50, 150 );
	return $img->ocr();
}

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