Чего не хватает в Plugin API
Moderators: Korney San, marcipan
- Korney San
- Гуру
- Posts: 1116
- Joined: 02 Oct 2006, 17:01 Mon
- Location: Беларусь, Гомель
- Contact:
Чего не хватает в Plugin API
Чего не хватает в 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)
до полного комплекта. Flag как у Shutdown.
('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)
посылается только в указанный плагин, при отсутствии - во все, кроме сгенерировавшего.
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)
до полного комплекта. Flag как у Shutdown.
('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)
посылается только в указанный плагин, при отсутствии - во все, кроме сгенерировавшего.
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
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
- Korney San
- Гуру
- Posts: 1116
- Joined: 02 Oct 2006, 17:01 Mon
- Location: Беларусь, Гомель
- Contact:
В очередной раз правил код своего плагина. Вспомнилась ещё одна штука.
Есть событие ('dm_download_added', IntToStr(ID)) (добавлена закачка)
К нему в пару надо событие ('dm_download_deleted', IntToStr(ID)), которое должно происходить при удалении закачки из списка вручную. Вопрос генерации этого сообщения после окончания скачивания (после события ('dm_download_state', IntToStr(ID)+' '+IntToStr(dsDownloaded)) ) оставляю на Ваше усмотрение.
Сейчас мне приходится периодически запрашивать весь список закачек и сверять его с очередью в плагине, чтобы узнать, не удалил ли хитрый пользователь какую закачку...
Есть событие ('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
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
Хотелось бы возможность удалять закачки из списка. И/или механизм блокирования добавления закачки. Сейчас занялся плагином скачивания файлов по маске, и возможность удалять/блокировать добавление неподходящих закачей крайне необходима.
P.S. Вот так определить константы вернее:
P.S. Вот так определить константы вернее:
Code: Select all
TDownloadState = (dsPause, dsPausing, dsDownloaded, dsDownloading, dsError, dsErroring, dsQueue);
- Korney San
- Гуру
- Posts: 1116
- Joined: 02 Oct 2006, 17:01 Mon
- Location: Беларусь, Гомель
- Contact:
Навеяло плагином FileShares:
IsUsingProxy - используется прокси или нет, и соответственно
ProxyServer
ProxyPort
ProxyLogin
ProxyPass
IsUsingProxy - используется прокси или нет, и соответственно
ProxyServer
ProxyPort
ProxyLogin
ProxyPass
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
А если использовать прокси от IE ?Korney San wrote:Навеяло плагином FileShares:
IsUsingProxy - используется прокси или нет, и соответственно
ProxyServer
ProxyPort
ProxyLogin
ProxyPass
Тоесть в настройках ставим "Использовать настройки прокси-сервера из 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
- Korney San
- Гуру
- Posts: 1116
- Joined: 02 Oct 2006, 17:01 Mon
- Location: Беларусь, Гомель
- Contact:
Батенька, это не по теме.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
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
-
- Posts: 1
- Joined: 20 Sep 2007, 23:47 Thu
- Contact:
1. При добавлении закачки (action = 'AddingURL') нет возможности указать категорию.
2. При eventType = 'dm_download_state' и State=dsDownloaded
скаченный файл еще не сохранен с нужным именем (как указано в параметре saveto). У него расширение DMF и доступ к этому файлу заблокирован. Хотелось бы чтобы событие срабатывало когда файл уже создан и разблокирован.
2. При eventType = 'dm_download_state' и State=dsDownloaded
скаченный файл еще не сохранен с нужным именем (как указано в параметре saveto). У него расширение DMF и доступ к этому файлу заблокирован. Хотелось бы чтобы событие срабатывало когда файл уже создан и разблокирован.
По моему
Я из-за узкого API плагинов не могу слить две закачки в FileShares,
если вы знаете о чем идет речь.
Уже пытался изменять URl в xml файле, но DM оттуда ничего не
читает, только пишет. Осталось только лезть в память к DM
через Win32 API и менять там URL вручную.
Но это рисковано, можно получить от Windows по затылку .
иПри добавлении закачки (action = 'AddingURL') нет возможности указать категорию.
можно обобщить в !Нельзя изменять свойства существующей закачки!.еще бы возможность изменять <свойства> закачки
Я из-за узкого API плагинов не могу слить две закачки в FileShares,
если вы знаете о чем идет речь.
Уже пытался изменять URl в xml файле, но DM оттуда ничего не
читает, только пишет. Осталось только лезть в память к DM
через Win32 API и менять там URL вручную.
Но это рисковано, можно получить от Windows по затылку .
Пришлось ждать ('dm_timer_5'), пока не создастся файл, но это не есть хорошо. А п.1. так и повис. Надеюсь на разработчиков DMipranger wrote: 2. При eventType = 'dm_download_state' и State=dsDownloaded
скаченный файл еще не сохранен с нужным именем (как указано в параметре saveto). У него расширение DMF и доступ к этому файлу заблокирован. Хотелось бы чтобы событие срабатывало когда файл уже создан и разблокирован.
- Korney San
- Гуру
- Posts: 1116
- Joined: 02 Oct 2006, 17:01 Mon
- Location: Беларусь, Гомель
- Contact:
Э-э-э,не совсем.aldari wrote:По моемуиПри добавлении закачки (action = 'AddingURL') нет возможности указать категорию.можно обобщить в !Нельзя изменять свойства существующей закачки!.еще бы возможность изменять <свойства> закачки
Например, если вновь добавить закачку с СУЩЕСТВУЮЩИМ URL и другим приоритетом, приоритет МЕНЯЕТСЯ (сам проверил). Видимо, если URL совпадает с существующим, можно изменить параметры. доступные через AddingURL. Правда, категории там нет...
Попробуй через AddingURL mirror1 start - вдруг сработает.aldari wrote: Я из-за узкого API плагинов не могу слить две закачки в FileShares,
если вы знаете о чем идет речь.
Уже пытался изменять URl в xml файле, но DM оттуда ничего не
читает, только пишет. Осталось только лезть в память к DM
через Win32 API и менять там URL вручную.
Но это рисковано, можно получить от Windows по затылку .
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
- Korney San
- Гуру
- Posts: 1116
- Joined: 02 Oct 2006, 17:01 Mon
- Location: Беларусь, Гомель
- Contact:
Год и пять месяцев назад в поисках менеджера закачек, способного любым способом обойти ограничения нашего корпоративного прокси, я набрёл на Download Master и написал свой первый плагин.
Год назад я открыл эту тему небольшим списком того, что меня не устраивало в интерфейсе плагинов. Открыл исключительно потому, что ни в ICQ, ни по почте мне никто из разработчиков не ответил.
Сейчас, пользуясь DM, написав 9 плагинов (6 из которых вы можете найти на форуме) и поработав над собой, я переформулировал требования к интерфейсу, которые и выразил в шапке этой темы.
Год назад я открыл эту тему небольшим списком того, что меня не устраивало в интерфейсе плагинов. Открыл исключительно потому, что ни в ICQ, ни по почте мне никто из разработчиков не ответил.
Сейчас, пользуясь DM, написав 9 плагинов (6 из которых вы можете найти на форуме) и поработав над собой, я переформулировал требования к интерфейсу, которые и выразил в шапке этой темы.
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд