
En esta segunda lección vamos a explicar la creación de un plugin Basico enigma2, realizando la importación de una clase llamada «ConfigList» desde el módulo «Components» del código fuente Enigma2.en la que nos aparecera un menu con una lista de funciones seleccionables desde la interfaz del menu de este plugin.
Lecciones anteriores:
- Leccion 1: https://jungle-team.com/leccion-1-creacion-plugin-basico-python-enigma2/
1. Estructura Basica codigo
Como vimos en la primera leccion la estructura basica del codigo de un plugin enigma2 consta de diferentes secciones, dependiendo de la funcionalidad que le vamos a dar al plugin, deberemos realizar primero la importacion de las librerias necesarias para que el plugin funcione correctamente, estas importanciones se insertan en la cabezera del codigo.
Para esta segunda leccion vamos a realizar:
- Un menu de seleccion con diferentes elementos
- Que segun lo que seleccionemos nos inserte texto en un archivo.
- Para ver una posible usabilidad, lo vamos a enfocar en editar el archivo de configuracion de junglescript, cuyo archivo de configuracion es enigma2_pre_start.conf
1. Realizamos las importaciones necesarias para la funcionalidad del plugin que vamos a realizar:
from Plugins.Plugin import PluginDescriptor from Components.ActionMap import ActionMap from Screens.Screen import Screen from Screens.MessageBox import MessageBox from Components.Label import Label from Components.Sources.List import List from Components.config import config, getConfigListEntry, ConfigText, ConfigInteger, ConfigSelection, ConfigSubsection, ConfigYesNo, configfile, NoSave from Components.ConfigList import ConfigListScreen
- PluginDescriptor: es una clase de la librería en Enigma2 que se utiliza para describir las propiedades de un plugin. Esta clase se utiliza para que el sistema de Enigma2 pueda identificar el plugin y mostrarlo en el menú de plugins.
- ActionMap: es una clase de la librería en Enigma2 que se utiliza para mapear eventos y acciones en la interfaz de usuario de Enigma2, los eventos pueden ser acciones realizadas por el usuario, como presionar un botón del mando a distancia, por ejemplo la funcion que se realiza al pulsar el boton OK del mando a distancia.
- Screen: es una clase de la librería en Enigma2 que se utiliza para crear y gestionar pantallas (ventanas) en la interfaz de usuario de Enigma2.
- MessageBox: es una clase de la librería en Enigma2 que se utiliza para mostrar mensajes y diálogos en la interfaz de usuario de Enigma2.
- Label: proporciona métodos para crear y personalizar etiquetas de texto, que pueden ser utilizadas para mostrar información al usuario, como el título de una pantalla.
- List: La clase «List» nos proporiona una lista de opciones de configuración adicionales para el plugin, como la selección de una configuracion concreta. En general, la clase «List» es una herramienta útil para manejar una lista de objetos en un plugin de Enigma2.
- Config: Cada una de las clases y objetos que se pueden importar de esta libreria nos proporcionan un tipo de opción de configuración diferente que puede ser utilizado para solicitar información del usuario o establecer valores predeterminados en el plugin, por ejemplo la clase «ConfigYesNo» puede utilizarse para solicitar al usuario que seleccione entre dos opciones, sí o no.
- ConfigListScreen: La importación de la clase «ConfigListScreen» desde el módulo «Components.ConfigList» en un plugin de Enigma2 permite la creación de una pantalla de configuración que muestra una lista de opciones de configuración en forma de tabla.
2. Elementos seleccionables por el usuario, como hemos mencionado con anterioridad, que deseeamos crear un menu de seleccion de objetos, en primer lugar deberemos introducir los elementos a seleccionar que nos apareceran:
config.plugins.PluginBase2 = ConfigSubsection() config.plugins.PluginBase2.picon = ConfigYesNo(default=False) config.plugins.PluginBase2.tipolista = ConfigSelection(default="astra", choices=[ ("astra", _("Instalar Astra")), ("astra-comunitaria", _("Instalar Astra Comunitaria")), ("astra-hotbird", _("Instalar astra-hotbird")), ("astra-hispast", _("Instalar astra-hispasat")), ("astra-hotbird-hispasat", _("Instalar astra-hotbird-hispasat")), ]) config.plugins.PluginBase2.tipopicon = ConfigSelection(default="movistar-original", choices=[ ("movistar-original", _("Instalar picon original")), ("movistar-color", _("Instalar picon color")), ("movistar-lunar", _("Instalar picon lunar")), ])
En este caso la donfiguracion del plugin que se llama «PluginBase2» y se define como una subsección de la configuración del plugin principal. Dentro de esta subsección se definen tres elementos de configuración diferentes:
- «picon»: Se define como un elemento de configuración «ConfigYesNo» con un valor predeterminado de «False». Este elemento permite al usuario activar o desactivar la descarga e instalación de los picons (iconos de canal) para el plugin.
- «tipolista»: Se define como un elemento de configuración «ConfigSelection» con un valor predeterminado de «astra» y una lista de opciones de selección personalizadas. Este elemento permite al usuario seleccionar la lista de canales que desea descargar e instalar en el plugin.
- «tipopicon»: Se define como un elemento de configuración «ConfigSelection» con un valor predeterminado de «movistar-original» y una lista de opciones de selección personalizadas. Este elemento permite al usuario seleccionar el tipo de picon que desea descargar e instalar en el plugin.
3. Class: las clases se utilizan para definir los diferentes componentes de la interfaz de usuario, como pantallas, listas, botones, etiquetas, entre otros. Cada clase define una serie de atributos y métodos que definen el comportamiento y la apariencia de ese componente en la interfaz de usuario.
Por ejemplo, la clase Screen se utiliza para definir una pantalla en la interfaz de usuario de Enigma2, y proporciona atributos y métodos para personalizar la apariencia y el comportamiento de esa pantalla. De manera similar, la clase List se utiliza para definir una lista de elementos configurables en la interfaz de usuario de Enigma2, y proporciona atributos y métodos para personalizar la apariencia y el comportamiento de esa lista.
class PluginBase2(ConfigListScreen, Screen): skin = """ <screen name="Plugin Base 2" title="Base2" position="center,center" size="800,500"> <widget name="title" position="10,10" size="380,40" font="Regular;24" halign="center" /> <widget name="config" position="10,60" size="700,400" itemHeight="30" /> </screen> """ def __init__(self, session): Screen.__init__(self, session) self['title'] = Label('Base ejecucion funcion configuracion') self.indexpos = None self.list = [] self.list.append(getConfigListEntry(_('Selecciona la lista canales a instalar'), config.plugins.PluginBase2.tipolista)) self.list.append(getConfigListEntry(_('Selecciona si quiere instalar picon'), config.plugins.PluginBase2.picon)) self.list.append(getConfigListEntry(_('Selecciona tipo picon a instalar'), config.plugins.PluginBase2.tipopicon)) ConfigListScreen.__init__(self, self.list, session=session) self['actions'] = ActionMap(['OkCancelActions'], { 'ok': self.save, 'cancel': self.close, }, -2)
El método «init» de la clase «PluginBase2», que se ejecuta cuando se crea una instancia de la clase. En este método, se realiza la inicialización de la pantalla de configuración personalizada del plugin.
En primer lugar, se llama al método «init» de la clase base «Screen» para inicializar la pantalla de configuración. Luego, se define un widget de etiqueta para mostrar el título de la pantalla de configuración.
A continuación, se inicializan las variables «indexpos» y «list». «indexpos» se utiliza para almacenar la posición del elemento seleccionado en la lista de elementos de configuración, mientras que «list» es una lista vacía que se utilizará para almacenar los elementos de configuración personalizados.
Luego, se agregan tres elementos de configuración personalizados a la lista «list» utilizando la función «getConfigListEntry». Cada elemento de configuración personalizado se crea con un título y una referencia a la opción de configuración correspondiente en el archivo de configuración del plugin. En este caso, se agregan elementos para seleccionar la lista de canales a instalar, habilitar o deshabilitar la instalación de los picons y seleccionar el tipo de picon a instalar.
Después de agregar los elementos de configuración a la lista, se llama al método «init» de la clase base «ConfigListScreen» para inicializar la pantalla de configuración con la lista de elementos de configuración personalizados. La variable «session» se pasa como argumento a este método.
En cuanto al objeto skin (xml), su funcion es:
En este caso, se está definiendo una pantalla de configuración con el nombre «Plugin Base 2» y el título «Base2». La pantalla se posiciona en el centro de la pantalla y tiene un tamaño de 800×500 píxeles.
Dentro de la pantalla hay dos widgets definidos: uno con el nombre «title» que muestra el título de la pantalla y se posiciona en la parte superior de la pantalla, y otro con el nombre «config» que muestra la lista de opciones de configuración y se posiciona debajo del título.
El widget «title» tiene un tamaño de 380×40 píxeles y se alinea en el centro de la pantalla horizontalmente. El texto se muestra con una fuente de tamaño 24 y se alinea en el centro horizontalmente.
El widget «config» tiene un tamaño de 700×400 píxeles y muestra la lista de opciones de configuración. El atributo «itemHeight» define la altura de cada elemento de la lista.
4. Funcion principal del plugin, es la seccion donde definimos que deseamos que realize el plugin, en este caso seleccionar por el usuario una lista de opciones la que prefiera y grabar su seleccion en un archivo de configuracion, en este caso como mencionemos al principio para enigma2_pre_start.conf, es decir cuando nosotros seleccionemos una opcion en el menu del plugin y pulsemos el boton ok del mando a distancia se ejecutaria esta accion.
def save(self): config.plugins.PluginBase2.tipolista.save() config.plugins.PluginBase2.picon.save() config.plugins.PluginBase2.tipopicon.save() configfile.save() if config.plugins.PluginBase2.picon.value == False: with open("/usr/bin/enigma2_pre_start.conf", "w") as f: f.write(f"LISTACANALES={config.plugins.PluginBase2.tipolista.value}\n") f.write("PICONS=0\n") f.write(f"TIPOPICON={config.plugins.PluginBase2.tipopicon.value}\n") else: with open("/usr/bin/enigma2_pre_start.conf", "w") as f: f.write(f"LISTACANALES={config.plugins.PluginBase2.tipolista.value}\n") f.write("PICONS=1\n") f.write(f"TIPOPICON={config.plugins.PluginBase2.tipopicon.value}\n") self.session.open(MessageBox,(_("Configuracion guardada")), MessageBox.TYPE_INFO, timeout = 4 )
Este es un método save()
definido en la clase PluginBase2
. Este método guarda en el sistema la configuración de usuario realizada en el complemento.
Guarda los valores de tres opciones de configuración – tipolista
, picon
y tipopicon
– utilizando el save()
método de sus respectivos Config
objetos. Luego llama configfile.save()
para guardar los cambios realizados en el archivo settings
archivo de configuración de enigma2 ubicado en /etc/enigma2
Según el valor de la picon
opción, escribe PICONS=0
o PICONS=1
en el /usr/bin/enigma2_pre_start.conf
archivo junto con los valores de las otras dos opciones.
Finalmente, abre un cuadro de mensaje para informar al usuario que se ha guardado la configuración.
5. Funcion de inicio del plugin y descripcion
def main(session, **kwargs): session.open(PluginBase2) def Plugins(**kwargs): return [PluginDescriptor( name="Plugin Base 2", description="Menu Configuracion con funcion", icon="base2.png", where=[PluginDescriptor.WHERE_PLUGINMENU], fnc=main, )]
La función main es la función que se ejecuta al seleccionar el plugin desde el menú principal de enigma2, en este caso se abre la pantalla PluginBase2.
La función Plugins es una función que devuelve una lista de objetos PluginDescriptor. Cada objeto PluginDescriptor describe un plugin y tiene varios atributos, como name (nombre del plugin), description (descripción del plugin), icon (ruta del archivo de icono), where (dónde aparece el plugin, en este caso en el menú de plugins), y fnc (la función que se ejecuta al seleccionar el plugin).
3. Ejecucion del Plugin
En este caso hemos realizado un codigo basico de un plugin enigma2 con seleccion de configuracion, el cual lo podeis descargar para probar y editar del siguiente enlace:
Una vez descargado ya el plugin realizara las acciones que hemos explicado y desarrollado en esta leccion:
Nos aparece menu para seleccionar las opciones que deseemos
Podemos cambiar la seleccion de opciones
Al pulsar ok se guardaran las opciones y mensaje de haberlo realizado
Tras ello, las opciones elegidas se habran guardado en el archivo enigma2_pre_start.conf
Asi como guardadas en el archivo settings de configuracion de enigma2:
1 comentario en «Leccion 2: Creacion Plugin Basico python enigma2 elementos configuracion»