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)

до полного комплекта.

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

('GetCurrentConnectionType', '')

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

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


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


выводить ту самую форму с таймером, которая появляется, например, с вопросом "Выйти из 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))

после того, как 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)



Хотелось бы, чтобы в 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)
посылается только в указанный плагин, при отсутствии - во все, кроме сгенерировавшего.