Чего не хватает в Plugin API

Все что касается разработки, отладки, использования подключаемых модулей.

Moderators: Korney San, marcipan

User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Чего не хватает в Plugin API

Post by Korney San »

Чего не хватает в API (а хотелось бы)

function DoAction(action: WideString; parameters: WideString): WideString;

Есть:
('AddingURL', '<url>http://www.westbyte.com/plugin</url> <hidden>1</hidden>')
допустимые параметры: 'url', 'referer', 'description', 'savepath', 'filename', 'user', 'password', 'sectionslimit', 'priority', 'cookies', 'post', 'hidden', 'start', 'mirror1', 'mirror2', 'mirror3', 'mirror4', 'mirror5'
Дополнить:
параметрами
'proxyid' со значениями -1 (не использовать), 0 (общие), 1... (из менеджера прокси). См. также "Не хватает:"
'categoryid' для добавления закачки в существующую категорию. если ID категории не существует - по умолчанию.

Есть:
('GetDownloadIDsList', '')
('GetDownloadIDsList', IntToStr(State))
Надо:
('GetDownloadIDsList', IntToStr(State1)+' '+IntToStr(State2)...)
Обработка более одного состояния в параметре, как в StartDownloads/StopDownloads.

Есть:
('ShutDown', '')
Надо:
('ShutDown', Flag)
где флаг это пустая строка (обычное выключение) , FORCE или FORCEIFHUNG (я надеюсь, Shutdown сам по себе работает без них)

Не хватает:

('Reboot', Flag) :idea:
до полного комплекта. :) Flag как у Shutdown.

('GetProxyCount', '')
получить количество настроенных прокси из менеджера.

('GetProxyInfoByID', IntToStr(ID))
В результате что-то типа <ip>...</ip><port>...</port>
т.е. получить IP и порт (x.x.x.x:y) указанного прокси.
Я так понимаю, что разработчики ни в жисть не дадут плагину считать логин и пароль. :)

('GetCurrentConnectionType', '') :idea:
получить тип текущего соединения (Dialup, LAN, VPN, etc). 0 = отсутствие соединения

('SetDownloadInfoByID', parameters) :idea:
параметры аналогично AddingURL. Т.о., при использовании тега url у закачки сменится основной url.

('DeleteID', Params) :idea: :!:
В Params заносится <id>...</id><ask>0/1</ask>
удалить закачку с указанным ID

('ShowMessageForm', Params) :idea: :!:
выводить ту самую форму с таймером, которая появляется, например, с вопросом "Выйти из DM?"
Params - строка в формате XML (как у AddingURL), параметры:
<id>Integer</id> - произвольный номер
<type>Integer</type> - тип сообщения/индекс значка (0 - Warning, 1 - Error, 2 - Info, 3 - Confirm)
<title>String</title> - заголовок окна
<message>String</message> - собственно текст сообщения
<time>Integer</time> - время таймера в секундах
<defaultcancel>0/1</defaultcancel> - Отмена по умолчанию

function EventRaised(eventType: WideString; eventData: WideString): WideString;

Есть:
('dm_download_added', IntToStr(ID))
Надо:
('dm_download_deleted', IntToStr(ID))
при удалении закачки вручную или при включенной опции "удалять закачанные" вслед за событием ('dm_download_state', IntToStr(ID)+' '+IntToStr(integer(dsDownloaded))).

Есть:
('dm_connect', '')
Надо:
('dm_connect', IntToStr(ConnectionType))
получение типа установленного соединения с целью соответствующей реакции
('dm_connect', RASName)
получение имени установленного RAS соединения

Не хватает:

('dm_download_saved', IntToStr(ID)) :idea:
после того, как DM переименовал сохраняемый файл из .DMF в то, что нужно.
Событие должно происходить ПЕРЕД событием ('dm_download_state', IntToStr(ID)+' '+IntToStr(integer(dsDownloaded))) соответствующей закачки.

('dm_disconnect', RASName)
при отключении RAS соединения

('dm_disconnectall', '')
когда DM обнаружил полное отсутствие каких-либо соединений

При реализации ShowMessageForm:
('messageform_opened', '')
форму открыл cам DM
('messageform_opened', IntToStr(ID))
форму открыл какой-то плагин

('messageform_closed', Button)
Button - нажатая пользователем или таймером кнопка.
0 = Отмена, 1 = ОК ; или как вариант mrOK, mrCancel

