El trabajo se dividirá en dos partes:
- Script en bash para obtener los eventos y parsearlos
- Widget en LUA que lee el fichero generado por el script en bash
Primero instalaremos la herramienta que nos descargará los eventos de nuestro Gogle Calendar:
git clone https://github.com/insanum/gcalcli.git
cd gcalcli
python setup.py install
emerge dev-python/pip
pip install vobject parsedatetime
emerge dev-python/google-api-python-client
Ahora creamos el script que nos parseará la salida de la herramienta anterior y nos generará el fichero con la sintaxis correcta para ser leído por el widget en LUA:
#! /bin/bash
NOW=$(date '+%Y-%m-%d %H:%m')
NOWEPOCH=$(date +%s)
#echo -e "NOW: $NOW"
#echo -e "NOWEPOCH: $NOWEPOCH"
# 30days --> 2592000
ENDEPOCH=$((ENDEPOCH=NOWEPOCH+2592000))
#echo -e "ENDEPOCH: $ENDEPOCH"
END=$(date -d @$ENDEPOCH '+%Y-%m-%d %H:%m')
#echo -e "END: $END"
> /tmp/tareas
IFSORI=$IFS
IFS=$'
'
for LINE in $(/usr/bin/gcalcli --tsv --calendar CALENDARIO1 --calendar CALENDARIO2 --calendar CALENDARION agenda "'$NOW'" "'$END'")
do
YEAR=$(echo $LINE|awk -F "-" '{print$1}')
#echo -e "-- YEAR: $YEAR"
MONTH=$(echo $LINE|awk -F "-" '{print$2}')
#echo -e "-- MONTH: $MONTH"
DAY=$(echo $LINE|awk -F "-" '{print$3}'|awk -F " " '{print$1}')
#echo -e "-- DAY: $DAY"
case $MONTH in
01) MONTHLETTERS=Jan ;;
02) MONTHLETTERS=Feb ;;
03) MONTHLETTERS=Mar ;;
04) MONTHLETTERS=Apr ;;
05) MONTHLETTERS=May ;;
06) MONTHLETTERS=Jun ;;
07) MONTHLETTERS=Jul ;;
08) MONTHLETTERS=Aug ;;
09) MONTHLETTERS=Sep ;;
10) MONTHLETTERS=Oct ;;
11) MONTHLETTERS=Nov ;;
12) MONTHLETTERS=Dec ;;
esac
#echo -e "-- MONTHLETTERS: $MONTHLETTERS"
TXT=$(echo $LINE|cut -f5-)
#echo -e "-- TXT: $TXT"
echo -e "** $TXT" >> /tmp/tareas
echo -e "SCHEDULED: <$YEAR-$MONTH-$DAY $MONTHLETTERS>" >> /tmp/tareas
done
IFS=$IFSORI
Realizamos la primera ejecución para que nos pida las credenciales de la cuenta de gmail, a partir de este momento gcalcli almacenará dichas credenciales:
NOTA: Puede que intente abrir la web para dar acceso a la cuenta con un navegador sin javascript, si es el caso antes de la ejecución del script indicaremos el navegador a utilizar:
Metemos el script en el cron para que se ejecute cada 5 min:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
*/5 * * * * /home/XXXX/.scripts/cal.sh >/dev/null 2>&1
Nos bajamos el widget:
wget www.alfaexploit.com/files/orglendar.lua
NOTA: El widget de mi web ha sido retocado para que la semana comience en lunes, el script anterior impone la restricción de que los eventos del calendario no pueden tener espacios en blanco, se puede sustituir por _ por ejemplo, para mas información acerca del widget ,
Integramos el widget en el reloj:
-- Create a textclock widget
mytextclock = awful.widget.textclock({ align = "right" })
local orglendar = require('orglendar')
orglendar.files = { "/tmp/tareas" }
orglendar.register(mytextclock)
Con esto ya lo tenemos todo, ahora cuando el ratón pase sobre el reloj se desplegará un calendario y una lista de los eventos, el resultado es el siguiente: