//*******************************************************************************
//****                                                                       ****
//****     Скрипт для загрузки обложек и дисков с сайта covers.mrcat.org     ****
//****                                                                       ****
//****      Автор основной версии : Евгений К. ( aka Djek-ural )             ****
//****            email; djek.root@gmail.com                                 ****
//****                                                                       ****
//*******************************************************************************

Const
	// параметры для настройки пользователем.
		login      	= 'DHTb'				; // Логин для входа на сайт
		password   	= '34586799035936'		; // Пароль для входа на сайт
		// Поисковые настройки
		Lang_ext	= 2						; // Язык для выборки обложек или дисков
											  // Возможные параметры
											  // 0 = 'English'
											  // 1 = 'Любой'
											  // 2 = 'Русский'
											  // рекомендую для использования только Русский
		Case_ext	= 0						; // Тип Носителя
											  // Возможные параметры
											  // 0 = 'Любой'
											  // 1 = 'VHS'
											  // 2 = 'CD Video'
											  // 3 = 'DVD Video '
											  // 4 = 'Video HD/BlueRay'
		DPI300		= False					;  // Выдача результатов с высоким качеством картинки DPI > 300 , установите True для включения
		// Настройки для выбора в скрипте
		Cover_ext	=  0					;  // Тип обложки
											  // Возможные параметры
											  // 0 = 'Обложка'
											  // 1 = 'Slim Обложка'
											  // 2 = 'Jewel Front'
											  // 3 = 'Jewel Back (наружу коробки)'
											  // 4 = 'DigiPak (снаружи)'
											  // 5 = 'Вкладыш'
											  // 6 = 'Jewel Back (внутрь коробки)'
											  // 7 = 'DigiPak (внутри)'
											  // 8 = 'DigiPak (коробка)'
											  // 9 = 'Multydisk (multybox) обложка'
											  // 10= 'Обложка "2 в одном"'
											  // 11= 'Другое'
		Pri2Cover	=  0					;  // Второй приоритет типа обложки
											  // Номер указывать аналогично для типа обложки
		Pri3Cover	=  0					;  // Третий приоритет типа обложки
											  // Номер указывать аналогично для типа обложки
		Pri4Cover	=  0					;  // Четвертый приоритет типа обложки
											  // Номер указывать аналогично для типа обложки
		Pri5Cover	=  0					;  // Пятый приоритет типа обложки
											  // Номер указывать аналогично для типа обложки
		Scan_ext	=  0					;  // Тип скана
											  // Возможные параметры
											  // 0 = 'Скан с оригинала'
											  // 1 = 'Редактированный скан'
											  // 2 = 'Собственный рисунок'
											  // 3 = 'Другое'
		pri2scan	=  0					;  // Второй приоритет типа скана
											  // Номер указывается аналогично для типа скана
		pri3scan	=  0					;  // Третий приоритет типа скана
											  // Номер указывается аналогично для типа скана
		pri4scan	=  0					;  // Четвертый приоритет типа скана
											  // Номер указывается аналогично для типа скана

  //Результаты парсинга
  prError     = 0; 
  prFinished  = 1;
  prList      = 2;
  prListImage = 3;
  prDownload  = 4;

  //Типы работы скрипта
  stMovies = 0;
  stPeople = 1; 
  stPoster = 2;
  stCover  = 3;
  
  // типы режимов определяемых пользователем
  smSearch        = 0;
  smSearchFilm    = 1;
  smFinished      = 2;
  
  //Download methods
 dmGET  = 0;
 dmPOST = 1;
 
  mDebug = True ; // включает режим отладки если True 

const
  SCRIPT_VERSION = '0.1.1.0'; 
  SCRIPT_NAME    = 'Covers.mrcat.org [RU]';
  SCRIPT_DESC    = '[RU] Импорт обложек и дисков с Covers.mrcat.org';
  SCRIPT_LANG    = $19; //Russian
  SCRIPT_TYPE    = stMovies;

  BASE_URL       = 'http://covers.mrcat.org';

  RATING_NAME    = 'Covers.Mrcat.Org';
  SEARCH_STR     = 'http://covers.mrcat.org/search.php?postback=1&title=%s';
  CODE_PAGE      = 1251;

var
  Mode		 : Byte;
  Resolut	 : Boolean; // Логическая переменная которая разрешает или запрешает загрузку картинки
  TipPic	 : Integer; // Определяет тип изображения
  tr0,trA,trB: Boolean;
  St		 : Integer;