IPC (InterPluginCommunication) :idea: :!: :idea:
Хотелось бы, чтобы в Plugin API была реализация обмена данными между плагинами. Для этого достаточно добавить в DoAction несколько команд и их обработку.

('RegisterAction', ActionName)
Result = -1 - команда была зарегистрирована ранее
Result >=0 - успешная регистрация, внутренний индекс команды
Плагин регистрирует в DM собственную команду

('CheckAction', ActionName)
Result = 0/1
Плагин проверяет наличие зарегистрированной команды

('UnregisterAction', ActionName)
Плагин отменяет регистрацию СОБСТВЕННОЙ команды

Далее любой плагин может вызвать
DoAction(ActionName, ActionParameters)
а в плагин, регистрировавший команду, должно придти
EventRaised(ActionName, Parameters)
где Parameters = <from>PluginName</from><params>ActionParameters</params>

('Event', EventParams)
где EventParams = <to>PluginName</to><type>eventType</type><data>eventData</data>
Плагин генерирует собственное событие
при наличии тега <to> событие
EventRaised(eventType, eventData)
посылается только в указанный плагин, при отсутствии - во все, кроме сгенерировавшего.
Last edited by Korney San on 06 Feb 2009, 13:23 Fri, edited 7 times in total.
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
Mike 64
Posts: 8
Joined: 11 Mar 2007, 14:12 Sun

Post by Mike 64 »

Из моей темы про NTLM-аутентификацию добавлю ещё пару полезных функций, которых мне не хватает:

1) Получить файл (параметр - url). Чтобы его скачивал DM со своими настройками
2) Проверить обновление файла (параметры - url и предыдущий размер)
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

В очередной раз правил код своего плагина. Вспомнилась ещё одна штука.

Есть событие ('dm_download_added', IntToStr(ID)) (добавлена закачка)
К нему в пару надо событие ('dm_download_deleted', IntToStr(ID)), которое должно происходить при удалении закачки из списка вручную. Вопрос генерации этого сообщения после окончания скачивания (после события ('dm_download_state', IntToStr(ID)+' '+IntToStr(dsDownloaded)) ) оставляю на Ваше усмотрение.

Сейчас мне приходится периодически запрашивать весь список закачек и сверять его с очередью в плагине, чтобы узнать, не удалил ли хитрый пользователь какую закачку... :)
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
Fr0sT
Бывалый
Posts: 12
Joined: 02 Aug 2007, 15:27 Thu

Post by Fr0sT »

Хотелось бы возможность удалять закачки из списка. И/или механизм блокирования добавления закачки. Сейчас занялся плагином скачивания файлов по маске, и возможность удалять/блокировать добавление неподходящих закачей крайне необходима.

P.S. Вот так определить константы вернее:

Code: Select all

TDownloadState = (dsPause, dsPausing, dsDownloaded, dsDownloading, dsError, dsErroring, dsQueue);
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

Навеяло плагином FileShares:

IsUsingProxy - используется прокси или нет, и соответственно
ProxyServer
ProxyPort
ProxyLogin
ProxyPass
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
User avatar
ZuB007
Posts: 8
Joined: 30 Jul 2007, 2:33 Mon
Location: Череповец
Contact:

Post by ZuB007 »

Korney San wrote:Навеяло плагином FileShares:

IsUsingProxy - используется прокси или нет, и соответственно
ProxyServer
ProxyPort
ProxyLogin
ProxyPass
А если использовать прокси от IE ?
Тоесть в настройках ставим "Использовать настройки прокси-сервера из MS Internet Explorer", а плагин бы менял у IE проксю из списка прокси-серверов в тхт формате. Получилось бы отличное дополнение к FileShares, при этом не нужно выше перечисленное, хотя я незнаю возможно ли с помощью плагинских операций менять проксю у IE, но если такогово нет, можно написать дополнение которое открывал бы сам плагин, а это дополнение в свою очередь меняло бы проксю у IE. Если задумка хорошая взялся бы кто за её реализацию !

Прокси лист должен быть вот таким:

Code: Select all

194.165.130.93:80
201.23.156.54:3128
201.17.146.54:3128
222.124.3.26:8080
217.218.96.37:80
69.1.123.2:8080
201.6.66.47:6588
где
1. IP
2.порт

по HTTP
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

ZuB007 wrote:А если использовать прокси от IE ?
Тоесть в настройках ставим "Использовать настройки прокси-сервера из MS Internet Explorer", а плагин бы менял у IE проксю из списка прокси-серверов в тхт формате.
Батенька, это не по теме. :)
Здесь идёт разговор про то, что должен отдавать плагинам Download Master через своё API.

