package Plugins::rapidshare;
#
# rapidshare.pm module is a part of Web Share Downloader
# Copyright (C) 2006-2008 by Aleksey Luzin
#
#

use lib '..';
use sql;
use WSD::Download qw/&direct_download &create_request/;
use Common;
use strict;
use warnings;
use Exporter ();
use vars qw($VERSION);
use MIME::Base64;
use List::Util qw/first/;
use HTTP::Request::Common qw(POST);
our (@ISA, @EXPORT);
@ISA = qw(Exporter);
@EXPORT = qw(&check_link &download);
$VERSION = "1.97" ;

sub check_link {
    shift;
    my $link = shift;
    if ($link =~ /rapidshare\.(de|com)/) {
	return 1;
    }
    return 0;
}
my $ac = '';
my $error = '';

sub premium_download {
	my $link = shift;
	$browser->get('https://ssl.rapidshare.com/cgi-bin/premiumzone.cgi');
	my $req = POST 'https://ssl.rapidshare.com/cgi-bin/premiumzone.cgi',
		Referer => 'https://ssl.rapidshare.com/cgi-bin/premiumzone.cgi',
		Content => [login=>$config->{rapid_plogin}, password=>$config->{rapid_ppass}];
	my $response = $browser->request($req);
	if($response->is_success) {
		my $content = $response->content();
		if($content =~ /password is incorrect/i || $content =~ /Account not found/i) {
			my $error = 'Cannot login as premium';
			$log->write(3, "$error".$response->status_line);
			$links->setstatus($link->{id}, {status=>3, statustext=>$error, nexttry=>'5 minute'});
			return ;
		}
		$req = create_request($link->{link});
		$req->header('Cookie'=>$response->header('Set-Cookie'));
		WSD::Download::direct_download($link->{id}, $req );

	} else {
		my $error = 'Cannot login as premium';
		$log->write(3, "$error".$response->status_line);
		$links->setstatus($link->{id}, {status=>3, statustext=>$error, nexttry=>'5 minute'});

	}

}
sub get_directlink {
	my $link = shift;
	my $id = shift;
	$error = '';
	my $response = $browser->get($link);
	my $content = $response->content;
	if($content =~ /This file has been deleted/) {
		$error = 'This file has been deleted';
		$links->setstatus($id, {status=>2, statustext=>$error, speed=>0});
		return '';
	}
	if($content =~ /File not found/) {
		$error = 'File not found';
		$links->setstatus($id, {status=>2, statustext=>$error, speed=>0});
		return '';
	}

	$content =~ /form action="(.*?)"/s;
	my $link0 = $1;
	$link =~ /rapidshare.(de|com)(\/.*)/;
	my $uri = $2;
	$log->write(3,"action: $link0");
	$response = $browser->post($link0, { 'dl.start'=>'Free'});
	$content = $response->content;
	if ($content =~ /(wait \d+ minutes)/) {
		$error = $1;
		$log->write(3,"$error\nreturn1");
#		WSD::Download::change_ip;
#		my $c = WSD::Download::current_ip;
#		redo A if($c!=$cur_ip);
		return 0;
	}
	$content =~ /\<form(.*?)\/form\>/s;
	my $c = $1;
	$c =~ /action=\"(.*?)\"/;
	my $dlink = $1;
	if ($c =~ /actionstring\"\ value\=\"(.*?)\"/) {
		$ac = $1;
	}
	return $dlink;
}


sub download {
	shift;
	my $id = shift;
	my $link = $links->getlink($id);
#    my $link = query_hash('select *, unix_timestamp() as now, unix_timestamp(nexttry) as nexttry from links where id = ?', $id)->{$id};
	my $dlink = '';
	my $h;
	if(($config->{rapid_plogin})&& ($config->{rapid_ppass})) {
		premium_download($link)
	} else {
		$dlink = get_directlink($link->{link}, $id);
		if ($dlink) {
			my $content;
			if ($ac) {
				$content = [mirror=>'on', actionstring=>$ac];
			} else {
				$content = [mirror=>'on'];
			}
			my $t = 50;
			$log->write(4,'sleep: '.$t);
			sleep($t); 
			my $req = POST $dlink,
				Referer => $link->{link},
				Content => $content;
			$req->header('Accept','text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5');
			$req->header('Accept-Language', 'ru,en-us;q=0.7,en;q=0.3');
			$req->header('Accept-Charset','windows-1251,utf-8;q=0.7,*;q=0.7');
			WSD::Download::direct_download($id, $req );    
		}  else {
			$log->write(3, "$error");
			$links->setstatus($id, {status=>3, statustext=>$error, nexttry=>'5 minute'});
		}
	}
	
}
1;