function GetScriptVersion : WideString;
begin
  Result := SCRIPT_VERSION;
end; 
 
function GetScriptName : WideString;
begin
  Result :=  SCRIPT_NAME;
end;

function GetScriptDesc : WideString;
begin
  Result := SCRIPT_DESC;
end;

function GetRatingName : WideString;
begin
  Result := RATING_NAME;
end;

function GetBaseURL : String;
begin
  Result := BASE_URL;
end;

function GetScriptLang: Cardinal;
begin
  Result := SCRIPT_LANG;
end;

function GetCodePage : Cardinal;
begin
  Result := CODE_PAGE;
end;

function GetScriptType : Byte; 
begin
  Result := SCRIPT_TYPE;
end;

function GetCurrentMode : Byte; 
begin
  Result := Mode;
end;

// функция для составления поискового запроса
function Zapros(URLS : WideString) : WideString;
var
PoiskURL , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 : WideString;
begin
t1 := '&useorand=0'; // парметр поиска означает "любым словом"
t8 := ''; // только картинки высокого разрешения > 300 по умолчанию отключен 
t2 := '&case=-1'; // параметр поиска означает тип носителя "любой"
t3 := '&cover=-1'; // параметр поиска означает тип картинки "любой"
t4 := '&language=-1'; // параметр поиска означает язык "любой"
t5 := '&year=0'; // параметр поиска означает год "любой"
t6 := '&showdetails=1'; // показывать обложки в результатах
t7 := '&btnSubmit=%C8%F1%EA%E0%F2%FC'; // это так мусор для стандартности
  case Lang_ext of
	2:t4 := '&language=18'; 
	0:t4 := '&language=12';
  end;
  case Case_ext of
	2:t2 := '&case=256';
	3:t2 := '&case=6';
	1:t2 := '&case=11';
	4:t2 := '&case=224';
	end;
	if DPI300 then t8 :='&quality=1';
  PoiskURL := SEARCH_STR +t1+t8+t2+t3+t4+t5+t6+t7;
  Result := PoiskURL;
end;

function GetDownloadURL : String;
begin
  if mode = smSearch then 
    Result := Zapros(Search_Str);
end;

function GetDownloadMethod : Byte;
begin
  if (Mode = smSearch) and (St = 0) then Result := dmPOST else
    Result := dmGET;
	Inc(St);
end;

procedure GetLoginInfo(out URL : String; out Params : String);
begin
  URL := BASE_URL + '/login.php';
  Params := 'postback=1&username=' + login + '&password=' + password + '&remember=on&restore=';
end;

//**** текст основного кода ****

//**** функция для поиска фильмов ****
procedure SearchFilms(HTML : WideString);
var
Pos1 , Pos2 , Pos3 , Pos4 , Pos5 , Pos6 : Integer;
Title , OrigTitle , URL , Quality : WideString;
tagRR : Boolean;
begin
if Pos('картинок',HTML) <> 0 then
  begin
  Pos1 := Pos('<a id',HTML);
	while Pos1 <> 0 do
	  begin
	  tagRR := False;
	  Pos2 := PosFrom('"search" href="',HTML,Pos1)+15;
	  Pos3 := PosFrom('">',HTML,Pos2);
	  Pos4 := PosFrom('[',HTML,Pos3);
	  Pos6 := PosFrom(']',HTML,Pos4);
	  Quality := Copy(HTML,Pos4+1,Pos6-(Pos4+1));
	  ShowMessage('Качество фильма-'+Quality,'Информация');
	  URL := Copy(HTML,Pos2,Pos3-Pos2);
	  URL := BASE_URL + '/' + URL;
	  if not mDebug then ShowMessage('адрес страницы-'+URL,'Информация');
	  Pos5 := PosFrom(' / ',HTML,Pos3);
	  if Pos5 > Pos4 then Pos5 := Pos4; 
	  OrigTitle := Copy(HTML,Pos3+2,Pos5-(Pos3+2));
	  if not mDebug then ShowMessage('Оригинальное Название-'+OrigTitle,'Информация');
	  if Pos5 = 0 then Pos5 := Pos3+2 else Pos5 := Pos5+3;
	  Title := Copy(HTML,Pos5,Pos4-(Pos5));
	  if not mDebug then ShowMessage('Просто Название-'+Title,'Информация');
	  case Case_ext of
	  2:if Pos('CD Video',Quality) > 0 then tagRR := True;
	  3:if Pos('DVD Video ',Quality) > 0 then tagRR := True;
	  1:if Pos('VHS',Quality) > 0 then tagRR := True;
	  4:if Pos('Video HD/BlueRay',Quality) > 0 then tagRR := True;
	  0:tagRR := True;
	  end;
	  if tagRR then AddSearchResult(Title,OrigTitle,'',URL,'');
	  Pos1 := PosFrom('<a id',HTML,Pos4);
	  end;
  end;