А то, что плагин достанет или нет из IE - cовсем другая тема, это возможности самого плагина, подобные предложения в дальнейшем пости в ветку плагина. :)

На правах offtopic:
Кстати, насколько я сам пробовал использованные технологии, плагин вполне может обойтись и без ссылки на IE - достаточно прописать прокси в нём. :) Главное - чтобы плагин УМЕЛ. :!:
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
Fr0sT
Бывалый
Posts: 12
Joined: 02 Aug 2007, 15:27 Thu

Post by Fr0sT »

Имхо, заморачиваться с проксей ИЕ - бред.
nmn
Posts: 4
Joined: 16 Aug 2007, 3:25 Thu

Post by nmn »

еще бы возможность изменять закачки
VNavigator
Posts: 1
Joined: 20 Sep 2007, 23:47 Thu
Contact:

Post by VNavigator »

Очень нужны две функции:
1) GetCurrentDownload
2) GetNextDownload
и одно событие
1) ('dm_download_deleted', IntToStr(ID))
Делаю плугин для переподключения между закачками при скачивании с рапиды, а этих моментов очень не хватает!
ipranger
Posts: 3
Joined: 08 Oct 2007, 11:01 Mon

Post by ipranger »

1. При добавлении закачки (action = 'AddingURL') нет возможности указать категорию.

2. При eventType = 'dm_download_state' и State=dsDownloaded
скаченный файл еще не сохранен с нужным именем (как указано в параметре saveto). У него расширение DMF и доступ к этому файлу заблокирован. Хотелось бы чтобы событие срабатывало когда файл уже создан и разблокирован.
aldari
Опытный
Posts: 39
Joined: 22 May 2007, 22:58 Tue

Post by aldari »

По моему
При добавлении закачки (action = 'AddingURL') нет возможности указать категорию.
и
еще бы возможность изменять <свойства> закачки
можно обобщить в !Нельзя изменять свойства существующей закачки!.

Я из-за узкого API плагинов не могу слить две закачки в FileShares,
если вы знаете о чем идет речь.

Уже пытался изменять URl в xml файле, но DM оттуда ничего не
читает, только пишет. Осталось только лезть в память к DM
через Win32 API и менять там URL вручную.
Но это рисковано, можно получить от Windows по затылку Image .
ipranger
Posts: 3
Joined: 08 Oct 2007, 11:01 Mon

Post by ipranger »

ipranger wrote: 2. При eventType = 'dm_download_state' и State=dsDownloaded
скаченный файл еще не сохранен с нужным именем (как указано в параметре saveto). У него расширение DMF и доступ к этому файлу заблокирован. Хотелось бы чтобы событие срабатывало когда файл уже создан и разблокирован.
Пришлось ждать ('dm_timer_5'), пока не создастся файл, но это не есть хорошо. А п.1. так и повис. Надеюсь на разработчиков DM :D
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

aldari wrote:По моему
При добавлении закачки (action = 'AddingURL') нет возможности указать категорию.
и
еще бы возможность изменять <свойства> закачки
можно обобщить в !Нельзя изменять свойства существующей закачки!.
Э-э-э,не совсем.
Например, если вновь добавить закачку с СУЩЕСТВУЮЩИМ URL и другим приоритетом, приоритет МЕНЯЕТСЯ (сам проверил). Видимо, если URL совпадает с существующим, можно изменить параметры. доступные через AddingURL. Правда, категории там нет... :(
aldari wrote: Я из-за узкого API плагинов не могу слить две закачки в FileShares,
если вы знаете о чем идет речь.

Уже пытался изменять URl в xml файле, но DM оттуда ничего не
читает, только пишет. Осталось только лезть в память к DM
через Win32 API и менять там URL вручную.
Но это рисковано, можно получить от Windows по затылку Image .
Попробуй через AddingURL mirror1 start - вдруг сработает.
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

Год и пять месяцев назад в поисках менеджера закачек, способного любым способом обойти ограничения нашего корпоративного прокси, я набрёл на Download Master и написал свой первый плагин.

Год назад я открыл эту тему небольшим списком того, что меня не устраивало в интерфейсе плагинов. Открыл исключительно потому, что ни в ICQ, ни по почте мне никто из разработчиков не ответил.

Сейчас, пользуясь DM, написав 9 плагинов (6 из которых вы можете найти на форуме) и поработав над собой, я переформулировал требования к интерфейсу, которые и выразил в шапке этой темы.
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
Post Reply