Здравствуйте, в этой новости хочу уделить внимание разработке плагинов на Delphi к DownloadMaster (DM). В прошлой статье мы рассмотрели основные события и методы API DM, которые предоставляют нам разработчики для того, чтобы написать какой-нибудь плагин. Какие плагины можно написать для DM да много каких. На самом деле если Вы захотите написать какой-то плагин, он уже возможен есть в сети, но всеже когда написал свой плагин, можно и другим дать его в помощь, если он полезный будет. Например плагины очень популярные такие, которые перехватывают ссылки с разных обменников, такие как рапидшара и ей подобные сервисы, а также же был бы популярный плагин, который качает сразу же через DM видео файл по прямой ссылке. Вот примерно такие плагины довольно популярны. Я делал подобный плагин, который получал ссылки с файлообменников и видео-сервиса и добавлял их в закачку DM. В этой статье мы рассмотрим, что-то подобное. В прошлой статье я рассказал про мастер создания плагинов для DM, Вы сможете кстати сделать такой мастер сами для любого плагина.
Ну вот теперь давайте по порядку, мы в данной статье будем работать с событием dm_download_added, то есть оно возникает тогда, когда добавляется закачка какая-либо, без разницы какого формата. Мы для начала получим список всех идентификаторов закачки, а затем про их получим информацию. Ну мы например добавим какую-нибудь ссылку, которая не прямая, а затем пропарсив ее, получим прямую и сразу же добавим в DM. Для начала в файл названиеплагинаImpl.pas мы где мастер плагинов DM создал шаблончик найдем функцию EventRaised и там же есть событие dm_download_added, а точнее оно там будет описано так примерно
if eventType = 'dm_download_added' then
begin
end;
Мастер сам создал такой шаблон, а мы между begin…end напишем сначала получение идентификаторов закачек, код смотрим ниже
var
id_list:WideString;
begin
if eventType = 'dm_download_added' then
begin
id_list:=myIDmInterface.DoAction('GetDownloadIDsList','');
ShowMessage(id_list);
end;
end;
Вот таким образом мы получим список идентификаторов закачек, включая последнюю добавленной, которую нам и необходимо будет обрабатывать, так как остальные уже непонятно — либо остановлены, либо уже докачаны, что-то из этого. Дальше получаем информацию о нашей закачке, которую мы добавляем в список закачек
var
id_list,id_info:WideString;
i,j:integer;
begin
if eventType = 'dm_download_added' then
begin
id_list:=myIDmInterface.DoAction('GetDownloadIDsList','');
for i:=1 to length(id_list) do
begin
if (id_list[i]=' ') and (i<>length(id_list)) then
begin
j:=i;
end;
end;
Delete(id_list,1,j);
Delete(id_list,length(id_list),1);
id_info:=myIDmInterface.DoAction('GetDownloadInfoByID',id_list);
ShowMessage(id_info);
end;
end;
Вот таким мы образом получим информацию в формате XML о закачке, там нам необходимо вытащить <url></url>, то есть url, которую бы добавляем для дальнейшего парсинга. Давайте же пропарсим это дело
var
id_list,id_info,url:WideString;
i,j:integer;
id_list,id_info,url:WideString; i,j:integer;
begin
if eventType = 'dm_download_added' then
begin
id_list:=myIDmInterface.DoAction('GetDownloadIDsList','');
for i:=1 to length(id_list) do
begin
if (id_list[i]=' ') and (i<>length(id_list)) then
begin
j:=i;
end;
end;
Delete(id_list,1,j);
Delete(id_list,length(id_list),1);
id_info:=myIDmInterface.DoAction('GetDownloadInfoByID',id_list);
url:=copy(id_info,pos('<url>',id_info)+length('<url>'),pos('</url>',id_info));
Delete(url,pos('</url>',url),length(url));
ShowMessage(url);
end;
end;
Теперь когда ссылка получена, можете ее парсить, что хотите делать, в потоках обрабатывать и так далее. В конце статьи хочу сказать, что скомпилированный плагин DM (*.dll) необходимо закинуть в папку с DownLoadMaster там есть папка Plugins туда и копируем. После этого перезапустить DM и должно вместе с DM запуститься окно настроек Вашего плагина (если Вы использовали мастер создание плагинов DM), чтобы оно при старте на запускалось мы находим процедуру PluginConfigure комментируем вызов формы
procedure TDMTest.PluginConfigure(params: WideString);
begin
if not Assigned(CfgForm) then
begin
CfgForm := TDMTestSetupForm.Create(nil);
end;
CfgForm.Language:=myIDmInterface.DoAction('GetLanguage', '');
{$IFNDEF USS3}
{$ELSE}
CfgForm.Settings:=Self.Settings;
{$ENDIF}
if params='NOCANCEL' then
begin
//CfgForm.BitBtn2.Enabled:=false;
//if CfgForm.ShowModal=mrOK then
//SettingsChanged;
end
else
begin
//CfgForm.Show;
end;
end;
Ну вроде бы все, ждем следующей статьи