end;

// функция для выборки типа обложки
function FrontCover(Cover : Integer): WideString;
var
Cover_str : WideString;
begin
	case Cover of
	0: Cover_str := 'Обложка';
	1: Cover_str := 'Slim Обложка';
	2: Cover_str := 'Jewel Front';
	3: Cover_str := 'Jewel Back (наружу коробки)';
	4: Cover_str := 'DigiPak (снаружи)';
	5: Cover_str := 'Вкладыш';
	6: Cover_str := 'Jewel Back (внутрь коробки)';
	7: Cover_str := 'DigiPak (внутри)';
	8: Cover_str := 'DigiPak (коробка)';
	9: Cover_str := 'Multydisk (multybox) обложка';
	10: Cover_str := 'Обложка "2 в одном"';
	11: Cover_str := 'Другое';
	end;
  Result := Cover_str;
end;

// Функция для определения типа скана
Function ScanCover(Scan : Integer) : WideString;
var
Scan_str : WideString;
begin
	case Scan of
	0: Scan_str := 'Скан с оригинала';
	1: Scan_str := 'Редактированный скан';
	2: Scan_str := 'Собственный рисунок';
	3: Scan_str := 'Другое';
	end;
	Result := Scan_str;
end;

// процедура для выборки по скану
function SelectScan(Stroka_str,prior1,prior2,prior3,prior4 : WideString) : Boolean;
var
tagYes : Boolean;
begin
tagYes := False
  if Pos(prior1,Stroka_str) > 0 then tagYes := True else
	if Pos(prior2,Stroka_str) > 0 then tagYes := True else
	  if Pos(prior3,Stroka_str) > 0 then tagYes := True else
		if Pos(prior4,Stroka_str) > 0 then tagYes := true else
		tagYes := False;
	Result := tagYes;
end;

// процедура обеспечиваюшая выборку нужных парметров
procedure Analitic(StringS : WideString);
var
temp_cover , Pri2 , Pri3 , Pri4 , Pri5: WideString;
Sc1 , Sc2 , Sc3 , Sc4 : WideString;
begin
case Lang_ext of
	1:tr0 := True;
	0:if Pos('English',StringS) > 0 then tr0 := True else tr0 := False;
	2:if Pos('Русский',StringS) > 0 then tr0 := True else tr0 := False;
end;
	temp_cover := FrontCover(Cover_ext);
	Pri2 := FrontCover(Pri2Cover);
	Pri3 := FrontCover(Pri3Cover);
	Pri4 := FrontCover(Pri4Cover);
	Pri5 := FrontCover(Pri5Cover);
	Sc1 := ScanCover(Scan_ext);
	Sc2 := ScanCover(pri2scan);
	Sc3 := ScanCover(pri3scan);
	Sc4 := ScanCover(pri4scan);
  if (trA = False) and (tr0 = True) then
  begin
  if (Pos(temp_cover,StringS) > 0) and (TipPic <> 2) then 
  begin
  if SelectScan(StringS,Sc1,Sc2,Sc3,Sc4) = True then 
  begin
  trA := True;
  TipPic := 2;
  end;
  end  
  else 
	if (Pos(Pri2,StringS) > 0) and (TipPic <> 2) then 
	begin
	if SelectScan(StringS,Sc1,Sc2,Sc3,Sc4) = True then
	begin
	trA := True;
	TipPic := 2;
	end;
	end
	else
	  if (Pos(Pri3,StringS) > 0) and (TipPic <> 2) then
	  begin
	  if SelectScan(StringS,Sc1,Sc2,Sc3,Sc4) = true then
	  begin
	  trA := True;
	  TipPic := 2;
	  end;
	  end
	  else
		if (Pos(Pri4,StringS) > 0) and (TipPic <> 2) then
		begin
		if SelectScan(StringS,Sc1,Sc2,Sc3,Sc4) = True then
		begin
		trA := true;
		TipPic :=2;
		end;
		end
		else
		  if (Pos(Pri5,StringS) > 0) and (TipPic <> 2) then
		  begin
		  if SelectScan(StringS,Sc1,Sc2,Sc3,Sc4) = True then
		  begin
		  trA := True;
		  TipPic :=2;
		  end;
		  end
		  else trA := False;
  end;
  if (trB = False) and (tr0 = True) and (SelectScan(StringS,Sc1,Sc2,Sc3,Sc4) = True) then
  begin
  if (Pos('Диск',StringS) > 0) and (TipPic <> 3) then trB := True else trB := False;
  TipPic := 3;
  end;
