Прежде чем разработаем последние две функции класса, сначала в предыдущем коде внесем маленькое дополнение.
В функции action, в ветке сохранения настроек(когда ранее сохраненного файла не оказалось), мы просто сохранили настройки. А нужно бы по логике вещей выдать сообщение, чтобы пользователь понял, что настройки успешно сохранились. Поэтому в той части кода, сразу за cохранением настроек исходя из логики добавим вывод сообщения, что настройки успешно сохранены, то есть вот так:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
И весь код приобретает вид:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Последние две функции нашего класса.
self.saveset это просто сохранение настроек (после подтверждения о перезаписи существующего файла):
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Это тот самый код для сохранения, уже разбирали по буквочкам. Здесь у функции присутствует аргумент
answer и соответственно код выполнится, если
if answer is True:, то есть при получении положительного ответа....
И последняя функция нашего класса
self.restoreset, которая будет задействована после того, как пользователь нажал ОК в пункте сохранения настроек и подтвердил затем сохранение.
Наконец-то именно здесь применим тот код для сохранения, который разрабатывали в самом начале, вот так:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Это тот самый код, что разрабатывали в самом начале урока, за исключением пути сохранения
файла настроек (если помните тогда мы сохраняли временно в папку темп).
Здесь остается только добавить запуск скрипта с восстановлением настроек.
Напомню текст скрипта:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Сохраним этот скрипт в папку с плагином, создав для этого отдельную папку
script, и назвав скажем файл скрипта
'restore_settings.sh'.
В таком разе код запуска скрипта будет выглядеть так:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Соответственно функция restoreset примет вид:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Код класса в плагине(то есть меню плагина, со всеми действиями с этим меню) полностью готов.
А ведь мы создали целый модуль собственный! И причем абсолютно рабочий.....
Вот он:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
И осталось дело за совсем малым, написать код вызова плагина и если нужно добавить локализацию
для менюшек и сообщений нашего плага.
Вызов плагина. Тут очень просто.
Тоже ничего придумывать питоновского вобщем-то не надо.
Об этом тоже позаботились создатели имиджей.
В самом конце нашего кода, после тела класса
NimSettings создаем функцию
Plugins, который в качестве аргументов будет ожидать аргументы словарного типа (то бишь **kwargs), эта функция будет возвращать модуль
PluginDescriptor, аргументы для которой мы придумаем.
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Сам модуль
PluginDescriptor импортируем из файла
Plugin.py из папки
PluginsВам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Открываем этот самый
Plugin.py и изучаем какие же аргументы нужно передать этому самому модулю
PluginDescriptor, для этого достаточно просмотреть аргументы его инструкции
__init__Вот эти аргументы:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Рассмотрим по одной.
а)
name = "Plugin" #название плагина, у нас будет
name = "Restore Tuner settings"б)
where = [ ] # в каком меню показать плагин, нам достаточно показать в списке плагинов, запишем
where = [PluginDescriptor.WHERE_PLUGINMENU]в)
description = "" # описание плагина, запишем
description = "Plugin for save Tuner settings"г)
icon = None # пропустим, так как у нас нет собственной иконки для плага
д)
fnc = None # собственно что нужно задействовать при выборе плагина, запишем функцию, которую назовем произвольно, например
fnc = mainе) остальные атрибуты оставляем по умолчанию....
Впишем эти аргументы нами придуманные в функцию вызова плагина, добавив при необходимости скобки с нижним подчеркиванием для переводимости
при необходимости:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
И до этой функции предпоследним напишем функцию main, которая просто при выборе строчки с плагином (в списке плагинов)
и запустит наш класс
NimSettings:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Все. Наш плагин готов в принципе к использованию.
Осталось только два нюанса.
Первый.
Если мы хотим, чтобы плагин был русскоязычным, нужно заложить в плагин локализуемость и добавить файлы локализации.
Сильно углубляться тут в код не буду. В этом случае-то всегда можете использовать готовый шаблон, да и код достаточно прост.
Для создания переводимости меню и сообщений плагина (кроме тех скобок и нижнего подчеркивания, что мы уже добавляли в плагин)
нужно для начала импортировать
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Затем в самом начале кода плагина тоже (сразу за импортами) прописать вот такой простой код
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Если хотите разобрать этот код по буквочкам, изучаем
gettext.py,
Language.py и
os.py (в имидже).
А так понятно "
NimSettings" - это так мы назовем файл локализации для плагина, который будет находится,
как и указано в этом коде
Extensions/TunerSettingsRestore/locale/ А сам файл локализации будем создавать лучше и быстрей всего из готового шаблона.
Создайте себе шаблон например взяв айл локали вашего другого плагина, и просто изменив название
создавать новый файл локали.
К файлам локали (
po и
mo) тоже есть свои требования, объяснять их не задача нашей темы.
Вот теперь код, который получился у нас окончательно. Наш
plugin.pyВам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Файл локали тоже скажем создали.
Остался последний нюанс.
Файл
__init__.py в папке плагина.
Смысл этого файла:
а) присутствие этого файла нужно, если из этой директории (то есть из папки плагина) потребуется импорт
какого-то модуля. Например, если ваш плагин будет состоять из нескольких файлов-модулей (пакетов).
б) если заведомо нужно объявлять атрибуты для этой директории. В нашем случае не нужно.
Потому оставляем просто пустой (все равно униксовый должен быть, хоть и пустой) файл
__init__.pyВот теперь все.
Наш плагин полностью готов.
Наверно вместе со мной создавали параллельно файлы плагина?
Вот такая папка с файлами плагина должна была получиться, которую в архиве приложил.
Забрасываем эту папку в имидж по пути
/usr/lib/enigma2/python/Plugins/Extensions/Перегружаемся.
И заходя в меню списка плагинов, видим наш плагин
![](https://s020.radikal.ru/i705/1312/ea/61e211df44fc.jpg)
![](https://i023.radikal.ru/1312/63/f3313b2bf83e.jpg)
![](https://s43.radikal.ru/i099/1312/f3/76c8f42c1f45.jpg)
![](https://s020.radikal.ru/i706/1312/d1/987eccccdcdc.jpg)
Поздравляю
Вы вместе со мной написали свой первый рабочий плагин!
А если серъезно, достиг ли я цели, которую поставил перед написанием плагина публично?
Целью была показать новичкам изучающим питон, как нудную зубрежку питона можно и нужно применить в плагиностроении.
Если бы например когда я только начал изучать питон, набрел бы на такой ФАК, как бы я сэкономил свое время....
А может кого-то и подстегну к плагиностроению и в нашем полку плагинописателей прибудет возможно?
Надеюсь кому-то помог.....