Простой урок по созданию плагина

Автор MasterHD, 09 Август 2010, 12:17:06

« VLC инструкция по использованию плагина <- | -> Проблема снастройкой SW101D на DreamBox 800HD »

0 Пользователей и 1 гость просматривают эту тему.

MasterHD

09 Август 2010, 12:17:06 Последнее редактирование: 10 Август 2010, 18:44:27 от MasterHD
 Плагины создаются для решения каких либо задач

1 Для примера поставим простую задачу
- допустим мы часто пользуемся рестартом GUI , и немного подумав как облегчить себе эту задачу , что бы ускорить данный процесс - приходим к выводу - нам надо одним нажатием какой либо кнопки моментально получить результат ( вот и сделаем для данной задачи плагин Рестарт GUI )

2 Раз это системная задача - создадим плагин в папке системных плагинов ( usr/lib/enigma2/python/Plugins/SystemPlugins/RestartGUI/
то есть после того как создадим плагин - расположим его в данной директории, а пока -

3 Создадим сам плагин на компе

3.1 Создаём папку и называем её так как хотим назвать плагин - RestartGUI
3.2 В папке создаём текстовой файл ( пустой ) с названием
__init__ 
3.3 Так же создаём текстовой файл plugin ( это и будет наш плагин )
3.4 Меняем расширение текстовых файлов txt на py 
Создав эти два файла с расширением py - мы создали свои исходники в формате языка питон ( на котором собственно и написана энигма )

4 Вернёмся к главному - к задаче
Нашу задачу можно выполнить разными способами , один из них - телнет команда
в данном случае для рестатра гуи используется телнет команда

wget -O /dev/null -q http://root:dreambox@localhost/web/powerstate?newstate=3
( данная команда , как и ещё сотня команд лежит в разделе https://forum.vsetv.org/index.php?topic=2815.0

5 Для использования команд самый простой вариант - использовать скрипты
Значит нам надо создать скрипт -
Снова создаём текстовой файл , но с расширением sh ( расширение скрипта )
и пишем ( можно копировать - вставить :) ) нашу команду -
wget -O /dev/null -q http://root:dreambox@localhost/web/powerstate?newstate=3

6 Что бы не терять наш скрипт ( а так же иметь возможность использовать его в других плагинах ) - кидаем по FTP наш готовый скрипт в папку usr/script/
и даём ему права 755 ( право на исполнение )

Продолжаем ваять плагин :)

7 Нашу папку с почти готовым скриптом кидаем - см.пункт 2
Даём ей права 755
Открываем её и на наши init.py и на plugin.py даём права 644 ( чтение и запись )

8 Открываем файл plugin.py для редактирования и пишем :)

from Plugins.Plugin import PluginDescriptor
from Screens.Console import Console

def main(session, **kwargs):
    session.open(Console, title = "Restart GUI", cmdlist = ["sh '/usr/script/RestartGUI.sh'"])

def Plugins(**kwargs):
    return [PluginDescriptor(name = "Restart GUI", description = "Plugin for fast Restart GUI", where = PluginDescriptor.WHERE_PLUGINMENU, fnc = main, icon="plugin.png")]


Что мы написали и для чего разберитесь включая логику ( и переводчик :) )
для использования других скриптов достаточно заменить название скрипта ( и путь если он у вас не в папке usr/script ) - /usr/script/RestartGUI.sh

В общем то плагин уже готов ( сохраняем изменения ) и делаем рестарт GUI ( из наших исходников дрим автоматом скомпилирует уже рабочий плагин )
После чего в каталоге плагинов увидите свой плагин ...

9 Плагин можно украсить иконкой ( мы уж прописали icon="plugin.png" название иконки как plugin.png , соответственно если в папку плагина мы добавим картинку в формате png с названием plugin - её и увидим в названии плагина , если не добавим - плагин задействует дефолтный рисунок для плагина из дефолтного скина .



10 Задачи в линуксе могут иметь несколько решений ..
и если бы мы в плагине вместо ссылки на скрипт - просто прописали саму команду ( использованную в скрипте ) -
from Plugins.Plugin import PluginDescriptor
from Screens.Console import Console

def main(session, **kwargs):
   session.open(Console, title = "Restart GUI", cmdlist = ["wget -O /dev/null -q http://root:dreambox@localhost/web/powerstate?newstate=0'"])

def Plugins(**kwargs):
   return [PluginDescriptor(name = "Restart GUI", description = "Plugin for fast Restart GUI", where = PluginDescriptor.WHERE_PLUGINMENU, fnc = main, icon="plugin.png")]

то и в данном случае плагин был бы правильным и рабочим ( и скрипт нам в данном случае совсем не нужен )


...продолжение следует?...


BBS79

Дополнение к пункту 9.
9.1. Формат иконки должен быть: PNG 100x40 24bpp (и еще надо преобразовать цветовые каналы в один индексированый альфа-канал, в Photoshop меню Indexed Colors).

p.s. если что то не так - поправьте.
DREAMBOX 800HD ssl76D MНD 9.6.4 Kingston 8G samsung  LCD 32" D-Link 320 USB Modem Huavei 1550 BeeLine

MasterHD

Цитата: BBS79 от 10 Август 2010, 19:05:10
Дополнение к пункту 9.
9.1. Формат иконки должен быть: PNG 100x40 24bpp (и еще надо преобразовать цветовые каналы в один индексированый альфа-канал, в Photoshop меню Indexed Colors).

p.s. если что то не так - поправьте.
в данном случае иконки именно такого размера , так как этот ( стандартный ) размер задан для нашего скина , хотя в принципе могут быть любого в зависимости от заданного размера для скина ...