end;

// **** функция для парсинга изображений
procedure ParsePic(HTML : WideString);
var
Po1 , Po2 , Po3 , Po4 , Po5: Integer;
Stroka , URLPic: WideString;
tr1 , tr2 , tr3 : Boolean;
begin
if Pos('title_text',HTML) <> 0 then
  begin
	Po2 := Pos('"title_text"><h1>',HTML)+12;
	Po3 := Pos('</h1></div>',HTML);
	Stroka := Copy(HTML,Po2,Po3-Po2+1);
	ShowMessage('Строка с названием и типом-'+Stroka,'Информация');
	case Case_ext of
	'CD Video':if Pos('CD Video',Stroka) > 0 then tr1 :=True else tr1 :=False;
	'DVD Video ':if Pos('DVD Video ',Stroka) > 0 then tr1 :=True else tr1 :=False;
	'VHS':if Pos('VHS',Stroka) > 0 then tr1 :=True else tr1 :=False;
	'Video HD/BlueRay':if Pos('Video HD/BlueRay',Stroka) > 0 then tr1 :=True else tr1 := False;
	'Любой':tr1 :=True ;
	end;
   Po1 := Pos('<tr id="row_bg',HTML);
   while Po1 > 0 do
	begin
	Po2 := PosFrom('<td valign="top" align="left" nowrap="nowrap"',HTML,Po1);
	Po3 := PosFrom('>',HTML,Po2); // Начало для текста выборки
	Po4 := PosFrom('<span id="bluelinksmall">',HTML,Po3); // Конец выборки для текста
	Stroka := Copy(HTML,Po3,Po4-Po3);
	Analitic(Stroka);
	ShowMessage('Строка с типами изображений-'+Stroka,'Информация');
	Po2 := PosFrom('<div style="margin-top:5px;">',HTML,Po4);
	Po3 := PosFrom('<a href="',HTML,Po2);
	Po4 := PosFrom('" target',HTML,Po3);
	URLPic := Copy(HTML,Po3+9,Po4-(Po3+9));
	ShowMessage('Строка с адресом картинки-'+URLPic,'Информация');
	URLPic := BASE_URL + '/' + URLPic;
	ShowMessage('Строка с полным адресом картинки-'+URLPic,'Информация');
	if (TipPic = 2) and (trA = True) then
	  begin
	  if tr1 = True then AddImageURL(TipPic,URLPic);
	  end;
	if (TipPic = 3) and (trB = True) then
	  begin
	  if tr1 = True then AddImageURL(TipPic,URLPic);
	  end;
	Po1 := PosFrom('<tr id="row_bg',HTML,Po4);
	end;
	Mode := smFinished;
  end;
end;

// ФУНКЦИЯ для сброса данных в файл
 procedure SaveStatistic(Info:WideString);
 var
 Fact : Boolean ;
 begin
 StringToFile('Index.html',Info,False,False);
 end;
 

//***** самая главная функция в программе *****
function ParsePage(HTML : WideString; URL : String) : Cardinal;
var
CurPos , TmpPos , EndPos , VarPos  : Integer;
temp1 , temp2 : WideString;
begin
SaveStatistic(HTML);
if (Pos('<html>',HTML) = 0) and (Pos('2005 by',HTML) = 0) then Result := prError; // загрузили не ту страницу 
if Pos('Ничего не найдено', HTML) <> 0 then Result := prList; // ничего не найдено
if (Pos('Найдено',HTML) <> 0) and (Pos('картинок',HTML) <> 0) then
  begin
	Mode := smSearchFilm;
	SearchFilms(HTML);
	Result := prList;
  end;
  if (Pos('Covers / Обложки - Поиск',HTML) = 0) and (Pos('Сортировка:',HTML) <> 0) then ParsePic(HTML); 
  if Mode = smFinished then Result := prFinished;
end;
begin
end.