Como sabrán, quienes siguen a menudo mi blog, hace unos meses creé un plugin para Pidgin – MorseCodeTalk, ahora quiero compartirles un pequeño tutorial para poder crear vuestras propias extensiones.
1- Creamos un Directorio de Trabajo:
# mkdir ~/development
2- Descargar las fuentes de Pidgin y moverlo al directorio creado:
En mi caso he descargado la versión 2.7.9.
http://www.pidgin.im/download/source/
3- Descomprimir las fuentes:
# tar -jxvf pidgin-2.7.9.tar.bz2
4- Configurar las fuentes:
# cd pidgin-2.7.9
# ./configure
4.1- Errores:
Si hay errores de dependencias, instala los plugins que falta:
Ejem: aptitude install intltool
4.2- Opciones:
– Usa –disable-vv si no necesitarás alguna funcionalidad.
Ejem: ./configure --disable-vv --disable-idn --disable-nm --prefix=/opt/pidgin
- prefix es para que se instale en /opt/pidgin
4.3- Advertencia:
Si ya tenías instalado pidgin anteriormente, te saldrá una advertencia, pero no te preocupes, podrás iniciar la nueva versión de Pidgin por consola.
Warning: You have an old copy of Pidgin at /usr/bin/pidgin.
5- Compilar las fuentes:
# make
Esto podría demorar un poco.
6- Crear el Plugin:
Para empezar crear el plugin deberemos dirigirnos al directorio siguiente:
$ cd libpurple/plugins/
Crearemos un plugin de ejemplo llamado holamundo que sólo nos mostrará una ventana de diálogo al activarlo, para ello debemos crear un fichero de acuerdo al lenguaje de programación que usaremos y el editor que prefieran, yo alterno entre gedit(editor gráfico) y nano(editor desde consola).
Pidgin ofrece API’s para crear extensiones en diferentes lenguajes, como C, Perl, Tcl, d-bus, para este ejemplo usaré el lenguaje de entre ellos que más conozco, que es C (no C++).
6.1- Crear el Código del Plugin:
$ nano holamundo.c
#define PURPLE_PLUGINS #include #include "notify.h" #include "plugin.h" #include "version.h" static gboolean plugin_load(PurplePlugin *plugin) { purple_notify_message(plugin, PURPLE_NOTIFY_MSG_INFO, "Hola Mundo!", "Este es mi primer Plugin para Pidgin", NULL, NULL, NULL); <pre><code>return TRUE; </code></pre> } static PurplePluginInfo info = { PURPLE_PLUGIN_MAGIC, PURPLE_MAJOR_VERSION, PURPLE_MINOR_VERSION, PURPLE_PLUGIN_STANDARD, NULL, 0, NULL, PURPLE_PRIORITY_DEFAULT, <pre><code>&quot;core-holamundo&quot;, &quot;Hola Mundo&quot;, &quot;1.0&quot;, &quot;Plugin Hola Mundo&quot;, &quot;Plugin Hola Mundo&quot;, &quot;Beastieux Zeroo &quot;, &quot;https://beastieux.com", plugin_load, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL </code></pre> }; static void init_plugin(PurplePlugin *plugin) { } PURPLE_INIT_PLUGIN(holamundo, init_plugin, info)
La siguiente parte del código nos permite dotar de información suficiente para el plugin, acontinuación describo cada uno de los parámetros:
static PurplePluginInfo info = { PURPLE_PLUGIN_MAGIC, /* Este deberá ser siempre PURPLE_PLUGIN_MAGIC.*/ <pre><code>PURPLE_MAJOR_VERSION, /* Este par&#225;metro ayuda a determinar la versi&#243;n de Pidgin en el que es compilado, del mismo modo permitir&#225; usar el plugin s&#243;lo en la versi&#243;n donde fue compilada */ PURPLE_MINOR_VERSION, /* Versi&#243;n a partir del cual podr&#225; funcionar el Pidgin */ PURPLE_PLUGIN_STANDARD, /* PurplePluginType: Hay 4 diferentes valores el primero es PURPLE_PLUGIN_UNKNOWN; no deber&#237;a ser usado, PURPLE_PLUGIN_STANDARD; este es el valor m&#225;s usado. PURPLE_PLUGIN_LOADER; usamos este cuando queremos cargar plugins no nativos por ejemplo los hechos en Perl o Tcl, por &#250;ltimo PURPLE_PLUGIN_PROTOCOL; si tu plugin permitir&#225; conectar con otras redes.*/ NULL, /* Si est&#225;s escribiendo un Core Plugin deber&#237;a ser NULL, Si est&#225;s escribiendo un Pidgin Plugin debes usar PIDGIN_PLUGIN_TYPE. Si est&#225;s escribiendo un Finch Plugin deber&#237;a usar FINCH_PLUGIN_TYPE.*/ 0, /* Este par&#225;metro es para determinar los flags. como el disponible para poner a invisible (PURPLE_PLUGIN_FLAG_INVISIBLE). Con ello haremos que el plugin no aparezca en la lista de plugins. */ NULL, /* Este es un GList de dependencias de plugins.*/ PURPLE_PRIORITY_DEFAULT, /* Determina la prioridad que libpurple dar&#225; a tu plugin. Existen 3 posibilidades, PURPLE_PRIORITY_DEFAULT, PURPLE_PRIORITY_HIGHEST, PURPLE_PRIORITY_LOWEST. */ &quot;core-holamundo&quot;, /* Es el ID de tu plugin.*/ &quot;Hola Mundo&quot;, /* Es el Nombre de tu plugin.*/ &quot;1.1&quot;, /* Es la Versi&#243;n de tu plugin.*/ &quot;Res&#250;men Hola Mundo&quot;, /* Es el Res&#250;men de tu plugin.*/ &quot;Descripci&#243;n Hola Mundo&quot;, /* Es la descripci&#243;n de tu plugin.*/ &quot;Tu Nombre &quot;, /* Datos del desarrollador del Plugin. */ &quot;http://...", /* La Web del Plugin, de donde pueden descargarlo, reportar bugs, etc.*/ plugin_load, /* La funci&#243;n que se carga cuando se inicia el plugin. Deber&#237;a ser de tipo gboolean*/ NULL, /* Es llamado cuando libpurple se descarga, tambi&#233;n deber&#225; ser de tipo gboolean.*/ NULL, /* Es llamado cuando libpurple se destruye, tambi&#233;n deber&#225; ser de tipo gboolean.*/ NULL, /* Deber&#225; apuntar a un PidginPluginUiInfo.*/ NULL, /* Determina si es un PurplePluginLoaderInfo o PurplePluginProtocolInfo*/ NULL, /* Puntero que apunta a una estructura PurplePluginUiInfo. Puedes encontrar un ejemplo de ese tipo de c&#243;digo en: libpurple/plugins/pluginpref_example.c */ NULL, /* Es una funci&#243;n puntero donde se definen acciones. Debe ser de tipo GList *function_name(PurplePlugin *plugin, gpointer context)*/ NULL, /* Es un puntero reservado para el futuro, lo setearemos a NULL porque no lo necesitamos.*/ NULL, /* Es un puntero reservado para el futuro, lo setearemos a NULL porque no lo necesitamos.*/ NULL, /* Es un puntero reservado para el futuro, lo setearemos a NULL porque no lo necesitamos.*/ NULL /* Es un puntero reservado para el futuro, lo setearemos a NULL porque no lo necesitamos.*/ </code></pre> };
6.2- Compilar el fichero holamundo.c:
$ make holamundo.so
6.3- Copiar el plugin creado en el directorio de pidgin:
$ cp holamundo.so ~/.purple/plugins/
6.4- Ejecutar Pidgin y probar el plugin:
$ /opt/pidgin/bin/pidgin
Para crear un plugin con interfaces más elaboradas podemos usar las librerías GTK, y para la interacción con pidgin usamos las librerías libpurple; una buena combinación de C/GTK/Libpurple, y de los conocimientos necesarios del la estructura funcional de pidgin nos permitirán realizar los complementos que queramos, pueden buscar toda la información necesaria en la wiki de desarrolladores de pidgin. Una recomendación de mi parte es que revisen los códigos fuente de los plugins existentes en Pidgin Plugins, y tomarlos como referencia para construir los suyos, es lo que hice antes de empezar a crear mis propios complementes . Ahora, si quieren hacer la versión para windows, generar el dll tiene un proceso algo mas tedioso, se necesitará la ayuda de cygwin en windows y descargar e instalar todos los paquetes del cual pidgin depende para poder compilar las fuentes.
Hola nica, disculpa por la demora.. No creo k haya algún problema de dificultad, solo buscar las librerías necesarias en c para la comunicación por el puerto RS232
hola. me resulta muy interesante tu publicacion de como crear plug in para pidgin.
te hago una consulta. puesto que tengo poco conocimiento en programación.
seria muy dificil crear un plugin, que los mensajes que reciba pidgin los transmita por puerto serial? estoy usando arduino y estoy intentando esto…